Cloudflare PagesをTerraformで管理する

Cloudflare PagesをTerraformで管理するための方法。

Cloudflare Pagesで自分のブログなどのWebサイトを公開している人も多いですよね。
デプロイも自動でやってくれるので便利です。

今回はそんなCloudflare PagesをTerraform管理下に置いていきたいと思います。

Terraform初期設定

まずはTerraformが動くように初期設定していきます。

  • cloudflare providerのインストール
  • API TOKENの発行とセット

上記の2つを記事では書きますが、本当はbackendも設定してstateファイルをしっかり管理した方がいいと思います。
この記事では設定しないですが、あとでクラウド管理するつもりです。

cloudflare providerのインストール

まずはcloudflareのproviderを入れていきます。

# provider.tf
terraform {
  required_version = "~> 1.6"

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

上記を書いたのち、terraform initを実行します。

API TOKENの発行とセット

続いて、Terraformを通してローカルからCloudflareを操作するためにAPI TOKENを発行します。
公式ドキュメントはこちらです。なお、権限制御がないAPI Keysを使うのは非推奨のようです。
https://developers.cloudflare.com/fundamentals/api/get-started/create-token/

My Profile > API Tokensへ行き、Create Tokenを押します。
今回はPagesとDomainについて管理していくので、以下の設定でトークンを発行します。

Permissions

  • Account, Cloudflare Pages, Edit
  • Zone, DNS, Edit

発行したAPI TOKENを環境変数に設定します。

export CLOUDFLARE_API_TOKEN=hogehoge

もしtfファイルに直接トークンを埋めるならcloudflareブロックが必要なので以下の記事のapi_tokenなどを参考にしてください。

https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs

Cloudflare PagesをTerraform管理する

Cloudflare PagesをTerraform管理下に置いていきます。
すでにコンソールで作っているので、今回はインポートしていきます。

terraformのimportブロックを使用したインポート方法はこちらの記事をご覧ください。
https://blog.akikazewf.dev/post/use-terraform-import-block

cloudflare_pages_projectの設定

まずはプロジェクトをインポートしていきます。リソースのページはこちらです。
https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/pages_project

インポートに必要なaccount_idproject_nameWorkers & Pages > Overviewから確認できます。もしGitHubからのビルド設定を入れているHugoのブログなら、最終的に以下のような形になると思います。

resource "cloudflare_pages_project" "akikazewf" {
  name = "YOUR_BLOG_NAME"
  account_id = "YOUR_ACCOUNT_ID"
  production_branch = "main"

  build_config {
    build_command = "hugo"
    destination_dir = "public"
    root_dir = "YOUR_ROOT_DIR"
  }

  source {
    type = "github"

    config {
      owner = "YOUR_GITHUB"
      repo_name = "YOUR_REPOSITORY"
      production_branch = "main"
    }
  }
}

cloudflare_pages_domainの設定

続いて、おそらくカスタムドメインを設定していると思うのでそれもインポートしていきます。
https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/pages_domain

最終的にはこうなります。

resource "cloudflare_pages_domain" "akikazewf" {
  account_id   = "YOUR_ACCOUNT_ID"
  domain       = "YOUR_DOMAIN"
  project_name = "YOUR_PROJECT_NAME"
}

その他の設定

以上で終了ですが、カスタムページなどを入れているなら他にもインポートが必要かもしれません。

終わりに

Cloudflare PagesをTerraform管理しました。
AWSやGCPばかり使いがちなのですが、Cloudflareも対応しているとはさすがTerraformです。

のんびり生きていきたい。
Image by Freepik
Built with Hugo
Theme Stack designed by Jimmy