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

Step Functionsステートマシンから別のStep Functionsを呼び出す

複雑なステートマシンを小さいステートマシンに分割しておけばテストと確認がやりやすくなる

マネージメントコンソール上のエディタでLambdaのコードを書く際にnpmライブラリを追加したい

ローカルでライブラリをインストールしてからインポートする必要があった

Amazon API Gatewayのタイムアウト設定は最大29秒まで

上限緩和もできないので注意

MFA必須のスイッチロールアカウントでaws cliを使う

switch role用のprofileを追加する

AWSのコスト異常検出を設定する

意図しない課金を防ぐためにとりあえず設定しておくと良さそう