Récemment, AWS a annoncé une super fonctionnalité pour Lambda : les Function URLs. Vous cochez la case, on vous donne une URL, et vous pouvez alors invoquer votre fonction très simplement en HTTP, en appelant cette URL. Je pense que c’est une très bonne idée, parce que bien des cas d’usage n’ont pas besoin de la complexité qui entoure les API Gateways (permissions IAM, logs, CORS, etc).
Les Lambda Function URLs présentent plusieurs avantages :
- Elles sont gratuites (avec une API Gateway, on paie pour chaque requête)
- Elles sont très simples à utiliser au quotidien
- Elles ne sont pas plus limitées en temps d’exécution que votre Lambda : une requête peut durer jusqu’à 15 minutes
Il y a cependant une petite ombre au tableau : AWS vous donne une longue URL qui ne veut pas dire grand chose pour un humain, et qui ne peut être ni personnalisée ni changée.
La solution
Utilisateurs tristes, séchez vos larmes ! Vous pouvez utiliser une distribution CloudFront pour appeler votre Lambda avec votre propre (magnifique) nom de domaine. C’est un poil plus compliqué et vous perdez une partie des avantages des Function URLs, mais ça reste beaucoup plus pratique qu’une API Gateway (particulièrement quand vous faites de l’Infrastructure as Code). La limite de durée de requête maximale passe aussi de 30 à 60 secondes1, et vous pouvez entre autres utiliser le cache inclus dans CloudFront.
Pour ça, vous aurez besoin de :
- Votre fonction Lambda et son URL, peu importe leur région
- Un certificat ACM pour votre domaine ou sous-domaine dans la région
us-east-1
- Une distribution CloudFront, où l’envoi de l’en-tête
Host
à l’origine est désactivé - Des enregistrements Route53 ALIAS A et AAAA pointant vers votre distribution (ou un enregistrement DNS CNAME si vos DNS sont hébergés par un fournisseur tiers)
Si vous avez déjà configuré une distribution CloudFront, la partie la plus délicate risque d’être de désactiver l’envoi de l’en-tête Host
à votre origine : dans CloudFront, vous ne pouvez pas ignorer un en-tête en particulier, il faut donc mettre en liste blanche ceux qui vous intéressent ou ne pas en envoyer du tout. Par exemple :
-
Et encore plus si vous demandez une augmentation de quota au support AWS ↩︎