Lambda CI/CD アーキテクチャ - 1. CI/CD環境構築における方針
ドキュメント構成
- → 1. CI/CD環境構築における方針
- 2. 構成要素と役割
- 3. 実装ガイドライン
- 4. トレードオフと運用上の考慮点
免責事項
本記事はAI(Claude)を活用して執筆しています。内容の正確性については保証いたしかねますので、重要な情報は必ず一次情報源をご確認ください。
この章で理解すること
なぜこの設計なのか? の答えがここにあります。
- デプロイとリリースの分離
- TerraformとLambrollの使い分けの本質
- エイリアス戦略が全ての鍵
- 設計の3つの原則
デプロイとリリースの分離
従来の課題
多くのLambda環境では、デプロイ = リリース となっています。
1 | コード変更 → デプロイ → 即座に本番反映 |
問題点:
- 本番環境でいきなりコードが実行される
- 問題発見時のロールバックに時間がかかる
- テスト環境と本番環境の切り替えが曖昧
解決策: エイリアスによる分離
1 | デプロイ: Lambda関数にコードをアップロード |
メリット:
- デプロイしても本番に影響なし
- staging環境で十分に検証
- リリースは承認後に即座に実行(エイリアス切替のみ)
- ロールバックも瞬時(エイリアスを戻すだけ)
TerraformとLambrollの使い分け
なぜ2つのツールを使うのか?
核心: 変更頻度とライフサイクルの違い
| 特性 | Terraform | Lambroll |
|---|---|---|
| 変更頻度 | 低い(月1回以下) | 高い(日5回以上) |
| 管理対象 | インフラ全般 | Lambda関数のみ |
| 実行時間 | 長い(10-30分) | 短い(1-3分) |
| 影響範囲 | 広い(全体) | 狭い(特定関数) |
Terraform: インフラの真実の源泉
責任範囲:
- VPC、Subnet、Security Group
- IAM Role、Policy
- RDS、DynamoDB(共有)
- S3 Bucket
- EventBridge、SQS/SNS(共有)
- Lambda Layer(ARNのみ)
なぜTerraformで管理?
- 変更が稀 → 慎重な変更管理が必要
- 複数サービスで共有 → 一元管理
- セキュリティ重要 → インフラチームが管理
Lambroll: Lambda関数に特化
責任範囲:
- Lambda関数のコード
- 関数設定(function.jsonl)
- エイリアス管理
なぜLambrollを選んだのか?
SAMではなくLambrollを採用した理由:
インフラリソースを管理しない
- SAM: IAM、VPC等も管理 → Terraformと重複
- Lambroll: Lambda関数のみ → 責任が明確
Terraform stateを直接参照
- SAM: SSM Parameter Store経由で連携
- Lambroll:
terraform outputを環境変数で参照 → シンプル
軽量で高速
- SAM: CloudFormation経由(遅い)
- Lambroll: AWS API直接(速い)
例: function.jsonl
1 | { |
Terraform outputsを環境変数として直接参照できます。
エイリアス戦略の核心
エイリアスとは
Lambda関数の特定バージョンへの名前付きポインタです。
1 | Lambda関数: user-auth-function |
3環境の戦略
Development環境
1 | development エイリアス → $LATEST |
- 常に最新コードを参照
- 開発者の動作確認用
- 不安定でも問題なし
Staging環境
1 | staging エイリアス → 最新Version(自動更新) |
- mainブランチにmerge → 自動デプロイ → Version発行 → staging更新
- QA・統合テスト用
- 本番リリース前の最終確認
Production環境
1 | production エイリアス → 承認されたVersion(手動更新) |
- staging検証完了 → 手動承認 → production更新
- エンドユーザー向け
- 最も慎重に管理
なぜこの戦略なのか?
開発速度 × 本番安全性 の両立
- Development: 制約なし → 開発速度最大化
- Staging: 自動化 → 検証サイクル高速化
- Production: 手動承認 → リスク最小化
設計の3原則
原則1: 単一責任の原則
各ツールは1つの責任のみを持つ
1 | Terraform: |
メリット:
- 変更の影響範囲が明確
- トラブルシューティングが容易
- チーム間の責任分界点が明確
原則2: 疎結合の原則
コンポーネント間は間接的に連携
1 | Terraform outputs |
メリット:
- Terraformの変更がLambrollに影響しない
- 独立してデプロイ可能
- テストが容易
原則3: 不変性の原則
Lambda Versionは不変
1 | Version 15 → 一度作成したら変更不可 |
メリット:
- ロールバックが確実
- 監査証跡が残る
- エイリアスの切替のみでリリース・ロールバック
まとめ
この設計の核心
エイリアスによる環境分離 + ツールの責任分離
1 | ┌─────────────────────────────────┐ |
実現すること
- 高速デプロイ: 2分以内
- 安全リリース: 手動承認
- 瞬時ロールバック: 5秒以内
- 明確な責任: チーム間の分業
- 段階的展開: カナリアリリース
次のステップ
方針を理解したら、具体的な構成要素を見ていきましょう。