J'ai essayé de créer un ensemble de lambdas en utilisant cloudformation. Je veux que les lambdas se déclenchent une fois qu'ils sont créés. J'ai vu sur divers blogs créer un déclencheur pour s3
ou sns
mais aucun ne semble être une option pour déclencher lambda
une fois qu'il a été créé. Des options?
Oui c'est possible. Voici quelques options:
Manuellement créer un sujet SNS . Ajoutez un AWS::SNS::Subscription
à votre pile avec la fonction lambda comme Endpoint
et la rubrique SNS comme TopicArn
. Lors de la création/mise à jour de la pile, configurez les notifications d'événements de pile à envoyer à cette rubrique SNS.
--notification-arns
si vous créez/mettez à jour votre pile à l'aide de AWS CLI ou d'un autre SDK AWS.)Ajoutez un Ressource personnalisée référençant une fonction Lambda à appeler lors de la création.
DependsOn
sur la ressource personnalisée référençant la ressource dont vous voulez vous assurer qu'elle est créée en premier avant l'appel de la fonction.CREATE_IN_PROGRESS
, car la ressource personnalisée fait partie de la pile elle-même.DELETE_FAILED
Etat.Ajoutez la référence de la fonction Lambda à un Stack Output , puis écrivez un script simple qui effectue la création de la pile, puis invoque manuellement la fonction Lambda par la suite.
Pour ceux qui recherchent la solution de contournement similaire.
CloudWatch est capable de capturer les appels d'API de CloudFormation, qui sont "CreateStack", "UpdateStack" et "DeleteStack", les états de pile comme "Create_complete" ou "Complete_Rollback" ne sont pas capturables, ce qui signifie que ces changements d'état ne peuvent pas déclencher lambda.
La solution de contournement est SNS, les piles peuvent envoyer des notifications à SNS (dans les paramètres à l'avance lorsque vous créez une pile) et SNS peut choisir de déclencher lambda, cependant, vous ne pouvez pas choisir pour des états spécifiques. Ainsi, la fonction lambda prend le travail pour découvrir quel état dans le contenu "Message" d'un événement. Tout le monde, juste du codage.
Vous avez la possibilité de notifier un sujet SNS, et vous pouvez créer un lambda qui écoute le sujet, de sorte que le flux de travail serait: Lancement Cloudformation -> Sujet SNS -> Lambda.
Le modèle suivant doit appeler le lambda:
"InvokeLambda": {"Type": "Custom :: InvokeLambda", "Version": "1.0", "Propriétés": {"ServiceToken": {"Fn :: GetAtt": ["InitFunction", "Arn"] }}},