DEV Community

Cover image for Comment avoir un nom de domaine sur une API GraphQL (AppSync)
Ménahem Houri
Ménahem Houri

Posted on

Comment avoir un nom de domaine sur une API GraphQL (AppSync)

Vous souhaitez garder "privé" votre API GraphQL de AppSync pour y accéder uniquement depuis votre VPC tout en ayant un nom de domaine personnalisé la dessus ? Découvrez comment

En principe on aurait pu se dire qu'il était assez simple d'avoir un nom de domaine personnalisé sur AppSync, la réponse est oui pour la partie Events, la partie GraphQL elle est moins évidente.
Pourquoi ?
Pour la simple raison que le service ne supporte pas cette fonctionnalité et qu'il faut s'ajouter une configuration supplémentaire.
Voyons cela plus en détail.

Pour rendre l'API accessible via un nom de domaine personalisé il faut l'ajouter dans Route53 mais ça sera pas suffisant puisqu'il faut aussi que l'enregistrement pointe sur une ressource AWS.
L'ALB peut faire l'affaire pour garder la redondance et permettre d'atteindre le VPC Endpoint de AppSync créer en amont (nécessaire pour y accéder en privé depuis le VPC) mais il faudra également ajouter un header pour que le service puisse router la requete vers le bon "projet" de AppSync, puisque le service dispose de beaucoup de projets en dehors du notre et doit donc le reconnaitre (header : X-AppSync-Domain)
Si vous avez la possibilité au niveau de votre client de l'ajouter (le header) ça sera le plus simple sinon autrement il faudra ajouter un proxy (par ex. Nginx) qui ajoutera lui le header

Exemple de configuration au niveau de Nginx:

  location /graphql {
    proxy_set_header X-AppSync-Domain ${identifierDeLapi}.appsync-api.eu-west-1.amazonaws.com;
    proxy_pass https://${url};
    proxy_pass_request_headers on;
    proxy_ssl_session_reuse off;
    proxy_cache_bypass $http_upgrade;
    proxy_redirect off;
    ...
  }

  location /graphql/ws {
    proxy_set_header X-AppSync-Domain ${identifierDeLapi}.appsync-realtime-api.eu-west-1.amazonaws.com;
    proxy_pass https://${url};
    proxy_pass_request_headers on;
    proxy_ssl_session_reuse off;
    proxy_cache_bypass $http_upgrade;
    proxy_redirect off;
    ...
  }
Enter fullscreen mode Exit fullscreen mode

Avec un schéma ça donne

Top comments (0)