LoginSignup
21
16

More than 3 years have passed since last update.

SAMでtemplate.yamlの記述方法(Events、Policyはここを参照して書く)

Posted at

はじめに

SAMを使うときにtemplate.yamlEventsPolicyの設定方法を学んだので書こうと思います。
※テンプレートは他にもいろいろプロパティありますが、割愛します。

本記事で伝えたい結論は1点のみ。Githubリポジトリawslabを見ながら作業すると効率が良いということです。

Screenshot from 2019-09-19 23-00-21.png

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が実行
  • ポリシー:Policiesの箇所を参照
    • Lambda処理内で、s3へデータを格納
template.yaml
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はたくさんの機能がありますが、なにか作るものを決めて使っていきながら覚えていくのが良さそうでした。
まだまだテンプレート奥が深いです。知れば知るほど便利に使えそうです。

21
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
16