Cloudflare R2 と Terraform のリモートバックエンド ↗ を組み合わせると、Terraform の state 管理をスムーズに進められます。
Cloudflare R2 はオブジェクトストレージサービスです。画像、動画、静的サイトなどの静的アセットを、高い可用性・拡張性・安全性で保存して配信できます。R2 は S3 API 互換 のため、既存のクラウドインフラやアプリケーションと統合しやすいです。
Wrangler、API、または アカウントのダッシュボード ↗ で R2 バケット を作成します。
wrangler r2 bucket create <YOUR_BUCKET_NAME> curl https://api.cloudflare.com/client/v4/accounts/{account_id}/r2/buckets \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{"name": "<YOUR_BUCKET_NAME>"}'次に、Object Read & Write 権限を持つ バケットスコープの R2 API トークン を作成します。API トークンを作成する手順は次のとおりです。
- Account Home で R2 を選びます。
- Account details で Manage R2 API tokens を選びます。
- Create API token ↗ を選びます。
- R2 Token のテキストを選び、API トークン名を編集します。
- Permissions で Object Read and Write を選び、トークンの対象を
<YOUR_BUCKET_NAME>バケットに限定します。 - Create API Token を選びます。
トークンの作成が完了したら、Secret Access Key と Access Key ID の値を確認します。
上で作成した <YOUR_BUCKET_NAME> バケット向けの backend ↗ を、cloudflare.tf に追加します。
terraform {
backend "s3" {
bucket = "<YOUR_BUCKET_NAME>"
key = "/some/key/terraform.tfstate"
region = "auto"
skip_credentials_validation = true
skip_metadata_api_check = true
skip_region_validation = true
skip_requesting_account_id = true
skip_s3_checksum = true
use_path_style = true
access_key = "<YOUR_R2_ACCESS_KEY>"
secret_key = "<YOUR_R2_ACCESS_SECRET>"
endpoints = { s3 = "https://<YOUR_ACCOUNT_ID>.r2.cloudflarestorage.com" }
}
required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "~> 4"
}
}
}
provider "cloudflare" {
# token pulled from $CLOUDFLARE_API_TOKEN
}
variable "account_id" { default = "<YOUR_ACCOUNT_ID>" }cloudflare.tf を更新したあと、terraform init -reconfigure を実行すると、ローカルの state から リモート state ↗ へ移行できます。