👏
CloudflareをTerraform化したい
この記事は、tacoms Advent Calendar 2024の9日目です!
他メンバーのAdvent Calendarはこちらからご覧ください!👇
はじめに
Cloudflareのリソースをterraform化したいなと思った時にcf-terraforming
という便利そうなツールを見つけたので、ちょいと試したいと思います。
試す
インストール
cf-terraforming
をインストールしていきます。
brew tap cloudflare/cloudflare
brew install cloudflare/cloudflare/cf-terraforming
設定
まずは認証を通すために環境変数として以下を設定します。ドキュメントにはCLOUDFLARE_ACCOUNT_ID
の記載がなかったですが、必須でした。ちなみにアカウントIDを設定しない場合は、FATA[0015] required missing account ID
というエラーが出ます。
export CLOUDFLARE_API_TOKEN='hogehoge'
export CLOUDFLARE_ACCOUNT_ID='hogehoge'
コマンド実行
例えばアカウント管理をterraform化したい場合は、こんなコマンドを実行すればterraformのコードを出力してくれます。めちゃくちゃ便利ですね!
$ cf-terraforming generate --resource-type "cloudflare_account_member"
resource "cloudflare_account_member" "terraform_managed_resource_8101e0b8fa4ab825deef21c1711b8840" {
account_id = "hogehoge"
email_address = "hogehoge@gmail.com"
role_ids = ["1111111111111111111111"]
status = "accepted"
}
Cloudflare Workers(以下worker)とかはどう?
まずcf-terraforming
ではgenerateもimportもできません。サポートしているリソース一覧で確認することができます。リソース一覧を見ると、Cloudflare R2なども含めてCloudflareの主なサービスがサポートされていない状況でした。
純粋にimportを実装してみる
試しにworkerをサクッと作って、importの実装してみました。
terraform {
required_version = "~> 1.10.0"
required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "4.47.0"
}
}
}
resource "cloudflare_workers_script" "main" {
account_id = "hogehoge"
name = "hogehoge"
content = jsonencode(
{
lockfileVersion = 3
name = "hogehoge"
packages = {
"" = {
license = "ISC"
name = "hogehoge"
version = "1.0.0"
}
}
requires = true
version = "1.0.0"
}
)
}
// importブロック
import {
id = "<account-id>/<worker-name>"
to = cloudflare_workers_script.main
}
ちなみに最新の5.0.0-alpha1
で試すと謎にmissing required account_id parameter
が出続けたり、ドキュメントと実際に必要なparameterが違ったりしてます(nameやcontentは記載箇所が違いそう)。4.47.0
が無難ではありそうです。
参考
Discussion