はじめに
SAMを使うときにtemplate.yamlでEventsとPolicyの設定方法を学んだので書こうと思います。
※テンプレートは他にもいろいろプロパティありますが、割愛します。
本記事で伝えたい結論は1点のみ。Githubリポジトリawslabを見ながら作業すると効率が良いということです。
Events
Lambda 関数が実行されるトリガーをEventsプロパティ配下に指定する(複数可)
TypeプロパティにAWSのどのサービスをイベントするか指定する
利用可能タイプ一覧を記載しました。最新情報はawslabsを参照しましょう(サンプルもついています)
https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#event-source-types
| Type の指定 | 対応する AWS のサービス |
|---|---|
| S3 | Amazon Simple Storage Service (S3) |
| Api | Amazon API Gateway |
| DynamoDB | Amazon DynamoDB |
| SNS | Amazon Simple Notification Service (SNS) |
| SQS | Amazon Simple Queue Service (SQS) |
| Kinesis | Amazon Kinesis Data Streams |
| Schedule | Amazon CloudWatch Events (スケジュール) |
| CloudWatchEvent | Amazon CloudWatch Events (イベント) |
| CloudWatchLogs | Amazon CloudWatch Logs |
| IoTRule | AWS IoT ルール |
| AlexaSkill | Amazon Alexa スキル |
Policy
よく利用されるポリシーについて簡単に設定できるよう、あらかじめ用意されているポリシーがある
設定可能なポリシーはAWSのリポジトリawslabsを参照しましょう。
ここから設定したいサービスのポリシーを探し記述します。
サンプル(トップの画像の構成)
- イベント:Eventsの箇所を参照
- 12時間に1回、
Amazon CloudWatch Events (スケジュール)でLambdaが実行
- 12時間に1回、
- ポリシー:Policiesの箇所を参照
- Lambda処理内で、
s3へデータを格納
- Lambda処理内で、
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
blogtest1:
Type: 'AWS::Serverless::Function'
Properties:
Handler: blogtest1/lambda_function.lambda_handler
Runtime: python3.6
Description: ''
MemorySize: 128
Timeout: 20
CodeUri: .debug/
Policies:
- S3CrudPolicy:
BucketName: qiita-data
Events:
Schedule1:
Type: Schedule
Properties:
Schedule: "cron(0 0/12 * * ? *)"
Input: |
{
"region": "tokyo"
}
参考程度に。テンプレートから自動生成されたポリシーは以下になります。
{
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:GetObjectVersion",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetLifecycleConfiguration",
"s3:PutLifecycleConfiguration",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::qiita-data",
"arn:aws:s3:::qiita-data/*"
],
"Effect": "Allow"
}
]
}
さいごに
SAMはたくさんの機能がありますが、なにか作るものを決めて使っていきながら覚えていくのが良さそうでした。
まだまだテンプレート奥が深いです。知れば知るほど便利に使えそうです。
