ネストされたAWS SAM アプリケーションのサンプル その1
概要
AWS SAM を使用して、ネストされたスタックのサンプルを作成してみました。
S3 -> EventBridge -> Lambda の流れで、S3にオブジェクトを作成したイベントを使ってLambdaをトリガーします。
既存のS3にイベントを追加するのは手間が多そうだったので、EventBridgeを使用することにしました。
ソースコード
以下のリポジトリで公開しています。
プロジェクト構造
アプリケーションは、次の3つのSAMテンプレートで構成されます。
- template.yaml: ネストされたスタックをオーケストレーションするメインテンプレートです。
- s3-eventbridge-template.yaml: S3バケットとEventBridgeのカスタムイベントバスを作成し、defaultイベントバスからカスタムイベントバスへの転送ルールを定義します。
- lambda-template.yaml: トリガーされるLambda関数を定義します。
アーキテクチャ
- ファイルがS3バケットにアップロードされると、S3イベントが生成されます。
- S3イベントは、Amazon EventBridgeのdefaultイベントバスへ送信されます。
- EventBridgeのdefaultイベントバスは、定義されたルールに基づいてイベントをカスタムイベントバスへルーティングします。
- EventBridgeのカスタムイベントバスは、定義されたルールに基づいてイベントをLambda関数へルーティングします。
- イベントに応じてLambda関数がトリガーされます。
前提条件
このサンプルを実行するには、以下の権限およびツールが必要です。
- 適切な権限を持つAWSアカウント
- AWS CLI
- AWS SAM CLI
デプロイ方法
このアプリケーションをデプロイする手順は以下のようになります。
- このリポジトリをクローンします
1
2$ git clone https://github.com/hiroaki-ma1203/aws-sam-samples.git
$ cd aws-sam-samples/nested-sam-app-1 - SAMアプリケーションをビルドします。
1
$ sam build
- SAMアプリケーションをデプロイします。指示に従ってデプロイメント構成を設定します。
1
$ sam deploy --guided
使用法
- デプロイ後、作成されたS3バケットにファイルをアップロードしてください。
- 発生したS3イベントは、EventBridge を介して Lambda 関数をトリガーします。
- AWS コンソールまたは CloudWatch Logs を通じて Lambda 関数の実行結果を確認してください。
カスタマイズ
- template.yaml: ネストされたスタックを追加や変更する場合は、メインのテンプレートを変更してください。
- s3-eventbridge-template.yaml: S3バケット設定または EventBridgeルールを変更できます。ファイル削除時にもイベント通知するなど。
- lambda-template.yamlLambda: 関数のランタイムや構成を変更できます。
- 変更した場合は再度ビルドとデプロイを実行してください。
環境の削除
このアプリケーションによって作成されたすべてのリソースを削除するには、以下の操作を行ってください。
- S3バケット内のファイルを削除します。
1
$ aws cloudformation describe-stacks --stack-name nested-sam-app-1 --query "Stacks[0].Outputs[?OutputKey=='S3BucketName'].OutputValue" --output text | xargs -I {} aws s3 rm s3://{} --recursive
- スタックを削除します。
1
$ sam delete