リリース前後のデプロイメント設定の比較
リリース間のデプロイメントアーティファクト、設定、Infrastructure-as-Codeの変更を比較します。安全なリリースのために、本番デプロイメント間で何が変更されたかを監査する方法を学びます。
Real-World Scenarios
詳細な説明
デプロイメントDiff
リリース間のデプロイメント設定の比較は重要な安全プラクティスです。変更されたすべてのもの — アプリケーションコード、設定ファイル、環境変数、インフラ定義 — をDiffすることで、デプロイメントの影響を事前に予測できます。
デプロイ前にDiffすべきもの
| アーティファクト | 形式 | 確認事項 |
|---|---|---|
| アプリケーションコード | ソースファイル | ロジック変更、新しいエンドポイント |
| 環境変数 | .envファイル | 新規/変更された変数 |
| Dockerイメージ | Dockerfile | ベースイメージ、依存関係 |
| K8sマニフェスト | YAML | リソース制限、レプリカ |
| データベーススキーマ | SQL/マイグレーション | スキーマ変更 |
| 依存関係 | package.json、go.mod | バージョン更新、新しい依存 |
| CI/CDパイプライン | YAML | ビルド/デプロイステップの変更 |
リリース比較
# 2つのGitタグを比較
git diff v1.2.3..v1.2.4 --stat
# 出力
src/api/users.ts | 15 +++++++----
src/config/database.ts | 3 ++-
docker-compose.yml | 8 ++++++
.env.example | 2 ++
k8s/deployment.yaml | 5 ++--
package.json | 3 ++-
6 files changed, 28 insertions(+), 8 deletions(-)
インフラDiff
Infrastructure-as-Code(Terraform、Pulumi、CloudFormation)の場合:
resource "aws_instance" "web" {
- instance_type = "t3.small"
+ instance_type = "t3.medium"
ami = "ami-0123456789"
+ monitoring = true
}
terraform planを使用して実際のインフラ変更を確認:
~ aws_instance.web
instance_type: "t3.small" → "t3.medium"
+ monitoring: true
Dockerイメージの比較
イメージバージョン間のレイヤーを比較:
# イメージサイズとレイヤーの比較
docker history app:v1.2.3 > old.txt
docker history app:v1.2.4 > new.txt
diff old.txt new.txt
Diffからのデプロイメントチェックリスト
Diffのレビュー後:
- 環境変数 — 新しい変数はすべて本番で設定されているか?
- データベースマイグレーション — マイグレーションは安全か?元に戻せるか?
- 依存関係 — 新バージョンに既知の脆弱性はないか?
- 破壊的API変更 — 下流のサービスは影響を受けるか?
- リソース要件 — スケーリング設定の調整は必要か?
- ロールバック計画 — 問題が発生した場合に元に戻せるか?
自動化されたデプロイメントDiff
多くのチームはCI/CDパイプラインでデプロイメントDiffを自動化し、現在のバージョンとターゲットバージョン間のすべての変更をリストする「デプロイメントマニフェスト」を生成します。
ユースケース
デプロイメントDiffは、リリースマネージャー、DevOpsエンジニア、オンコールチームが各リリースで何が変更されるかを正確に理解するために使用します。インシデント予防に重要です — 多くの本番障害はレビューされていない設定変更が原因です。強力なデプロイメントDiffプラクティスを持つチームは、デプロイメント関連のインシデントが少なくなります。