web-dev-qa-db-fra.com

Routage de fichiers statiques AWS Lambda et S3 avec un domaine personnalisé

J'ai essayé de configurer une simple application sans serveur sur AWS, mais je ne comprends pas comment assembler les éléments avec un domaine personnalisé .

Les itinéraires des applications Web devraient ressembler à ceci:

  • / -> Sert HTML statique/CSS/JS à partir de S3 Bucket
  • /api/people/ -> Appel de fonction Lambda
  • /api/dogs/ -> Appel de fonction Lambda
  • /stats/ -> Appel de fonction Lambda
  • /backend/ -> Sert HTML statique/CSS/JS à partir de S3 Bucket

J'ai essayé d'utiliser API Gateway et CloudFront et de les relier avec Route53 à mon domaine personnalisé, mais il semble que seuls les routages statiques S3 ou Lambda JSON soient pris en charge.

Comment une architecture AWS chercherait-elle où je peux choisir librement les itinéraires à router vers différentes ressources AWS (par exemple / -> S3, /api/people/ -> Lambda, /api/dogs/ -> Lambda, /backend/ -> S3) `

Merci beaucoup d'avance.

9
Empty2k12

L'un des principaux défis de la mise en place d'une application Web complète avec des technologies sans serveur réside dans le fait d'avoir un calque proxy pour acheminer les messages à la fois pour le traitement (Lambda) et les fichiers statiques (HTML, JS, CSS, Images). Bien qu'API Gateway utilise CloudFront en interne, le contenu statique de S3 et le contenu dynamique utilisant le même domaine ne seront pas utiles (en évitant l'accès entre domaines).

Par conséquent, il est nécessaire d'utiliser AWS CloudFront pour proxyer les messages à la fois pour API Gateway et Lambda que j'ai utilisés pour la plupart des projets Web. Le compromis est qu'il y a une latence et un coût supplémentaires (ce qui n'est pas significatif) lors de l'accès à API Gateway via CloudFront, ce qui devrait être acceptable.

Pour plus de détails, vous pouvez vous référer à mon article sur Full Stack Web Apps sans serveur avec AWS .

6
Ashan

AWS est relativement nouveau pour moi, mais j'ai récemment réussi à faire tourner un site statique via S3 et à accéder aux fonctions Lambda. C'est donc tout frais dans mon esprit.

Tout d'abord, il n'y a aucun moyen de diriger des chemins particuliers de domaines vers des ressources AWS particulières. Ainsi, si vous utilisez Route 53 pour faire pointer votre domaine vers un compartiment S3 afin de servir des ressources statiques, tous les chemins de ce domaine tenteront d'extraire des ressources dans ce compartiment S3 uniquement. Maintenant, étant donné que votre "backend" sert également des fichiers statiques à partir d'un compartiment S3, cela pourrait techniquement se trouver dans le même compartiment S3 que celui que vous utilisez pour "/" juste stocké dans le dossier appelé "backend" si cela est acceptable.

Sinon, la vraie solution consiste à utiliser des sous-domaines.

Avec ce concept, vous pouvez faire ce qui suit:

  • www.votredomaine.com pointez sur le S3 contenant le site statique pour "/"
  • api.votredomaine.com pointez sur une passerelle AWS API qui peut agir en tant que proxy pour accéder à vos fonctions Lambda
  • backend.votredomaine.com pointez sur le seau S3 pour votre "/backend"[.____. Page_ site si nécessaire

Vous pouvez simplement ajouter des jeux d'enregistrements à votre zone hébergée pour que votre domaine crée des sous-domaines. Voir la documentation ici .

Obtenir tout cela mis en place va au-delà de la portée de cette question et prendrait trop de temps, mais j'espère que cette information a un sens et vous aide à vous orienter dans une direction plus sensée.

1
AkaPeyton