ストーリー
環境構成の標準
標準環境モデル
組織全体で統一する環境の構成を定義します。
| 環境 | 目的 | ライフサイクル | アクセス |
|---|---|---|---|
| Development | 個人/チームの開発 | 一時的(PR単位) | 開発者 |
| Integration | サービス間統合テスト | 常時稼働 | 開発チーム |
| Staging | 本番相当のテスト | 常時稼働 | 開発チーム + QA |
| Production | 本番サービス | 常時稼働 | 制限付き |
環境のプロビジョニング
# 環境をIaCで管理する(Terraform Module)
module "environment" {
source = "org/environment-template/aws"
environment_name = "staging"
team = "alpha"
# 本番と同じインフラ構成(スケールのみ異なる)
instance_type = "t3.medium" # 本番: m5.xlarge
min_instances = 1 # 本番: 3
max_instances = 3 # 本番: 10
}
プロモーション戦略
アーティファクトの昇格フロー
同一のアーティファクトを環境間で昇格させるフローを定義します。
┌──────────────┐
┌───→│ Development │
│ │ (PR環境) │
│ └──────┬───────┘
│ ↓ PR Merge
│ ┌──────────────┐
コードPush → │ Integration │
│ └──────┬───────┘
│ ↓ 自動テストパス
│ ┌──────────────┐
│ │ Staging │
│ └──────┬───────┘
│ ↓ 承認ゲート
│ ┌──────────────┐
└───→│ Production │
└──────────────┘
各昇格の条件
| 昇格 | 条件 | 自動/手動 |
|---|---|---|
| Dev → Integration | PRマージ | 自動 |
| Integration → Staging | 統合テスト全パス + セキュリティスキャンパス | 自動 |
| Staging → Production | E2Eテストパス + QA承認 + セキュリティレビュー | 手動承認 |
環境パリティ(Environment Parity)
本番との差異を最小化する
ステージングと本番の差異が大きいと、「ステージングでは動いたのに本番で壊れた」という事態が発生します。
| 要素 | ステージング | 本番 | パリティ |
|---|---|---|---|
| OS/ランタイム | 同一 | 同一 | 完全一致 |
| ネットワーク構成 | 同一(VPC構成) | 同一 | 完全一致 |
| データベースエンジン | 同一(バージョンも) | 同一 | 完全一致 |
| インスタンスサイズ | 縮小版 | フルスケール | 許容 |
| データ量 | サンプルデータ | 実データ | 許容(匿名化データ推奨) |
| 外部サービス | サンドボックス | 本番 | 許容 |
環境設定の管理
環境差分は設定(Configuration)で吸収し、コードは同一にします。
# 環境ごとの設定例(Helm values)
# values-staging.yaml
replicas: 2
resources:
requests:
cpu: "500m"
memory: "512Mi"
database:
host: "staging-db.internal"
featureFlags:
newCheckout: true
# values-production.yaml
replicas: 5
resources:
requests:
cpu: "2000m"
memory: "2Gi"
database:
host: "production-db.internal"
featureFlags:
newCheckout: false # カナリアで段階的に有効化
エフェメラル環境(Ephemeral Environments)
PR単位で一時的な環境を自動構築し、レビューとテストを効率化します。
| メリット | 説明 |
|---|---|
| 独立したテスト | 他チームの作業に影響されない |
| コスト最適化 | 使用時のみ課金 |
| 高速フィードバック | PRの変更を即座に確認可能 |
| レビュー効率化 | レビュアーが実際に動作を確認できる |
# GitHub Actions: PR環境の自動構築
name: Preview Environment
on:
pull_request:
types: [opened, synchronize]
jobs:
deploy-preview:
runs-on: ubuntu-latest
steps:
- name: Deploy Preview
uses: org/deploy-preview@v1
with:
environment: "pr-${{ github.event.number }}"
ttl: "72h" # 72時間後に自動削除
まとめ
| ポイント | 内容 |
|---|---|
| 環境構成 | Development、Integration、Staging、Productionの4層 |
| プロモーション | 同一アーティファクトを環境間で昇格 |
| 環境パリティ | 本番との差異を最小化してリスクを低減 |
| エフェメラル環境 | PR単位の一時環境で独立性とコスト最適化を両立 |
チェックリスト
- 標準環境モデルの4層を理解した
- プロモーション戦略と各昇格条件を理解した
- 環境パリティの重要性を理解した
- エフェメラル環境のメリットを理解した
次のステップへ
次は演習です。ここまで学んだ設計原則、ビルド・テスト・デプロイの標準、アーティファクト管理、環境管理を統合して、標準パイプラインを設計してみましょう。
推定読了時間: 30分