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にさえアクセスできればいつでもデプロイができるようになったので快適。


Related #aws

RDSを定期的に停止するLambdaを作る

手動起動は大変なので

AWS SESの受信メールを暗号化してs3に保存しLambdaで読み込む

jsの場合、複合処理を独自実装する必要がある

CloudWatchアラームを一時的に無効化する

AWS CLIで設定する必要がある

Alexaに気温と二酸化炭素濃度を教えてもらう

「Alexa、気温」でセンサー情報を教えてくれるようになった

CloudWatchのカスタムメトリクスを減らす

あまりチェックしないセンサー値の送信を止めた