1 – Terraformの初期化
このチュートリアルでは、Terraformの使い始め方を説明します。チュートリアルでは、あなたのドメイン用のウェブサーバーが203.0.113.10でアクセス可能であり、Cloudflareでドメイン(example.com)を管理するためにサインアップしたシナリオを使用します。
始める前に、Terraformをインストールしていることを確認してください。また、このチュートリアルのリソースを編集するための権限を持つAPIトークンを作成する必要があります。
初期のTerraform設定ファイルを作成し、APIトークン、ゾーンID、アカウントID、およびドメインの自分の値を入力します。
Terraformは.tf拡張子のファイルを処理します。設定がより複雑になるにつれて、設定を別々のファイルやモジュールに分割したくなるでしょう。今のところは、単一のファイルで進めてください。
cat > cloudflare.tf <<'EOF'terraform { required_providers { cloudflare = { source = "cloudflare/cloudflare" version = "~> 4" } }}
provider "cloudflare" { api_token = "<YOUR_API_TOKEN>"}
variable "zone_id" { default = "<YOUR_ZONE_ID>"}
variable "account_id" { default = "<YOUR_ACCOUNT_ID>"}
variable "domain" { default = "<YOUR_DOMAIN>"}
resource "cloudflare_record" "www" { zone_id = var.zone_id name = "www" value = "203.0.113.10" type = "A" proxied = true}EOFHCLで基本的な設定を作成した後、Terraformを初期化し、Cloudflareに設定を適用するように依頼します。
terraform initプロバイダープラグインを初期化しています...- https://releases.hashicorp.comで利用可能なプロバイダープラグインを確認中...- プロバイダー "cloudflare" (1.0.0) のプラグインをダウンロード中...
次のプロバイダーには設定にバージョン制約がないため、最新バージョンがインストールされました。
破壊的変更を含む可能性のある新しいメジャーバージョンへの自動アップグレードを防ぐために、設定内の対応するプロバイダーブロックにバージョン = "..." 制約を追加することをお勧めします。以下の制約文字列が提案されています。
* provider.cloudflare: version = "~> 1.0"
Terraformは正常に初期化されました!
これでTerraformを使い始めることができます。"terraform plan"を実行して、インフラストラクチャに必要な変更を確認してみてください。すべてのTerraformコマンドが正常に動作するはずです。
Terraformのモジュールやバックエンド設定を設定または変更した場合は、このコマンドを再実行して作業ディレクトリを再初期化してください。忘れた場合は、他のコマンドがそれを検出し、必要に応じてリマインドします。terraform initを実行すると、Cloudflare Terraformプロバイダーなど、必要なプラグインが自動的にダウンロードされ、.terraformディレクトリにローカルに保存されます。
find .terraform/.terraform/.terraform/plugins.terraform/plugins/darwin_amd64.terraform/plugins/darwin_amd64/lock.json.terraform/plugins/darwin_amd64/terraform-provider-cloudflare_v1.0.0_x4Cloudflareプロバイダーをインストールした後、Cloudflareアカウントに提案された変更を確認し、以前に定義した設定と一致するようにします。
terraform planTerraformは選択したプロバイダーを使用して次の実行計画を生成しました。リソースアクションは次の記号で示されます: + create
Terraformは次のアクションを実行します:
# cloudflare_record.wwwが作成されます + resource "cloudflare_record" "www" { + allow_overwrite = false + created_on = (apply後に知られる) + hostname = (apply後に知られる) + id = (apply後に知られる) + metadata = (apply後に知られる) + modified_on = (apply後に知られる) + name = "www" + proxiable = (apply後に知られる) + proxied = true + ttl = (apply後に知られる) + type = "A" + value = "203.0.113.10" + zone_id = "e2e6491340be87a3726f91fc4148b126" }
計画:追加1、変更0、削除0。
------------------------------------------------------------------------
注意:この計画を保存するために-outオプションを使用しなかったため、Terraformは今すぐ"terraform apply"を実行しても正確にこれらのアクションを実行することを保証できません。実行計画に表示されているように、Terraformは新しいDNSレコードを作成します。出力には、Aレコードの値(203.0.113.10)など、明示的に指定した値が表示されます。(apply後に知られる)と表示されている値は、他のAPI呼び出しに基づいて導出されるか(例えば、metadataを調べる)、オブジェクトが作成された後に返される値です。
planコマンドは重要です。なぜなら、実際に変更を加える前に、その正確性をプレビューできるからです。実行計画を確認した後、変更を適用します。
コマンドラインで--auto-approveを使用すると、出力が短くなります。このフラグがない場合、TerraformはTerraform計画の出力を表示し、その後適用する前に確認を求めます。
terraform apply --auto-approveTerraformは選択したプロバイダーを使用して次の実行計画を生成しました。リソースアクションは次の記号で示されます: + create
Terraformは次のアクションを実行します:
# cloudflare_record.wwwが作成されます + resource "cloudflare_record" "www" { + allow_overwrite = false + created_on = (apply後に知られる) + hostname = (apply後に知られる) + id = (apply後に知られる) + metadata = (apply後に知られる) + modified_on = (apply後に知られる) + name = "www" + proxiable = (apply後に知られる) + proxied = true + ttl = (apply後に知られる) + type = "A" + value = "203.0.113.10" + zone_id = "e2e6491340be87a3726f91fc4148b126" }
計画:追加1、変更0、削除0。cloudflare_record.www: 1秒後に作成完了 [id=c38d3103767284e7cd14d5dad3ab8668]
適用完了!リソース:1追加、0変更、0削除。Cloudflareダッシュボード ↗にログインし、DNS > レコードに移動します。Terraformによって作成されたレコードがレコードリストに表示されます。
API呼び出しから返された完全な結果を確認するには、Terraformが計算したが指定しなかったデフォルト値を含めて、terraform showを実行します。
terraform show# cloudflare_record.www:resource "cloudflare_record" "www" { id = "c38d3103767284e7cd14d5dad3ab8668" created_on = "2023-04-08T00:37:33.76321Z" data = [] domain = "example.com" hostname = "www.example.com" metadata = [ { auto_added = false managed_by_apps = false } ] modified_on = "2023-04-08T00:37:33.76321Z" name = "www" priority = 0 proxiable = true proxied = true ttl = 1 type = "A" value = "203.0.113.10" zone_id = "e2e6491340be87a3726f91fc4148b126"}curl https://www.example.comこんにちは、これは203.0.113.10です!