Cloudflare R2 和 Terraform 远程后端 ↗可以相互交互,为 Terraform 状态管理提供无缝体验。
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(管理 R2 API 令牌)。
- 选择 Create API token(创建 API 令牌) ↗。
- 选择 R2 Token(R2 令牌) 文本以编辑您的 API 令牌名称。
- 在 Permissions(权限) 下,选择 Object Read and Write(对象读取和写入) 权限,然后将令牌的作用域限制为您的
<YOUR_BUCKET_NAME>存储桶。 - 选择 Create API Token(创建 API 令牌)。
成功创建令牌后,请查看您的 Secret Access Key(机密访问密钥) 和 Access Key ID(访问密钥 ID) 值。
更新您的 cloudflare.tf 文件以包含您在上面创建的 <YOUR_BUCKET_NAME> 存储桶的后端 ↗。
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 命令以从本地状态迁移到远程状态 ↗。