2

Je suis conscient que de nombreuses questions similaires ont été postées et répondues ici, mais aucune d'elles n'est identique à ce que je vis.AWS Api Gateway + Lambda + domaine personnalisé (Route53) Problème de jeton d'authentification manquante

J'ai une fonction Lambda qui gère les requêtes entrantes (GET et POST). J'ai également mis en place une passerelle api comme point de terminaison publique. En outre, j'ai mis en place le domaine personnalisé suivant Set up Custom Domain Name for API Host Name

L'appel de test fonctionne à la fois dans la console passerelle lambda et API. Tout fonctionne également en utilisant l'URL invoke mais pas avec le domaine personnalisé que j'ai configuré.

Voici quelques détails:

URL Invoke (Travaux):

https://{api gateway id}.execute-api.us-west-2.amazonaws.com/prod/endpoint 

domaine personnalisé endpint (ne fonctionne pas):

https://api.{my domain}.com/endpoint 

Base Mapping Path:

/endpoint endpoint:prod 

Tous rencontrés Hod Auth:

Authorization None 
API Key Not required 

Route53:

A record as alias that points api.{my domain}.com to the cloudfront distribution domain name as alias target. 

J'apprécierais vraiment si quelqu'un sait ce qui se passe ici.

+0

Avez-vous également configuré un 'Route53-Record-Set' qui pointe vers' CloudFront-Distribution'? – MaiKaY

+0

@MaiKaY oui. J'ai un enregistrement A comme alias pour api. {Mon domaine} .com. La cible d'alias est le nom de domaine de distribution CloudFront – jlai

+1

Je suppose que vous devez modifier votre 'BasePath Mapping' à:'/endpoint: prod'. Ou essayez avec le 'BasePath Mapping' existant pour accéder' https: // api. {Mon domaine}.com' – MaiKaY

Répondre

2

J'ai trouvé que le problème est une mauvaise compréhension du fonctionnement du mappage de chemin de base.

Toutes mes configurations sont correctes.

Ma ressource API est pas sous/mais sous/point final

Pour utiliser le domaine personnalisé, au lieu de visiter https://api. {Mon domaine} .com/point final, il doit aller à https://api. {Mon domaine} .com/endpoint/endpoint

Bien sûr, c'est idiot et redondant.

J'ai deux options. Je configure le mappage du chemin de base vers/au lieu de/endpoint ou je peux simplement utiliser la ressource API/au lieu de/endpoint. Je vais avec ce dernier parce que si le mappage du chemin de base est défini sur /, mon api. {Mon domaine} .com ne pourra héberger qu'une seule API (je peux toujours utiliser les ressources sous la même API, mais pourquoi gaspiller la couche supplémentaire d'abstraction?).

Cela semble benne mais je suis toujours heureux que je l'ai compris.

+0

On ne sait pas pourquoi vous vous attendez à ce qu'un chemin de base '/ endpoint' avec une ressource nommée'/endpoint' aboutisse à tout comportement * autre * que d'exiger que les requêtes passent à '/ endpoint/endpoint', puisque la ressource est accessible à base-path + resource. –

+1

Je configure la passerelle API en utilisant le template de lambda et le template le place automatiquement sous le nom de l'API au lieu de la racine de l'API. C'est la première fois que je l'utilise, donc je ne m'attendais pas à ce comportement. Je prévoyais que la ressource est créée juste sous la racine de l'API, ce qui signifie que le nom de l'API devrait juste être le nom de l'API et la racine est utilisée pour la toute première ressource par défaut. – jlai

+1

Je vois ce que tu veux dire. –