cf-terrafomring 설치

// homebrew가 설치되어 있어야 한다.
brew tap cloudflare/cloudflare
brew install --cask cloudflare/cloudflare/cf-terraforming // 오류난다면 아래를 실행
// brew install cf-terraforming

API 토큰 생성

DNS 대시보드를 가져오기 위한 API Token 생성

DNS 대시보드를 가져오기 위한 API Token 생성

위처럼 설정해준다. 또한 token은 한 번 밖에 볼 수 없으니 복사를 잘 해놓자.

Cloudflare Provider 작성

required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.46"
    }
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = "~> 4.0"
    }
  }

provider "cloudflare" {
  api_token = var.cloudflare_api_token
  email     = var.cloudflare_email
}

cf-terraforming 명령어 실행해서 파일 추출

cf-terraforming generate --email [email protected] \\
--token khxIfj0FuiERtk9V4TNnllq6YTSgVwBZ1sjc2D-2 -z 7f36a2ad61d79c1d691d9b42a8801d9a \\
--resource-type cloudflare_record > "importing-example.tf"

cf-terraforming generate --email [email protected] \\
--token khxIfj0FuiERtk9V4TNnllq6YTSgVwBZ1sjc2D-2 -z 4012f22b3a44063dcf7356e33826cda3 \\
--resource-type cloudflare_record > "importing-example1.tf"

cf-terraforming generate --email [email protected] \\
--token khxIfj0FuiERtk9V4TNnllq6YTSgVwBZ1sjc2D-2 -z f01752f6068e56c02c1b1edd4dbc7442 \\
--resource-type cloudflare_record > "importing-example2.tf"

// xquare(zone-id) - 7f36a2ad61d79c1d691d9b42a8801d9a
// pick(zone-id) - 4012f22b3a44063dcf7356e33826cda3
// repo(zone-id) - f01752f6068e56c02c1b1edd4dbc7442
resource "cloudflare_record" "terraform_managed_resource_d7098e6d2a5a02a84419f82fe1052312" {
  name    = "admin"
  proxied = true
  ttl     = 1
  type    = "CNAME"
  value   = "ae42da7129a0e4f24a9954e6ed354000-509ec74e64c60071.elb.ap-northeast-2.amazonaws.com"
  zone_id = "7f36a2ad61d79c1d691d9b42a8801d9a"
}

resource "cloudflare_record" "terraform_managed_resource_29f7e5ed912a03aed5e7848f286dfd68" {
  name    = "argo-cd"
  proxied = false
  ttl     = 1
  type    = "CNAME"
  value   = "ae42da7129a0e4f24a9954e6ed354000-509ec74e64c60071.elb.ap-northeast-2.amazonaws.com"
  zone_id = "7f36a2ad61d79c1d691d9b42a8801d9a"
}

그 후 잘 적용시키면 끝!

tf state 관리 관련 처리

문제점

위처럼 resource들들을 가져온 후 terraform plan을 실행하면 리소스가

**state 파일에 존재하지 않기 때문**에 **리소스가 존재하지 않는다 생각해 생성**하려고 한다.

위를 해결하려면 리소스의 실제 상태를 Cloudflare에서 Terraform 상태 파일로(.tfstate)로 가져와야함

terraform state에 import하기

cf-terraforming import --resource-type "cloudflare_record" --email [email protected] --key 272169a9e8226aceff08cc63a5a6b41916167 --zone 7f36a2ad61d79c1d691d9b42a8801d9a
terraform import cloudflare_record.terraform_managed_resource_bf5f8f700cedbf85f6ca8081b59ac68b 7f36a2ad61d79c1d691d9b42a8801d9a/bf5f8f700cedbf85f6ca8081b59ac68b
terraform import cloudflare_record.terraform_managed_resource_2dc632068dd7be829459b388e9a0e799 7f36a2ad61d79c1d691d9b42a8801d9a/2dc632068dd7be829459b388e9a0e799
terraform import cloudflare_record.terraform_managed_resource_5bb17aed09d89f1b862697e9d93b33f8 7f36a2ad61d79c1d691d9b42a8801d9a/5bb17aed09d89f1b862697e9d93b33f8
terraform import cloudflare_record.terraform_managed_resource_d19a116c8b770c1c9d8416a4da925640 7f36a2ad61d79c1d691d9b42a8801d9a/d19a116c8b770c1c9d8416a4da925640
terraform import cloudflare_record.terraform_managed_resource_870e46f7ca40d33e1d8a29a34c5fcdc0 7f36a2ad61d79c1d691d9b42a8801d9a/870e46f7ca40d33e1d8a29a34c5fcdc0
terraform import cloudflare_record.terraform_managed_resource_8e3bd75b91076169ab44ab836fc76a65 7f36a2ad61d79c1d691d9b42a8801d9a/8e3bd75b91076169ab44ab836fc76a65
terraform import cloudflare_record.terraform_managed_resource_945b486d730055fdb80d558dd8722e80 7f36a2ad61d79c1d691d9b42a8801d9a/945b486d730055fdb80d558dd8722e80
terraform import cloudflare_record.terraform_managed_resource_48c127cc59fc2142e99f2b58ec9ad308 7f36a2ad61d79c1d691d9b42a8801d9a/48c127cc59fc2142e99f2b58ec9ad308