99category :
1010 - Infrastructure
1111thumbnail : /images/20240327a/thumbnail.png
12- author : 大岩潤矢
12+ author : 大岩潤矢
1313lede : " Cloudflareで管理しているドメインのDNS設定や、Cloudflare Pages等のサービスの設定を、Terraform管理に移行した際の手順等を、備忘録がてら記載します。"
1414---
1515## はじめに
@@ -176,9 +176,9 @@ Terraformのバージョン情報やプロパイダの設定、tfstateの配置
176176- Pages: ` global/pages/プロジェクト名.tfstate `
177177- Workers: ` global/workers/プロジェクト名.tfstate `
178178
179- ``` sh setup.tf
179+ ``` tf setup.tf
180180terraform {
181- // terraformのバージョン設定
181+ # terraformのバージョン設定
182182 required_version = "~> 1.7.5"
183183
184184 // cloudflareプロバイダを利用
@@ -189,7 +189,7 @@ terraform {
189189 }
190190 }
191191
192- // tfstateの保存先の設定。R2 Storageを使用する
192+ # tfstateの保存先の設定。R2 Storageを使用する
193193 backend "s3" {
194194 endpoints = {
195195 s3 = "https://<アカウントID>.r2.cloudflarestorage.com"
@@ -223,7 +223,7 @@ https://future-architect.github.io/articles/20230502a/
223223まずは現在の設定をTerraformの記述に落とし込んでくれる ` generate ` コマンドを試します。
224224
225225``` bash
226- cf-terraforming generate --resource-type " cloudflare_record" --zone " ゾーンID"
226+ cf-terraforming generate --resource-type " cloudflare_record" --zone " ゾーンID"
227227```
228228
229229- ` --resource-type ` オプションで取得したいリソースを指定します。今回はDNS設定を取得してみるので、 ` cloudflare_record ` を指定します。
@@ -233,13 +233,13 @@ cf-terraforming generate --resource-type "cloudflare_record" --zone "ゾーンID
233233実行してみたところ、以下のエラーが出ました。
234234
235235``` sh
236- FATA[0000] --account and --zone are mutually exclusive, support for both is deprecated
236+ FATA[0000] --account and --zone are mutually exclusive, support for both is deprecated
237237```
238238
239239どうやら先程セットした環境変数 ` CLOUDFLARE_ACCOUNT_ID ` がセットされていると正常に動いてくれなさそうなので、一旦 ` unset CLOUDFLARE_ACCOUNT_ID ` コマンドで環境変数を外しておきます。
240240
241241``` sh
242- % cf-terraforming generate --resource-type " cloudflare_record" --zone " ゾーンID"
242+ % cf-terraforming generate --resource-type " cloudflare_record" --zone " ゾーンID"
243243resource " cloudflare_record" " terraform_managed_resource_xxxxxxxxxxx" {
244244 name = " 920oj.net"
245245 proxied = true
@@ -269,14 +269,14 @@ resource "cloudflare_record" "terraform_managed_resource_yyyyyyyyyyy" {
269269
270270また、zone_idやルートドメイン名は何度か記述することになるので、local変数に定義しておくとミスが減ります。
271271
272- ``` sh local.tf
272+ ``` tf local.tf
273273locals {
274274 zone_id = "ゾーンID"
275275 root_domain = "920oj.net"
276276}
277277```
278278
279- ``` sh record.tf
279+ ``` tf record.tf
280280resource "cloudflare_record" "cname_root" {
281281 name = local.root_domain
282282 proxied = true
@@ -297,23 +297,23 @@ importするためのコマンドはcf-terraformingを利用して出力でき
297297
298298まずはcf-terraformingを利用してコマンドを出力してみましょう。
299299
300- ```
300+ ``` sh
301301 % cf-terraforming import --resource-type " cloudflare_record" --zone " ゾーンID"
302302terraform import cloudflare_record.terraform_managed_resource_xxxxxxxxxx ゾーンID/xxxxxxxxxx
303303terraform import cloudflare_record.terraform_managed_resource_yyyyyyyyyy ゾーンID/yyyyyyyyyy
304304```
305305
306306出力されたコマンドをもとに、リソース名を変更した上で、シェルスクリプトファイルとして保存します。
307307
308- ``` bash import.sh
308+ ``` sh import.sh
309309terraform import cloudflare_record.terraform_managed_resource_cname_root ゾーンID/xxxxxxxxxx
310310terraform import cloudflare_record.terraform_managed_resource_mx_root ゾーンID/yyyyyyyyyy
311311```
312312
313313これを実行してみましょう。 Import successful! と表示されれば、インポート完了です。
314314
315315``` sh
316- % ./import.sh
316+ % ./import.sh
317317cloudflare_record.cname_root: Importing from ID " ゾーンID/xxxxxxxxxx" ...
318318cloudflare_record.cname_root: Import prepared!
319319 Prepared cloudflare_record for import
@@ -362,7 +362,7 @@ Cloudflare Pagesは、 `cloudflare_pages_domain` リソースと `cloudflarepage
362362
363363` cloudflare_pages_project ` のインポートでは、 ` to ` にはimportする対象のリソース名を、 ` id ` には ` <アカウントID>/<プロジェクト名> ` を記載します。
364364
365- ``` sh import.tf
365+ ``` tf import.tf
366366# cloudflare_pages_domain のインポート
367367import {
368368 to = cloudflare_pages_domain.domain-920oj-net # 対象のリソース名
@@ -427,15 +427,15 @@ Plan: 2 to import, 0 to add, 0 to change, 0 to destroy.
427427
428428内容が正しいか確認するのと、コメントを消したり、local変数に置き換えたりして体裁を整えましょう。また、ファイルもリソースごとに分けておきましょう。
429429
430- ` ` ` sh pages_domain.tf
430+ ` ` ` tf pages_domain.tf
431431resource " cloudflare_pages_domain" " domain-920oj-net" {
432432 account_id = local.account_id
433433 domain = " 920oj.net"
434434 project_name = " 920oj-net"
435435}
436436` ` `
437437
438- ` ` ` sh generate.tf
438+ ` ` ` tf generate.tf
439439resource " cloudflare_pages_project" " project-920oj-net" {
440440 account_id = local.account_id
441441 name = local.project_name
0 commit comments