web-dev-qa-db-ja.com

CloudFormationテンプレートから作成時にラムダをトリガーすることは可能ですか

Cloudformationを使用して一連のラムダを作成してみました。ラムダが作成されたらトリガーされるようにします。さまざまなブログでs3またはsnsへのトリガーを作成するのを見ましたが、一度作成されたらlambdaをトリガーするオプションはないようです。オプションはありますか?

15
ZZzzZZzz

はい、可能です。以下にいくつかのオプションを示します。

  1. 手動 SNSトピックの作成AWS::SNS::Subscription を、ラムダ関数を Endpoint として、SNSトピックを TopicArn 。スタックの作成/更新で、このSNSトピックに送信されるスタックイベント通知を構成します。

  2. カスタムリソース を追加して、作成時に呼び出されるLambda関数を参照します。

    • Lambda関数を呼び出す必要がある場合after何らかの特定のリソースが作成されたら、 DependsOn属性 を追加します関数が呼び出される前に、確認するリソースを参照するカスタムリソースが最初に作成されます。
    • カスタムリソースを正常に作成するには(スタックでエラー/ロールバックが発生しないように)、CloudFormationリクエスト/レスポンス形式をサポートするようにLambda関数を調整する必要があります( カスタムリソースリファレンス )。
    • このオプションは、カスタムリソースがスタック自体の一部であるため、 スタックステータスCREATE_IN_PROGRESSのままでLambda関数を呼び出します。
    • Lambda関数は、スタック(および関連するカスタムリソース)が削除されたときにも再度呼び出されます。これは、Lambda関数で正しく処理する必要があります。そうしないと、スタックがDELETE_FAILED状態でスタックする可能性があります。
  3. Lambda関数参照を Stack Output に追加してから、スタック作成を実行し、その後Lambda関数を手動で呼び出す簡単なスクリプトを記述します。

24
wjordan

同様の回避策を探している人向け。

CloudWatchは、「CreateStack」、「UpdateStack」、「DeleteStack」であるCloudFormationのAPI呼び出しをキャプチャできます。「Create_complete」や「​​Complete_Rollback」などのスタック状態はキャプチャできません。

回避策はSNSです。スタックは通知をSNSに送信でき(スタック作成時の事前設定)、SNSはラムダのトリガーを選択できますが、特定の状態を選択することはできません。したがって、ラムダ関数は、イベントの「メッセージ」コンテンツのどの状態を見つけるために仕事を引き受けます。みんな、コーディングだけ。

1
Larry Song

SNSトピックに通知するオプションがあり、トピックをリッスンするラムダを作成できるため、ワークフローはCloudformation launch-> SNS Topic-> Lambdaになります。

0
Conti

次のテンプレートは、ラムダを呼び出す必要があります。

「InvokeLambda」:{「タイプ」:「カスタム:: InvokeLambda」、「バージョン」:「1.0」、「プロパティ」:{「ServiceToken」:{「Fn :: GetAtt」:[「InitFunction」、「Arn」] }}}、

0
Bobby Thomas