Pinecone リソースを Terraform で import する
Pinecone リソースを Terraform で import する手順
Pinecone 用の Terraform プロバイダがリリースされたようです。詳細はこちらを参照してください。
本記事では、このプロバイダを使って既存の Pinecone リソースを Terraform で管理してみようと思います。
Terraform のバージョン
terraformはv1.4.6以上が必要みたいなので、今回を機会に最新のバージョンに更新しました。
同プロジェクトでawsのリソースも管理しているので、awsのプロバイダ設定も含んでいます。
terraform -v
# Terraform v1.8.2
# on darwin_amd64
# + provider registry.terraform.io/hashicorp/aws v5.47.0
# + provider registry.terraform.io/pinecone-io/pinecone v0.7.4
ディレクトリ構成
ディレクトリ構成は、Terraform の推奨スタイルガイドに従っています。
├── dev
│ ├── backend.tf
│ ├── main.tf
│ ├── providers.tf
│ └── terraform.tf
└── modules
└── rag
├── main.tf
├── terraform.tf
└── variables.tf
手順
-
dev/providers.tf
ファイルを作成し、プロバイダを設定します。
provider "aws" {
region = local.region
}
provider "aws" {
alias = "virginia"
region = "us-east-1"
}
provider "pinecone" {
}
pineconeのproviderブロックでは、このようにAPIキーをセットできるようですが、本記事では環境変数を使います。後述の手順でexportしています。
-
dev/terraform.tf
ファイルを作成し、必要なプロバイダとバージョンを指定します。
pineconeのプロバイダバージョンは最新のv0.7.4で固定しておきます。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "5.47.0"
configuration_aliases = [aws.virginia]
}
pinecone = {
source = "pinecone-io/pinecone"
version = "0.7.4"
}
}
required_version = "1.8.2"
}
modules/rag/terraform.tf
にも同じファイルを設置します。
必要であれば、適宜シンボリックリンクなどを使ってください。
-
dev/main.tf
ファイルを作成し、Pinecone モジュールを呼び出します。
module "rag" {
source = "../modules/rag"
index_name = "hoge_index"
dimension = 1536
metric = "cosine"
cloud = "aws"
region = "us-east-1"
providers = {
aws.virginia = aws.virginia
}
}
-
modules/rag/variables.tf
ファイルを作成し、モジュールの変数を定義します。
variable "index_name" {
type = string
}
variable "dimension" {
type = number
}
variable "metric" {
type = string
}
variable "cloud" {
type = string
}
variable "region" {
type = string
}
-
modules/rag/main.tf
ファイルを作成し、Pinecone インデックスのリソースを定義します。
今回はpinecone_index
リソースのみを対象にします。
pinecone_collection
リソースもterraformnに対応しているようですが、私は利用していなかったので未実施です。
resource "pinecone_index" "hoge" {
name = var.index_name
dimension = var.dimension
metric = var.metric
spec = {
serverless = {
cloud = var.cloud
region = var.region
}
}
}
- Terraform を初期化します。
以降の手順はdev
ディレクトリで実行します。
terraform init
- Pinecone API キーを環境変数として設定します。
export PINECONE_API_KEY=hoge_key
- 既存の Pinecone インデックスを Terraform にインポートします。
ドキュメントには特に記載ありませんでしたが、index_name
を指定することでimportできました。
terraform import module.rag.pinecone_index.hoge hoge_index
- インポートしたリソースに対する差分がないことを確認します。
terraform plan
出力結果に No changes
と表示されれば、インポートされたリソースと Terraform の状態が同期されており、差分がないことを意味します。これで、既存の Pinecone リソースが Terraform で管理できるようになりました。
おわり
今回はimportの手順ですが、applyも同じようにできるのではないでしょうか。
気付けば、AWS bedrockのknowledge baseのリソースもつい先日terraform対応されていたようです。
aws_bedrockagent_knowledge_base
(記事にするかはともかく)早めに対応したいところです。
Discussion