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