管理プロセス

Twelve-Factor App の原則で、DB マイグレーションなどの管理タスクをワンオフプロセスとして実行する

Twelve-Factor運用

管理プロセスとは

管理プロセスは、Twelve-Factor App の第 12 原則で、DB マイグレーション、データ修正、レポート生成などの管理タスクをワンオフプロセスとして実行する考え方である。

核心は「管理タスクもアプリケーションと同じコードベース・同じ環境・同じ設定で実行する」という点にある。本番環境のデータを修正するスクリプトを、開発者のローカルマシンから異なる設定で実行すると、環境の差が事故の原因になりうる。管理タスクをアプリと同じデプロイパイプラインに載せると、この差を減らせる。

管理タスクの種類

タスク説明AWS での実行例
DB マイグレーションスキーマ変更、カラム追加Lambda (手動実行)
データ修正不整合データの修正、一括更新Lambda + DynamoDB
レポート生成月次集計、分析レポートStep Functions
キャッシュクリア古いデータの削除、キャッシュ無効化Lambda
ユーザー管理管理者の追加、権限変更AWS CLI (cognito-idp)
シード投入初期データの投入、マスタデータ更新Lambda + S3

管理タスクの 4 原則

1. 同一コードベース

管理スクリプトはアプリケーションと同じリポジトリに含める。別リポジトリに分離すると、アプリのモデル変更に管理スクリプトが追従できず、実行時エラーの原因になる。

2. 同一環境

本番の管理タスクは本番環境で実行する。ローカルから本番 DB に接続するのではなく、本番と同じ Lambda 関数として実行する。

# 本番環境の Lambda を手動実行
aws lambda invoke --function-name MigrationFunction \
  --payload '{"version": "003"}' /dev/stdout

3. 冪等性の確保

同じタスクを 2 回実行しても安全な設計にする。ネットワーク障害やタイムアウトの後に、同じタスクを再実行することがある。

// 冪等なマイグレーション: 適用済みならスキップ
async function migrate(version: string): Promise<void> {
  const applied = await getAppliedMigrations();
  if (applied.includes(version)) {
    console.log(`Migration ${version} already applied, skipping`);
    return;
  }
  await runMigration(version);
  await recordMigration(version);
}

4. 監査証跡

実行結果を CloudWatch Logs に記録し、誰が / いつ / 何を実行したかを追跡可能にする。手動の SQL 実行はこの記録に残らないので避ける。

Step Functions による複雑な管理タスク

複数ステップにまたがる管理タスクは、Step Functions でワークフローとして定義する。途中で失敗した実行は、成功したステップを繰り返さずに、失敗したステップから再開できる (直近 14 日以内に成功しなかった Standard ワークフローの実行 / 2026 年 10 月時点)。

開始 → データ検証 → バックアップ作成 → マイグレーション実行 → 検証 → 完了
                                          ↓ (失敗)
                                    バックアップから復元

アンチパターン

アンチパターン問題正しいアプローチ
本番 DB に直接 SQL を実行CloudWatch Logs の記録に残らない、元に戻しにくいLambda 経由で実行
ローカルから本番 DB に接続セキュリティリスク、環境差異本番環境の Lambda で実行
管理スクリプトを手動で実行再現性がない、手順ミスCI/CD パイプラインに組み込む
管理タスクを別リポジトリで管理モデル変更に追従できないアプリと同一リポジトリ
冪等性のない一括更新再実行で二重処理処理済みフラグで冪等性を確保

詳しくは関連書籍を参照。

共有:

この記事は役に立ちましたか?

関連用語

関連する記事