CircleCI 2.0 + Apex で Lambda をデプロイする

Lambda をデプロイする場合,最近だと Serverless Framework もしくは AWS Serverless Application Model を使う場面が多いけど,他の AWS サービスに依存せず Lambda だけをデプロイしたい場合には Apex も積極的に使っている.要件がシンプルな場合に特に便利で,過去にも事例を記事にしている.

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

kakakakakku.hatenablog.com

CircleCI 1.0 + Apex

今までは「CircleCI 1.0 + Apex」という組み合わせで Lambda をデプロイしていた.特に難しいことはなく,以下のようなシンプルな circle.yml を作成して,CircleCI 上で毎回 Apex をインストールしていた.ただし,8月末に CircleCI 1.0 のサポートが終了するため,そろそろ移行を考える必要があった.

machine:
  timezone: Asia/Tokyo

dependencies:
  post:
    - curl https://raw.githubusercontent.com/apex/apex/master/install.sh | sudo sh
    - apex version

deployment:
  master:
    branch: master
    commands:
      - apex deploy

Dockerized Apex

CircleCI 2.0 は Docker コンテナを使ってジョブを実行するため,Apex のコンテナが必要になる.ただし Apex 公式では提供されていなく,あまり良さそうなものもなかったため,今回 Alpine ベースで軽量な Dockerized Apex を作成した.バージョンは v1.0.0-rc2v0.16.0 をサポートしている.Docker イメージは kakakakakku/apex - Docker Hub に公開した.

github.com

CircleCI 2.0 + Apex

「CircleCI 2.0 + Apex」の場合は CircleCI 2.0 の記法で .circleci/config.yml を作成して,Dockerized Apex を使えば,今まで通り Lambda をデプロイできる.Docker コンテナを使うことにより,実行時間の短縮にも繋がり,メリットもある.

version: 2

jobs:
  deploy:
    docker:
      - image: kakakakakku/apex
    steps:
      - checkout
      - run: apex version
      - run: apex deploy

workflows:
  version: 2
  apex:
    jobs:
      - deploy

CircleCI の Environment Variables で,以下の環境変数を設定するのを忘れずに!

  • AWS_REGION
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

f:id:kakku22:20180508090052p:plain

(検証環境でデプロイをしてみた結果)

まとめ

  • CircleCI 2.0 + Apex でも Lambda をデプロイすることができた
  • CircleCI 2.0 のために Dockerized Apex を作成した

関連記事

CircleCI 2.0 の新機能「ワークフロー機能」の紹介を前に書いたから合わせて読んでもらえると!

kakakakakku.hatenablog.com