この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
前回の 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
に追加は不要です。
app.py
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が作成することができました。