3分で作る、CloudWatchイベントで実行するLambda
前回の CloudWatchイベントバージョンです。Chaliceを使ってCloudWatch EventsをトリガーにLambdaを起動してみたいと思います。
環境
- macOS Catalina 10.15.4
- Python 3.7.7
$ sw_vers ProductName: Mac OS X ProductVersion: 10.15.4 BuildVersion: 19E287 $ python3 -VV Python 3.7.7 (default, Mar 10 2020, 15:43:33) [Clang 11.0.0 (clang-1100.0.33.17)]
やってみる
仮想環境の作成
今回は Python で標準機能の venv
を利用します。
$ mkdir chalice-example && cd chalice-example $ python3 -m venv venv
仮想環境の有効化
$ source ./venv/bin/activate (venv) $
Chaliceのインストール
(venv) $ pip install chalice
プロジェクトの作成
new-project
コマンドを利用してプロジェクトの雛形を作成します。s3-event-lambda フォルダが作成され、各種ファイルが作成されています。
(venv) $ chalice new-project s3-event-lambda
コーディング
app.py
の内容を下記のようにします。
今回は追加のパッケージはありませんので、requirements.txt
に追加は不要です。
from chalice import Chalice from chalice.app import CloudWatchEvent app = Chalice(app_name='cwe-lambda') @app.on_cw_event( { "source": ["aws.ecr"], "detail-type": ["ECR Image Scan"] }, name='ecr-scan') def ecr_scan(event: CloudWatchEvent): print(event.to_dict())
デプロイ
(venv) $ chalice deploy --stage dev Creating deployment package. Creating IAM role: cwe-lambda-dev Creating lambda function: cwe-lambda-dev-ecr-scan Resources deployed: - Lambda ARN: arn:aws:lambda:ap-northeast-1:XXXXXXXXXXXX:function:cwe-lambda-dev-ecr-scan
作成されたものを確認
Lambda
IAMロール
ポリシーにはログ出力のみの権限が自動で付与されています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" } ] }
CloudWatch Eventsルール
動作確認
適当なECRリポジトリを作成し、イメージをプッシュしたのでログを確認します。Lambdaが実行されていることが確認できました。
後片付け
次のコマンドで作成したリソースが削除できます。ロググループは削除されないので手動で消す必要があります。
(venv) $ chalice delete --stage dev
さいごに
前回同様に簡単にCloudWatch Events と連携するLambdaが作成することができました。