notes mizzy.org

stateの「所有」と「運用責任」は分離できる二軸である

解釈 出典: explorations/2026-04-26-cdk-pulumi-terraform-carina-comparison/chapter-4-state-ownership-and-operational-responsibility.md 作成

stateをめぐる設計判断は一つの軸ではなく二つある。

この2軸は同じツールでも分離できる。例えばPulumi serviceを使うと、所有は自前だが運用責任の多くはPulumi社に委ねるという組み合わせになる。

運用責任 — lock / 暗号化 / migrationを誰が担うか 自前で担う 委譲する 所有 = 自前 所有 = 委譲 所有 — どこにデータがあるか Terraform / Carina tfstate・carina.state.jsonを自分で置き backendも自分で設計する Pulumi service stateは自分のものだが lock・暗号化はPulumi社が担う CDK CFNがstateを持ち、運用も持つ 代わりにCFNへロックインされる 同じPulumiでも、所有はそのままで縦だけ動く 左上と右下だけでなく左下も埋まる。この二つが独立に選べることが、左下の組み合わせが存在する理由である。
横に動かず縦だけ動く点があることが、2軸が独立している証拠になっている。所有と運用責任を1本の軸に畳むと、Pulumi serviceの位置が表せなくなる。
ツールstate所有者state形式refreshdrift detectionlock暗号化
Terraform自前tfstate (JSON)terraform refresh (applyに統合)terraform planで検出backendが提供(S3 + DynamoDB等)backend依存
CDKCFNサービスに委譲CFN stack state (AWS側)CFN drift detectionCFN drift detection機能CFNサービス側CFNサービス側
Pulumi自前(Pulumi service / S3 / local)checkpoint (JSON)pulumi refreshpulumi previewで検出backend側Pulumi serviceなら組込、自前backendは要設定
Carina自前carina.state.json (state v3、binding/dependency_bindings含む)(要確認)plan時に差分計算(要確認)(要確認)

トレードオフは明快である。自前(Terraform / Pulumi / Carina)はbackend設計の自由度を得る代わりに運用責任を負う。委譲(CDK → CFN)は運用がCFN側に委ねられ、ロック / drift / 暗号化を任せられる代わりにCFNにロックインされる。

state操作の手段も所有の帰結として分かれる。Terraformはstate mv / state rm / import / 手動JSON編集(非推奨)、Pulumiはpulumi state delete / pulumi stack export / pulumi stack import、CDKは該当なし(CFNコンソール / CLI経由)。いずれも「文法で禁じる」のではなく規約で縛る形になっている。

state schemaの進化も所有者の責任範囲に入る。Terraformはschema versionとprovider state migration、Pulumiはcheckpoint formatのバージョン、Carinaはstate v3(現行)と過去バージョンとの互換性を自分で面倒を見る必要がある。

state加工の自由度には設計思想の差が現れる。Terraformはstate blocks (moved/removed/import)の処理が分散している(pre-planでmoved、graph内でremoved/import)のに対し、CarinaはPlan<Effect>生成後にadd_state_block_effects()で統一的に反映する。「plan完成前/中にstate/graphへ吸収する」か「plan完成後に統一加工する」かの差である。

#state #運用 #設計判断