Skip to content

infra(terraform): Phase 1 Sprint 0 — (platform) 共有 state backend(S3 + use_lockfile、key=platform/dev/* と tasks/dev/* の2本)(S0Infra-2) #239

Description

@win2cot

Phase 1 Sprint 0 Infra-2: 共有 state backend(S3 + use_lockfile)構築 + bootstrap 手順

概要

ADR-0004(platform/tasks 分離)+ Terraform 1.11 前提で state backend を確定。ロックは use_lockfile(S3 ネイティブ)で DynamoDB は不採用。S3 bucket は中立名 dgz48-tfstate 1 個に platform/tasks の 2 key を集約。初回のみ admin creds で手元から S3 bucket を手動 bootstrap(chicken-and-egg 回避)。

確定仕様は本 Issue コメント「Bootstrap 確定(2026-06-04)」が正本。詳細: docs/architecture/infrastructure-plan.md §6.1 / infra/docs/bootstrap.md

構成(確定)

  • S3 バケット 1 個のみ: dgz48-tfstate(複数 project 共用の中立名、グローバル一意)。DynamoDB テーブルは作らない。
  • ロック: use_lockfile = true(S3 ネイティブ、Terraform 1.11 GA)。key 単位 lock で platform/tasks 衝突なし。
  • バケット設定: versioning ON / SSE-S3(AES256, BucketKey ON) / public access 全ブロック。
  • key: platform/dev/terraform.tfstate / tasks/dev/terraform.tfstate(将来 <proj>/<env>/...)。
  • versions.tf: required_version >= 1.11

実装内容

A. 初回 bootstrap(admin creds で 1 回だけ、手元実行)

infra/docs/bootstrap.mdaws s3api 4 コマンドで dgz48-tfstate を作成。確定前提「手元 apply しない」の唯一の例外。

B. backend.tf / versions.tf(各 root)

  • infra/shared/environments/dev/{backend.tf,versions.tf}(platform、key=platform/dev)
  • infra/environments/dev/{backend.tf,versions.tf}(tasks、key=tasks/dev)

C. bootstrap 手順 doc

  • infra/docs/bootstrap.md

D. 既存 doc 追従

  • ADR-0002 §C/§E/§6(DynamoDB→use_lockfile、required_version >= 1.11)
  • infra-plan §6.1 表 / 開発計画書 IaC 行

受入条件

  • S3 bucket dgz48-tfstate 存在(bootstrap 済)
  • infra/shared/environments/devinfra/environments/devterraform init 成功
  • infra/docs/bootstrap.md 記載

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/infraAWS インフラ(ECS Fargate / RDS / Keycloak / IAM)変更priority/p0Critical / Blocker。本番影響あり、または他作業がブロックされるtask-type:implコード実装が主体のタスク

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions