top of page
執筆者の写真奈良 英樹

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

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 を夜間停止

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

このような構成を採用するメリットは以下の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 で全てのリソースを作っています。

閲覧数:4回0件のコメント

最新記事

すべて表示

AWS Bedrock KnowledgeBase RAG サンプル : 7その他 / あとがき

Aurora を夜間停止する API は呼び出された時だけ料金が発生しますが、データベースサーバーは稼働中ずっと課金されます。 今回作成したリソースの中でも Auroro の料金が最も高いので、サーバーを一時停止させないで帰宅してしまった時に自動的に一時停止するようにします...

Commenti


bottom of page