AWS SAMで作ったLambdaアプリをCircleCIでデプロイする
以前、AWS SAMを使ってpuppeteerのLambdaアプリを開発した。
今回はそのアプリをCircleCI経由でデプロイできるようにしてみる。
sam-cliをどうやってインストールしようかと思って調べていたらcircleci/aws-serverlessのOrbを使えばできそうだと判明。
.circleci/config.yml
のdeploy jobに aws-serverless/install
を追加することでsam-cliが使えるようになった。
--- 12/28追記 ---
久しぶりにCircleCIでデプロイしようとしたところ↓のエラーが発生したため、
/bin/bash: line 2: sam: command not found
orbを circleci/aws-serverless@1.0.2
から circleci/aws-sam-serverless@2.1.0
に変更した。
また、samのインストールにpython3環境が必要になるので、docker imageを circleci/node:12.13
から circleci/python:3.7.1-node
に変更した。
--- 追記ここまで ---
version: 2.1
jobs:
build:
docker:
- image: circleci/node:12.13
working_directory: ~/app
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "package-lock.json" }}
- save_cache:
paths:
- node_modules
key: v1-dependencies-{{ checksum "package-lock.json" }}
- run: yarn
- persist_to_workspace:
root: .
paths:
- .
deploy:
docker:
- image: circleci/python:3.7.1-node
working_directory: ~/app
steps:
- attach_workspace:
at: .
- sam/install
- run: ./zip.sh # LambdaLayerの作成
- run: ./deploy.sh # sam build & sam deploy
orbs:
sam: circleci/aws-sam-serverless@2.1.0
workflows:
build-deploy:
jobs:
- build:
filters:
branches:
only: production
- deploy:
requires:
- build
filters:
branches:
only: production
下記記事を参考にさせていただきデプロイ用のIAMユーザを作ってポリシーを付与する。
今回のアプリはLambdaLayerを使っているので以下もポリシーに追加する必要があった。
{
"Action": [
"lambda:PublishLayerVersion",
"lambda:GetLayerVersion",
"lambda:ListTags",
"lambda:TagResource",
"lambda:UntagResource",
"lambda:RemovePermission"
]
}
CircleCIのProject環境変数設定で作成したIAMユーザのアクセスキーを設定する。
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_DEFAULT_REGION
これでproductionブランチにpushされたタイミングでsam deployが実行されるようになった。
CircleCI経由でデプロイできるようになったことで、Githubにさえアクセスできればいつでもデプロイができるようになったので快適。