コンテンツにスキップ

1 – Terraformの初期化

このチュートリアルでは、Terraformの使い始め方を説明します。チュートリアルでは、あなたのドメイン用のウェブサーバーが203.0.113.10でアクセス可能であり、Cloudflareでドメイン(example.com)を管理するためにサインアップしたシナリオを使用します。

始める前に、Terraformをインストールしていることを確認してください。また、このチュートリアルのリソースを編集するための権限を持つAPIトークンを作成する必要があります。

1. 最初のTerraform設定ファイルを定義する

初期のTerraform設定ファイルを作成し、APIトークンゾーンIDアカウントID、およびドメインの自分の値を入力します。

Terraformは.tf拡張子のファイルを処理します。設定がより複雑になるにつれて、設定を別々のファイルやモジュールに分割したくなるでしょう。今のところは、単一のファイルで進めてください。

Terminal window
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
}
EOF

2. TerraformとCloudflareプロバイダーを初期化する

HCLで基本的な設定を作成した後、Terraformを初期化し、Cloudflareに設定を適用するように依頼します。

Terminal window
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ディレクトリにローカルに保存されます。

Terminal window
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_x4

3. 実行計画を確認する

Cloudflareプロバイダーをインストールした後、Cloudflareアカウントに提案された変更を確認し、以前に定義した設定と一致するようにします。

Terminal window
terraform plan
Terraformは選択したプロバイダーを使用して次の実行計画を生成しました。
リソースアクションは次の記号で示されます:
+ 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を調べる)、オブジェクトが作成された後に返される値です。

4. 変更を適用する

planコマンドは重要です。なぜなら、実際に変更を加える前に、その正確性をプレビューできるからです。実行計画を確認した後、変更を適用します。

コマンドラインで--auto-approveを使用すると、出力が短くなります。このフラグがない場合、TerraformはTerraform計画の出力を表示し、その後適用する前に確認を求めます。

Terminal window
terraform apply --auto-approve
Terraformは選択したプロバイダーを使用して次の実行計画を生成しました。
リソースアクションは次の記号で示されます:
+ 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削除。

5. 結果を確認する

Cloudflareダッシュボードにログインし、DNS > レコードに移動します。Terraformによって作成されたレコードがレコードリストに表示されます。

API呼び出しから返された完全な結果を確認するには、Terraformが計算したが指定しなかったデフォルト値を含めて、terraform showを実行します。

Terminal window
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"
}
Terminal window
curl https://www.example.com
こんにちは、これは203.0.113.10です!