Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
13
Help us understand the problem. What is going on with this article?
@icck

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

More than 1 year has passed since last update.

はじめに

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はたくさんの機能がありますが、なにか作るものを決めて使っていきながら覚えていくのが良さそうでした。
まだまだテンプレート奥が深いです。知れば知るほど便利に使えそうです。

13
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
icck
丸いフォルムの動物全般が好き、海獣も好き、サウナー。AWSが好きなのでエンプラでAWSエンジニアになりました。日々勉強中。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
13
Help us understand the problem. What is going on with this article?