3
votes

Mettre à jour la fonction Lambda existante à l'aide de l'intégration / déploiement continu AWS

J'ai plusieurs fonctions AWS Lambda créées à l'aide de AWS Console et chaque fonction a des API dépendantes. Je souhaite maintenant les intégrer avec AWS CI / CD à l'aide de CodeBuild, CodePipeline et CloudFormation . Mais le problème est que je ne parviens pas à mettre à jour les fonctions lambda existantes qui ne sont pas créées à l'aide de CloudFormation Stack
Message d'erreur ABC_Lambda existe déjà

Veuillez noter que si je crée un nouveau lambda en utilisant le flux CI / CD et que j'essaye de le mettre à jour, cela fonctionne bien.

Mes questions sont donc

  1. Comment intégrer les fonctions Lambda existantes au flux de travail AWS CI / CD, sans les supprimer ni les recréer?

  2. Existe-t-il un moyen ou un paramètre de configuration SAM_template qui force CloudFormation à mettre à jour le lambda existant (créé à l'aide d'AWS console / outil AWS Commandline).


0 commentaires

4 Réponses :


1
votes

AWS CloudFormation ne peut mettre à jour que les ressources créées par la même pile.

La seule possibilité à laquelle je pense est d'avoir la ressource personnalisée CloudFormation.

La ressource personnalisée lambda doit prendre soin de gérer toutes les ressources qui ne sont pas créées par la pile.

Pour en savoir plus, cliquez ici ( https : //docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources-lambda.html )

Hoe ça aide !!!


1 commentaires

Oui, je sais que CF ne peut mettre à jour que les ressources créées par la même pile. Et la méthode de ressource personnalisée n'est possible qu'en utilisant CloudFormation pour créer / mettre à jour / supprimer une ressource personnalisée, mais comment l'implémenter à l'aide du modèle SAM? Je n'ai trouvé aucun article à ce sujet même si j'ai lu "AWS :: Serverless :: CustomResource" écrit quelque part dans la documentation aws serverless, mais je ne sais toujours pas comment l'utiliser.



2
votes

Comme indiqué par @omuthu, si vous n'avez pas créé les Lambdas avec Cloudformation, vous ne pouvez pas utiliser Cloudformation pour les mettre à jour.

Dans votre étape CodeBuild, vous pouvez utiliser update-function-code et update-function-configuration API pour effectuer les opérations dont vous avez besoin. Cela ne vous permet cependant pas d'intégrer SAM en raison de la limitation mentionnée ci-dessus.


0 commentaires

0
votes

Je traiterais les fonctions Lambda que vous avez créées dans la console comme des prototypes et créerais de manière incrémentielle une pile CloudFormation pour remplacer le prototype. L'astuce pour éviter le message d'erreur (ABC_Lambda existe déjà) est de spécifier uniquement un nom logique dans CloudFormation et de le laisser attribuer le nom physique. Si vous appelez les fonctions Lambda par leur nom ou par un point de terminaison API Gateway, vous devrez mettre à jour l'appelant lorsque vous serez prêt à passer à la nouvelle pile.


0 commentaires

0
votes

Si vous aviez vraiment besoin de conserver les anciennes fonctions lambda pour des raisons héritées, vous pouvez créer vos nouvelles fonctions dans Cloudformation, et mettre à jour manuellement votre ancienne fonction en "proxy" et exécuter votre nouveau code lambda.

Cependant, vous devrez payer des frais supplémentaires pour le deuxième lambda - et éventuellement atteindre votre limite de requêtes lambda simultanées.

Au fil du temps, vous pouvez mettre à jour votre ancienne configuration / code pour appeler uniquement la nouvelle fonction, et finalement supprimer complètement l'ancienne.


0 commentaires