何かやってみるブログ

興味をもったこと、趣味のこと、技術について色々書きます。

[Ruby メモ] Dockerコンテナからlambda関数を作成する時の手順とか(CloudFormation ver)

前回、マネジメントコンソールからボタンをポチポチしてLambda関数を作成したのですがデプロイがいろいろ面倒でした。

www.takayasugiyama.com

なので、CloudFormationを使って自動化にチャレンジしました。 本エントリはその時のメモというか備忘録です。

template.yml

スタックを構成するAWSのリソースを定義したファイルです。デプロイするとファイルに定義したリソースを作ってくれます。便利。 template.ymlではLamadaの関数とLambda関数実行ロールとCloudWatchイベントルールとCloudWatchイベントルールで関数を使用するためのアクセス許可の4つを定義しています。 ドキュメントは英語じゃないと更新されてなかったりするのがつらたん。

AWSTemplateFormatVersion: 2010-09-09
Resources:
  PurelabaRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
  PurelabaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Code:
        ImageUri: 000000000000.dkr.ecr.us-west-2.amazonaws.com/purelaba:latest
      Role: !GetAtt PurelabaRole.Arn
      Timeout: 60
      FunctionName: purelaba-slack-bot-function
      PackageType: Image
  PurelabaEventRule:
    Type: AWS::Events::Rule
    Properties:
      Description: purelaba-bot-schdule
      Name: purelaba-bot-rule
      ScheduleExpression: cron(59 14 * * ? *)
      State: ENABLED
      Targets:
        - Arn: !GetAtt PurelabaFunction.Arn
          Id: purelaba-bot-function
  PurelabaEvent:
     Type: AWS::Lambda::Permission
     Properties:
        Action: lambda:InvokeFunction
        FunctionName: !Ref PurelabaFunction
        Principal: events.amazonaws.com
        SourceArn: !GetAtt PurelabaEventRule.Arn

deploy.sh

デプロイする時に使うシェルです。

#! /bin/bash
docker build -t purelaba .
docker tag purelaba:latest 000000000000.dkr.ecr.us-west-2.amazonaws.com/purelaba:latest
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin https://000000000000.dkr.ecr.us-west-2.amazonaws.com
docker push 000000000000.dkr.ecr.us-west-2.amazonaws.com/purelaba:latest
aws cloudformation deploy --template-file template.yml --stack-name purelaba-stack --capabilities CAPABILITY_IAM