LoginSignup
20
6

More than 1 year has passed since last update.

CircleCIでLambdaのデプロイを改善した話

Last updated at Posted at 2020-12-02

はじめに

この記事はCircleCI Advent Calendar 2020 - Qiitaの3日目の記事です。

自分のチームではLambdaを使って、バッチなどを動かしています。
LambdaはAWS SAMで管理していましたが、デプロイを自動化しておらず、手動で反映していました。

そんな状況をCircleCIを使って改善した話をしていきます。

改善前

改善前のデプロイフローが下記になります。

改善前.png

このデプロイは下記のような課題を抱えていました。

  • ローカル上で依存解決して実行しないといけない
  • 変更セットをレビュアーが隣で確認しないといけない

このような作業を行っているため、環境変数の書き換えがミスがあったりし、ダブルチェックに緊張感がある状態でした。
開発中はこの状態で進めていましたが、本番運用を始める前にはなんとかしたいという思いがあり、自動化の構築を始めました。

AWS SAMとLambdaという構成なので、AWS Code系のサービスにするか迷いましたが、下記2点からCircleCIを選定しました。

  • 他のシステムでCircleCIを使っており、使い慣れている
  • ツールの統一

改善後

改善後のデプロイフローは下記になります。
GitHubでリリースタグを作成したら、CircleCIがデプロイを動かす仕組みです。

改善後.png

意識したポイントをいくつか紹介していきます。

意識したポイント

依存解決をできるようにする

Node.jsを使っていたのですが、元々CDを想定しておらず、CircleCI化するに当たって対応が必要でした。

具体的には下記のように、アプリと環境変数のディレクトリに区分がなく、アプリが入っているディレクトリ内ごとに package.json が入っていました。
勿論monorepoにはなっていません。

├── アプリ1
    └── package.json
├── アプリ2
    └── package.json
└── 環境変数のディレクトリ

ここは下記のようにディレクトリ構造の変更と、シェルでディレクトリに cd してアップデートすることで解決しました。

├── apps
    └── アプリ1
        └── package.json
    └── アプリ2
        └── package.json
└── 環境変数のディレクトリ

monorepoも検討しましたが、時間の都合でシェルで解決することにしました。

変更セットを確認できるようにする

CloudFormationで --no-execute-changeset を付け加えると、事前に変更セットの確認ができます。
それは sam-cli でも同じでしたので、 --no-execute-changeset を事前に変更セットを見れるようにしました。

これにより、レビュアーに何が変更されるかわかりやすくなり、デプロイ承認のドキドキを減らすことができました。

sam deploy (略) --no-fail-on-empty-changeset

デプロイはワークフローを組んでおり、approvalの前に実行するようにしています。
これにより、承認前に変更セットを確認することができました。

ここは今回の改善で一番うまくできたと思っています。

まとめ

いくつかの工夫を取り入れ、Lambdaのデプロイを改善することができました。
どなたかの参考になれば幸いです。

参考

20
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
6