Skip to content

課題34: Fintech企業のゼロダウンタイムデプロイ

難易度: 🟡 中級


分類情報

項目内容
難易度中級
カテゴリIaC・DevOps
処理タイプ非同期
使用IaCCloudFormation
想定所要時間5-6時間

シナリオ

企業プロフィール

〇〇株式会社は、中小企業向けの決済代行サービスを提供するFintech企業です。月間取引件数は100万件を超え、24時間365日の安定稼働が求められています。

現状の課題

サービスの成長に伴い、リリース頻度を上げたいが、ダウンタイムが許容されない状況です:

  1. メンテナンス時間の確保困難:深夜帯でも取引があり、停止できる時間帯がない
  2. リリース失敗時のリスク:ロールバックに時間がかかり、障害が長期化
  3. データベースマイグレーション:スキーマ変更を伴うリリースが特に危険
  4. テスト不足:本番環境でしか発覚しない問題が多い

数値で見る問題

  • 計画メンテナンス時間:月 4時間(深夜リリース)
  • 直近1年のリリース失敗:8件
  • 平均ロールバック時間:45分
  • リリース起因の障害損失:年間約 2,000万円

成功指標(KPI)

指標現状目標
デプロイ時ダウンタイム30分/回0分
ロールバック時間45分5分以内
リリース失敗率8件/年2件以下/年
リリース頻度月2回週1回以上

学習目標

主要な学習成果

  1. CodeDeployによるブルーグリーンデプロイの実装
  2. ALBのターゲットグループ切り替えによる無停止リリース
  3. Lambda Hooksを使ったデプロイ検証の自動化
  4. データベースマイグレーションのベストプラクティス

習得するスキル

  • CodeDeploy Blue/Green Deployment設定
  • ALB Listener Rules の動的切り替え
  • AppSpec.yml の記述方法
  • カナリアリリースの設計
  • 本番トラフィックを使った検証

使用するAWSサービス

コアサービス

サービス用途重要度
CodeDeployブルーグリーンデプロイ制御
ECS Fargateアプリケーション実行環境
ALBトラフィック制御・切り替え
LambdaデプロイHooks実行
RDS (Aurora)決済データベース

補助サービス

サービス用途
CodePipelineCI/CDパイプライン
CloudWatchメトリクス監視・アラーム
X-Ray分散トレーシング
Secrets ManagerDB認証情報管理
SNSデプロイ通知

前提条件

必要な知識

  • ECSの基本概念(タスク定義、サービス)
  • ALBの仕組み(ターゲットグループ、リスナー)
  • Lambdaの基本的な使い方
  • データベースマイグレーションの概念

事前準備

  1. AWSアカウント
  2. AWS CLI v2
  3. Docker Desktop
  4. 決済APIのサンプルアプリケーション

環境要件

bash
# 必要なツール
aws --version  # 2.x
docker --version

アーキテクチャ概要

システム構成図(ブルーグリーン構成)

コンポーネント役割
CodePipelineCI/CDパイプライン
Production Listener本番トラフィック(443)
Test Listenerテストトラフィック(8443)
Blue Target Groupアクティブ環境
Green Target Groupスタンバイ環境
Blue/Green EnvironmentECSタスク群
Aurora PostgreSQLデータベース

デプロイフロー


トラブルシューティング課題

Challenge 1: デプロイが "In Progress" のまま止まる

状況: CodeDeployのステータスがAfterInstallで停止し、進まない

調査ポイント:

  1. Lambda Hookのログを確認
  2. ECSタスクのヘルスチェック状態を確認
  3. ターゲットグループのヘルス状態を確認

解決コマンド:

bash
# Lambda Hookのログ確認
aws logs tail /aws/lambda/payeasy-prod-after-install --follow

# ECSタスクの状態確認
aws ecs describe-tasks \
  --cluster payeasy-prod \
  --tasks $(aws ecs list-tasks --cluster payeasy-prod --query 'taskArns' --output text)

# ターゲットグループのヘルス確認
aws elbv2 describe-target-health \
  --target-group-arn arn:aws:elasticloadbalancing:ap-northeast-1:ACCOUNT:targetgroup/payeasy-prod-green-tg/xxx

Challenge 2: 自動ロールバックが発生

状況: デプロイ完了後、CloudWatch Alarmがトリガーされて自動ロールバック

調査ポイント:

  1. どのアラームがトリガーされたか確認
  2. メトリクスの推移を確認
  3. アプリケーションログでエラーを特定

Challenge 3: DBマイグレーション後の不整合

状況: 新バージョンと旧バージョンで異なるスキーマを参照してエラー

調査ポイント:

  1. マイグレーションが後方互換性を保っているか確認
  2. 両バージョンのSQLクエリを確認
  3. トランザクション分離レベルを確認

設計考慮ポイント

ディスカッション1: デプロイ戦略の選択

テーマ: Linear vs Canary vs All-at-once

戦略特徴ユースケース
Linear10PercentEvery1Minutes均等に段階的切り替え標準的なリリース
Canary10Percent5Minutes最初に少量、問題なければ残り全部リスクの高いリリース
AllAtOnce即座に全切り替えホットフィックス

ディスカッション2: ロールバック戦略

テーマ: 自動 vs 手動ロールバック

考慮点:

  1. 自動ロールバック: アラーム連動で即座に戻せるが、誤検知のリスク
  2. 手動ロールバック: 判断に時間がかかるが、慎重な対応が可能
  3. ハイブリッド: 重大なメトリクスのみ自動、その他は手動

ディスカッション3: データベーススキーマ変更

テーマ: オンラインスキーママイグレーション

パターン:

  1. Expand and Contract: 新旧両対応→旧削除
  2. Ghost Tables: シャドーテーブルでの段階的移行
  3. Feature Flags: 新スキーマの段階的有効化

発展課題

Advanced 1: カナリアリリースの実装

課題: ALB Weighted Target Groupsを使って、5%のトラフィックを新バージョンに流し、問題なければ徐々に増加

Advanced 2: Feature Flagsとの連携

課題: AWS AppConfigと連携して、デプロイとリリースを分離。デプロイ後にFeature Flagで機能を段階的に有効化

Advanced 3: Chaos Engineering

課題: AWS Fault Injection Simulatorを使って、デプロイ中の障害シナリオをテスト


コスト見積もり

月額コスト概算

サービスリソース月額コスト
ECS Fargate (Blue)0.5 vCPU / 1GB × 2タスク$29
ECS Fargate (Green)デプロイ時のみ$5(概算)
ALB1$16
NAT Gateway1$32
Aurora PostgreSQLdb.r6g.large (Multi-AZ)$350
CodeDeploy無料$0
Lambda (Hooks)月100回デプロイ想定$1
CloudWatchログ・メトリクス$15
X-Rayトレース$5

合計: 約 $453/月(約68,000円)

コスト削減のヒント

  1. デプロイ時間の短縮: Green環境の稼働時間を最小化
  2. 開発環境の簡素化: dev/stgはSingle-AZで運用
  3. Savings Plans: Fargateの長期コミット割引

学習のポイント

重要な概念の整理

  1. Blue/Green Deployment

    • 2つの同一環境を維持
    • トラフィック切り替えで無停止リリース
    • 即座のロールバックが可能
  2. CodeDeploy Lifecycle Hooks

    • 各フェーズでカスタムロジックを実行
    • テスト、検証、通知などを自動化
    • 失敗時は自動でデプロイ停止
  3. 後方互換性のあるマイグレーション

    • 新旧バージョンが共存できる設計
    • カラム追加はNULL許容で
    • 削除は全環境更新後に別リリースで

次のステップ

  1. Progressive Deliveryの実装(Argo Rollouts等)
  2. サービスメッシュでのトラフィック制御
  3. GitOpsワークフローの導入