Comment configurer API Gateway avec ma propre distribution CloudFront ?

Dernière mise à jour : 07/08/2020

Je veux un point de terminaison d'API optimisé pour la périphérie dans Amazon API Gateway, mais je souhaite davantage de contrôle sur la distribution Amazon CloudFront. Puis-je créer et utiliser ma propre distribution ?

Brève description

Si vos clients d'API sont géographiquement éloignés, vous souhaitez peut-être utiliser un point de terminaison d'API optimisé pour la périphérie dans API Gateway. Ce type de point de terminaison agit comme un point de terminaison régional, mais dispose d'une distribution Web CloudFront gérée par AWS pour améliorer le temps de connexion du client.

Vous pouvez toutefois bénéficier du réseau mondial de diffusion de contenu CloudFront tout en gardant davantage de contrôle sur la distribution. Pour cette configuration, utilisez une API régionale avec une distribution CloudFront personnalisée attribuée manuellement devant celle-ci.

Solution

Créez une API régionale dans API Gateway, puis suivez ces instructions.

Configurer une méthode GET pour votre API

  1. Dans la console API Gateway, choisissez le nom de votre nouvelle API régionale.
  2. Dans le volet Resources (Ressources), choisissez Actions (Actions), puis Create Method (Créer une méthode).
  3. Choisissez GET dans la liste qui s'affiche sous le nœud de ressource /, puis choisissez l'icône de coche.
  4. Dans le volet de / - GET - Setup (/ - GET - Configuration), pour Integration type (Type d’intégration), choisissez Mock (Fictif), puis Save (Enregistrer). Une intégration fictive répond à n'importe quelle requête qui l’atteint, ce qui aidera plus tard à effectuer les tests.

Déployer votre API et obtenir l'URL d'appel

  1. Déployez votre API à une étape.
  2. Dans la partie supérieure du volet Stage Editor (Éditeur d'étape), copiez Invoke URL (URL d'appel) dans le presse-papier. L'URL se présente comme suit :
    https://restApiId.execute-api.region.amazonaws.com/stageName.

Tester votre API

Testez l'URL d'appel de votre API pour obtenir un code de statut HTTP « 200 » à l'aide de la console API Gateway, de l'application Postman ou de la commande curl à partir d'une interface de ligne de commande. Pour plus d'informations sur curl, consultez le site Web du projet curl.

Utilisez la commande curl pour effectuer l'une des actions suivantes :

Remarque : dans les commandes suivantes, remplacez https://restApiId.execute-api.region.amazonaws.com/stageName par l'URL d'appel de votre API.

Dans Linux, exécutez la commande suivante :

curl -IX GET https://restApiId.execute-api.region.amazonaws.com/stageName

Dans Windows PowerShell, exécutez la commande suivante :

curl https://restApiId.execute-api.region.amazonaws.com/stageName

Remarque : si vous obtenez un code de statut autre que « 200 », vérifiez que vous avez déployé l'API à votre étape dans la console. Vérifiez également que vous avez spécifié l'étape dans l'URL.

Créer une distribution Web CloudFront

  1. Dans la console CloudFront, choisissez Create Distribution (Créer une distribution).
  2. Sur la page Select a delivery method for your content (Sélectionner une méthode de livraison pour votre contenu) sous Web, choisissez Get Started (Démarrer).
  3. Sur la page Create Distribution (Créer une distribution), pour Origin Domain Name (Nom du domaine d'origine), collez l'URL d'appel de votre API, mais supprimez le nom de l'étape. Par exemple :
    https://1a2bc3d456.execute-api.us-east-1.amazonaws.com
  4. Pour Origin Path (Chemin d'origine), entrez le nom de l'étape de votre API avec une barre oblique devant (/stageName) [(/nom d’étape)]. Ou, si vous souhaitez entrer vous-même le nom de l'étape lors de l'appel de l'URL, ne saisissez pas de Origin Path (Chemin d'origine).
    Remarque : si vous saisissez un nom d'étape incorrect pour Origin Path (Chemin d'origine), vous pouvez obtenir une erreur lors de l'appel de la distribution CloudFront. Par exemple, une erreur de requête non autorisée qui renvoie le message « Missing Authentication Token » (« Jeton d'authentification manquant ») et un code de réponse 403 Forbidden (403 Interdit).
  5. Pour Minimum Origin SSL Protocol (Minimum Origin SSL Protocol), une bonne pratique consiste à choisir TLSv1.2 uniquement. Ne choisissez pas SSLv3. API Gateway ne prend pas en charge ce protocole.
  6. Pour le paramètre Origin Protocol Policy (Stratégie de protocole d'origine), choisissez HTTPS Only (HTTPS uniquement).
    Remarque : API Gateway ne prend pas en charge les points de terminaison non chiffrés (HTTP). Pour plus d'informations, consultez la section FAQ sur Amazon API Gateway.
  7. (Facultatif) Pour réacheminer des en-têtes personnalisés vers votre origine, saisissez un ou plusieurs en-têtes personnalisés dans la zone Origin Custom Headers (En-têtes personnalisés d'origine).
    Remarque : il existe plusieurs en-têtes personnalisés que CloudFront ne peut pas acheminer vers votre origine.
  8. Si vous avez activé l'authentification IAM sur votre API ou si vous prévoyez de l'activer ultérieurement, vous devez ajouter l'en-tête de requête Authorization (Autorisation) à une liste d'autorisations. Pour Cache Based on Selected Request Headers (Cache basé sur les en-têtes de requêtes sélectionnés), choisissez Whitelist (Liste blanche). Pour Whitelist Headers (En-têtes sur liste blanche), ajoutez Authorization (Autorisation) à la liste des en-têtes autorisés.
    Important : si vous modifiez le paramètre Cache Based on Selected Request Headers (Cache basé sur les en-têtes de requêtes sélectionnés) sur All (Tout) ou si vous autorisez l'en-tête Host (Hôte), votre configuration ne fonctionnera pas. Pour plus d'informations, consultez Mise en cache de contenu basée sur des en-têtes de requêtes.
  9. (Facultatif) Pour utiliser vos propres noms de domaine personnalisés pour la distribution au lieu du nom attribué par CloudFront, saisissez un ou plusieurs noms de domaine pour Alternate Domain Names (CNAME) (Autres noms de domaine – CNAME). Pour plus d'informations, consultez Utilisation d'URL personnalisées pour les fichiers en ajoutant d'autres noms de domaine (CNAME).
  10. (Facultatif) Configurez les autres paramètres que vous souhaitez personnaliser.
  11. Sélectionnez Create Distribution (Créer une distribution).
  12. Attendez que votre distribution soit déployée. Cela peut prendre entre 15 et 20 minutes. Lorsque Status (Statut) affiche Deployed (Déployé) dans la console, la distribution est prête.

Pour plus d'informations, consultez Creating a Distribution (Création d'une distribution).

Tester votre distribution Web CloudFront

  1. Dans la console CloudFront, notez le Domain Name (Nom de domaine) de votre distribution. Si vous n'avez pas utilisé de nom de domaine personnalisé, alors le domaine ressemble à ceci : a222222bcdefg5.cloudfront.net.
  2. Testez le nom de domaine pour obtenir un code de statut HTTP « 200 » à l'aide de l'une des commandes mentionnées précédemment dans la section Test your API (Tester votre API).
    Remarque : si vous avez activé l'authentification IAM sur une méthode pour une ressource d'API particulière, vous devez ajouter le nom de ressource à la fin du nom de domaine de distribution lorsque vous appelez votre API. L'URL d'appel complète avec le nom de ressource ressemble à l'une des URL ci-dessous, selon que vous avez saisi un Origin Path (Chemin d'origine) lors de la création de la distribution : https://distributionDomainName/resourceName ou https://distributionDomainName/stageName/resourceName. Pour plus d'informations sur les tests pour ce cas d'utilisation, consultez la rubrique How do I enable IAM authentication for API Gateway APIs? (Comment activer l'authentification IAM pour les API API Gateway ?).

Remarque : si vous obtenez le code d'erreur de serveur « 500 », il est possible que la distribution ne soit pas entièrement déployée. Si vous n'obtenez aucune réponse, l'enregistrement DNS CloudFront n'a peut-être pas encore été entièrement propagé. Dans les deux cas, vérifiez que vous avez créé votre distribution il y a 15 à 20 minutes, puis réessayez la procédure.

Votre API utilise désormais la distribution que vous avez créée, et vous pouvez accéder à toutes les ressources de l'API à l'aide de l'URL CloudFront.