Lambda をデプロイする場合,最近だと Serverless Framework もしくは AWS Serverless Application Model を使う場面が多いけど,他の AWS サービスに依存せず Lambda だけをデプロイしたい場合には Apex も積極的に使っている.要件がシンプルな場合に特に便利で,過去にも事例を記事にしている.
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-rc2
と v0.16.0
をサポートしている.Docker イメージは kakakakakku/apex - Docker Hub に公開した.
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
(検証環境でデプロイをしてみた結果)
まとめ
- CircleCI 2.0 + Apex でも Lambda をデプロイすることができた
- CircleCI 2.0 のために Dockerized Apex を作成した
関連記事
CircleCI 2.0 の新機能「ワークフロー機能」の紹介を前に書いたから合わせて読んでもらえると!