2 – 履歴を追跡する
Initialize Terraform チュートリアルでは、基本的な Cloudflare 設定を作成して適用しました。Terraform は、cloudflare.tf ファイルの先頭にこのゾーンにアクセスできる API トークンを提供したため、この設定をゾーンに適用しました。
head -n13 cloudflare.tf | tail -n3provider "cloudflare" { api_token = "your-api-token"}このチュートリアルでは、設定を GitHub に保存し、追跡、ピアレビュー、必要に応じてロールバックできるようにします。まず、リポジトリにコミットされるのを防ぐために、Terraform 設定ファイルから資格情報を削除します。
良いセキュリティプラクティスとして、リポジトリにコミットされるすべてのものから Cloudflare の資格情報を削除します。Cloudflare Terraform プロバイダーは、環境変数から資格情報(およびその他の設定)を読み取る ↗ことをサポートしています。以下の例のように:
sed -ie 's/^.*api_token =.*$/ # token pulled from $CLOUDFLARE_API_TOKEN/' cloudflare.tf
head -n13 cloudflare.tf | tail -n3provider "cloudflare" { # token pulled from $CLOUDFLARE_API_TOKEN}
export CLOUDFLARE_API_TOKEN=your-api-token空のプロバイダー定義をファイルに含める必要があります。これにより、Terraform は Cloudflare プラグインをインストールすることができます。Cloudflare プロバイダーをカスタマイズするために使用できる高度なオプションについては、Provider customizationを参照してください。
上記のコマンドを実行した後、terraform plan を実行して Cloudflare に認証できることを確認してください。Terraform は、正しいメールアドレスと API トークンを必要とする現在の状態を取得します。
terraform plancloudflare_record.www: Refreshing state... [id=c38d3102767284e7ca14d5dad3ab8b69]
------------------------------------------------------------------------
No changes. Infrastructure is up-to-date.
このメッセージは、Terraform があなたの設定と実際の物理リソースの間に違いを検出しなかったことを意味します。その結果、実行する必要のあるアクションはありません。資格情報を削除した後、Cloudflare 設定で Git リポジトリを初期化し、それを GitHub にプッシュします。
まず、設定を保存するための GitHub リポジトリを作成します。これは、GitHub ユーザーインターフェースを介して行うことも、API 呼び出しを使用して行うこともできます。
export GITHUB_USER=your-github-userexport GITHUB_TOKEN=your-github-token
export GITHUB_URL=$(curl -H "Authorization: token $GITHUB_TOKEN" -d '{"name": "cf-config", "private": true}' "https://api.github.com/user/repos" 2> /dev/null | jq -r .ssh_url)
echo $GITHUB_URL
git@github.com:$GITHUB_USER/cf-config.git次に、Git リポジトリを初期化し、最初のコミットを行います。
git initInitialized empty Git repository in /Users/username/cf-config/.git/git remote add origin $GITHUB_URLgit add cloudflare.tf
git commit -m "Step 2 - ウェブサーバー定義を含む初期コミット。"[master (root-commit) 5acea17] Step 2 - ウェブサーバー定義を含む初期コミット。 1 file changed, 16 insertions(+) create mode 100644 cloudflare.tf.terraform ディレクトリと terraform.tfstate ファイルがコミットされなかったことに注意してください。.terraform ディレクトリは、リポジトリが異なるアーキテクチャで使用される可能性があるためコミットされませんでした。また、ディレクトリ内のプラグインは、terraform init が実行されたシステム用にビルドされています。terraform.tfstate ファイルは、最終的に機密情報を含む可能性があるためコミットされず、Hashicorp の Remote State ↗ に関するドキュメントで説明されているように、状態を同期させる良い方法ではありません。
Git がこれらの 2 つのファイルについて通知しないように、新しい .gitignore ファイルに追加し、それをコミットしてすべてを GitHub にプッシュします。
cat > .gitignore <<'EOF'.terraform/terraform.tfstate*EOF
git add .gitignore
git commit -m "Step 2 - terraform プラグインディレクトリと状態ファイルを無視する。"[master 494c6d6] Step 2 - terraform プラグインディレクトリと状態ファイルを無視する。 1 file changed, 2 insertions(+) create mode 100644 .gitignoregit pushCounting objects: 6, done.Delta compression using up to 8 threads.Compressing objects: 100% (4/4), done.Writing objects: 100% (6/6), 762 bytes | 0 bytes/s, done.Total 6 (delta 0), reused 0 (delta 0)To git@github.com:$GITHUB_USER/cf-config.git * [new branch] master -> master