ニュース

AWS Bedrock KnowledgeBase RAG サンプル: 3回 .tfstate 管理

作成者: 奈良 英樹|Apr 6, 2026 7:22:30 AM

S3 バックエンド

本サンプルでは OpenTofu を IaC として利用することで AWS リソースをプログラム実行することで生成しています。 OpenTofu は登録管理してあるリソースのデータベースを .tfstate というファイル(デフォルトでは terraform.tfstate)で管理します。 (Purpose of Terraform State)

OpenTofu の操作を複数人で行う場合、.tfstate を共有する必要があります。 (The terraform_remote_state Data Source) 方法はいくつかありますが、 バックエンドを選択することで指定することができます。

本サンプルではS3 バックエンドを利用しています。

 

DynamoDB でのロック管理

 

リソースの更新状態に対してロックをかける必要があります。 (State Locking)
S3バックエンド では DynamoDB のテーブルでロック管理できるようになっています。

 

S3 バックエンドの構築

実際に構築するための OpenTofu の実行で、同時にバックエンドリソースを作ることができないので、まずバックエンドリソース(S3 と DynamoDB) をつくります。
OpenTofu をつかってバックエンドリソースを構築します:

 

docker compose run --rm tool tofu -chdir=tofu/admin init
docker compose run --rm tool tofu -chdir=tofu/admin plan -out admin.plan
docker compose run --rm tool tofu -chdir=tofu/admin apply admin.plan

 

本サンプルでの OpenTofu のディレクトリツリー

 

tofu ディレクトリにソースコードを管理しています。

 

% tree tofu -d
tofu
├── admin
├── modules
│   ├── apigw
│   ├── aurora
│   ├── bedrock
│   ├── ecr
│   ├── saving
│   ├── tfstate
│   ├── tools
│   └── vpc
└── rag

 

以下の内容のリソースを構築します:

ディレクトリ 内容
admin OpenTofu のバックエンドリソース構築 (S3, DynamoDB)
rag 本サンプルで実際に構築するリソース
modules それぞれのリソース定義を モジュール化

modules については次で説明します。

モジュール化

moduels はさらにリソースごとに分けられています:

ディレクトリ 内容
tfstate OpenTofu バックエンドリソースの管理
vpc VPC(RDS のネットワークなどの定義する)
aurora RDS で  PostgreSQL を構築
ecr Docker イメージを管理
bedrock Bedrock Knowledge Base 関連を構築
apigw Web API インターフェースと処理の実装
tools savingで使うツールセット
saving Auroro を夜間停止

これらのモジュールを組み合わせて admin と rag の構築を行うようにしています。

このような構成を採用するメリットは以下の2点です:

1.似たような AWS プロジェクトにコピペして使いやすい。
2.同一リソースを複数環境で定義しやすい。(例えば、 rag_prod, rag_stage のように分けるなど)

 

リソースネーミングルール

本サンプルでは {サービス名}-{環境} をリソースのプレフィックスとして使うようにしています。

  symbol = {
    service = var.service
    env     = var.env
    prefix  = "${var.service}-${var.env}"
  }

 

これらは、環境変数で定義できるようにしています。 (TF_VAR_ をプレフィックスにつけた変数 (Environment Variables))
何もしていないと sample-ai がリソースのプレフィックスになります。

 

リージョン us-west-2

 

本サンプルではAnthropic Claude 3 Sonnet で Knowledge base を動作させたいので、 us-west-2 で全てのリソースを作っています。