web-dev-qa-db-fra.com

Comprendre les noms de domaine personnalisés AWS API Gateway

J'ai du mal à comprendre comment fonctionne le domaine personnalisé AWS API Gateway.

J'ai configuré un Regional Custom Domain Name pour mon api, par exemple api.example.com. Le résultat est un Target Domain Name sous la forme de:

aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com

Si j'essaie d'appeler l'API à l'aide de ce lien, par exemple dans:

https://aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com/mymap/mystage/example

Mais je reçois un 403 Forbidden.

MAIS, si je vais à Stages et que je sélectionne mystage, il y a un gros Invoke URL bleu sous la forme de:

https://bbbbbbbbbb.execute-api.us-east-1.amazonaws.com/mymap/mystage/example

Qui fonctionne!

Alors voici mes 2 premières questions:

1 - Pourquoi API Gateway génère-t-il 2 URL différentes pour la même API (le Target Domain Name et le Invoke URL)?

2 - Pourquoi le Invoke URL fonctionne-t-il et le Target Domain Name pas?


Voici la deuxième partie de ma question, j'essaie de configurer Route 53 pour la configuration Regional Custom Domain Name, mais je ne trouve aucun exemple sur la bonne façon de le faire (juste pour Edge Optimized Custom Domain Name).

J'ai essayé de créer un enregistrement A pour api.example.com sous la forme d'une Alias à aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com, mais il indique:

Le jeu d’enregistrements n’a pas pu être enregistré car: - Cible alias contient une valeur non valide.

J'ai donc créé un enregistrement CNAME pour api.example.com, définissant Alias sur No (définir comme Yes entraîne le même message d'erreur que dans le cas de l'enregistrement A) et la valeur sous la forme aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com, mais je reçois un 404 lorsque j'essaie d'appeler mon API en tant que https://api.example.com/mymap/mystage/example .

Qu'est-ce que je fais mal?


MODIFIER:

Ce fil de discussion a été déplacé vers les forums AWS ici


EDIT 2:

Apparemment, comme l'ont dit les responsables de l'assistance AWS, il existe une incohérence dans la manière dont API Gateway traite les noms de domaine personnalisés et les URL habituelles de la passerelle API. Tout est documenté à ce fil de discussion du forum AWS ici

8
mFeinstein

Si quelqu'un veut comprendre ce qui se passait avec API Gateway, jetez un coup d'œil à ce fil .

En gros, API Gateway traite les URL classiques (telles que aaaaaaaaaaaa.execute-api.us-east-1.amazonaws.com) différemment de la façon dont elle traite les URL de nom de domaine personnalisé (telles que api.myservice.com). Ainsi, lorsque API Gateway transmet votre demande d'API à votre fonction Lambda, celle-ci recevra différentes valeurs path, en fonction du type de votre URL que vous avez utilisée pour appeler votre API.

Dans mon cas, j'utilise le conteneur Java sans serveur afin de pouvoir exécuter un service Web Jersey sur AWS Lambda. Étant donné que l’URL n’est pas transmise de la même manière pour les deux URL, Jersey renverra un 404 lorsqu’il reçoit une URL malformée pour sa configuration.

L'équipe AWS API Gateway a déclaré qu'ils envisageaient d'uniformiser cette invocation d'URL, mais aucun compromis à ce jour (janvier 2018).

Jack répond à la partie 53 de ma question et je n'ai rien à ajouter.

1
mFeinstein

La console Route53 ne prend pas encore en charge API Gateway en tant que cible ALIAS. Vous devrez créer l’enregistrement ALIAS à l’aide d’un CLI/SDK (ou directement sur l’API R53) et fournir la zone hébergée cible indiquée sur cette page: http://docs.aws.Amazon.com/general /latest/gr/rande.html#apigateway_region

Pourquoi API Gateway génère-t-il 2 URL différentes pour la même API (nom de domaine cible Et URL d'appel)?

L'URL d'appel est le point de terminaison par défaut qui est toujours disponible avec un certificat SSL valide. Ce noeud final est géré par API Gateway. Le nom de domaine cible est facultatif (vous devez configurer le nom de domaine personnalisé), et les certificats DNS et SSL sont gérés par vous/le client.

Merci, Jack

2
Jack Kohn - AWS