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
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.
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