Environment Merge
Environment Merge機能を使用すると、1つの環境(ソース)から別の環境(ターゲット)にスキーマ変更を適用できます。これは、新しいテーブル、列、ビュー、列挙型などの構造的変更を開発ライフサイクル全体に伝播する中核的な操作です。
Mergeの仕組み
Section titled “Mergeの仕組み”マージプロセスは、安全で予測可能で透明になるように設計されています:
- 選択: ソース環境(変更の発生元)とターゲット環境(適用先)を選択します。
- 分析: システムはdiffを実行して、ターゲット環境で欠けているすべての変更を特定します。
- レビューとCherry-pick: 検出された変更をレビューし、適用するものを選択的に選択します。
- 自動バックアップ: 変更を適用する前に、Archie Coreはターゲット環境のデータと構造の完全なバックアップを作成します。
- アトミック適用: 選択された変更は単一の操作として適用されます。マージのいずれかの部分が失敗した場合、操作全体が自動的にロールバックされます。
セキュリティと信頼性
Section titled “セキュリティと信頼性”Archie Coreはマージ中に本番環境とステージング環境の整合性を保証します:
- トランザクション更新: すべてのスキーマ変更は単一のトランザクション内で適用されます。つまり、選択された変更がすべて正常に適用されるか、または何も適用されないかのどちらかで、データベースが部分的にマイグレートされた状態になることを防ぎます。
- 環境ロック: マージが進行中の場合、ターゲット環境は同時設定変更を防ぐためにロックされます。
- 自動マージ前バックアップ: 実行の直前に常に「安全網」バックアップが作成されます。マージが成功した後に問題を発見した場合、Backupsページを使用してマージ前の正確な状態に復元できます。
Cherry-Pick選択
Section titled “Cherry-Pick選択”マージインターフェースは、何が移動されるかのきめ細かい制御を可能にします:
- 個別選択: ブランチ全体をマージせずに、特定の変更(単一の列追加や新しいインデックスなど)を切り替えます。
- グループアクション: 特定のテーブルやビューに関連するすべての変更をすばやく選択または選択解除します。
- Breaking変更保護: 破壊的な操作(列の削除など)はデフォルトでは事前選択されていません。誤ったデータ損失を防ぐために、これらの変更に明示的にオプトインする必要があります。
マイグレーション履歴
Section titled “マイグレーション履歴”すべてのマージ操作は集中化された監査証跡に記録されます。環境の履歴ページには以下が表示されます:
- 監査ログ: マージを開始したユーザー、関与した環境、発生した日時。
- 変更サマリー: 作成、変更、削除された内容の明確な内訳。
- トレーサビリティ: マイグレーション中に実行された特定のSQLコマンドのドキュメント。
- バックアップリンク: そのマイグレーション用に特別に作成された自動バックアップへの直接アクセス。
ロールバックポリシー
Section titled “ロールバックポリシー”マージを元に戻す必要がある場合は、Backupsページを使用して環境を「マージ前」の状態に復元する必要があります。
注: 単純な元に戻しとは異なり、復元操作は全体のデータベースを以前の時点に戻します。本番にマージする前に、ステージング環境で変更を検証することをお勧めします。
開発者API(GraphQL)
Section titled “開発者API(GraphQL)”Mutation: mergeEnvironments
Section titled “Mutation: mergeEnvironments”mutation MergeEnvironments($input: MergeEnvironmentInput!) { mergeEnvironments(input: $input) { success message migrationId changesApplied backupId }}Query: migrationHistory
Section titled “Query: migrationHistory”query MigrationHistory($projectId: ID!, $environment: String) { migrationHistory(projectId: $projectId, environment: $environment) { id sourceEnvironment targetEnvironment status appliedBy appliedAt changes { changeType objectName sql isBreaking } backupId }}