Terraform(またはOpenTofu)を使用してCloudflare PagesにAstroプロジェクトをGithub連携でデプロイしたので備忘録として残します。
Terraformを使用することで、インフラをコードとして管理し、デプロイプロセスを自動化できます。
前提条件
- Terraform(またはOpenTofu)がインストールされていること
- Cloudflareアカウントとアクセストークン
- GitHubアカウントとリポジトリにプッシュされたAstroプロジェクト
また、今回は個人開発前提なので下記の運用とします。
- Astroプロジェクトのgitレポジトリにそのままtfファイルを追加(モノレポ)
- tfstateファイルはローカルでのみ管理
手順
まず、Terraformの設定ファイルを作成します。
touch main.tf variables.tf
New-Item main.tf variables.tf
variables.tfファイルの作成
variables.tf
ファイルに必要な変数を定義します。
variable "cloudflare_api_token" {
description = "Cloudflare API Token"
variable "cloudflare_account_id" {
description = "Cloudflare Account ID"
variable "production_branch" {
description = "Production branch name"
variable "github_repo_name" {
description = "Name of GitHub repository"
variable "github_owner" {
description = "Owner of GitHub repository"
main.tfファイルの作成
main.tf
ファイルにCloudflare Pagesプロジェクトのリソースを追加します。
source = "cloudflare/cloudflare"
api_token = var.cloudflare_api_token
resource "cloudflare_pages_project" "astro_project" {
account_id = var.cloudflare_account_id
name = var.github_repo_name
production_branch = var.production_branch
repo_name = var.github_repo_name
production_branch = "main"
pr_comments_enabled = true
deployments_enabled = true
production_deployment_enabled = true
build_command = "npm run build"
environment_variables = {
environment_variables = {
pnpmを使う場合は、`build_command`を`npm i -g pnpm && pnpm i && pnpm build`に変更してください。
tfvarsファイルの作成(オプション)
terraform.tfvars
ファイルにCloudflare API TokenとアカウントIDを追加します。
これを書いておくと、terraform apply
コマンドを実行する際に変数の値を入力する必要がなくなります。
cloudflare_api_token = "自分のCloudflare API Token"
cloudflare_account_id = "自分のCloudflare Account ID"
github_repo_name = "Astroプロジェクトのリポジトリ名"
github_owner = "Astroプロジェクトのリポジェクトのオーナー名"
branchはデフォルトでmain
になっていますが、変更したい場合はterraform.tfvars
に追加してください。
カスタムドメインの設定(オプション)
カスタムドメインを設定する場合は、以下のリソースをmain.tf
に追加します。
resource "cloudflare_pages_domain" "custom_domain" {
account_id = var.cloudflare_account_id
project_name = cloudflare_pages_project.astro_project.name
domain = "your-custom-domain.com"
以下のコマンドを実行して、Terraformプロジェクトを初期化し、リソースを作成します。
TerraformはライセンスがBSL1.1であるため、オープンソースの代替としてOpenTofuを使用することもできます。
terraform apply -auto-approve
変数の値を入力するよう求められたら、適切な値を入力します。(terraform.tfvarsを作成している場合は不要)
デプロイの確認
Terraformの適用が完了したら、Cloudflareダッシュボードで新しく作成されたPagesプロジェクトを確認できます。
GitHubリポジトリへの変更がプッシュされると、自動的にビルドとデプロイが開始されます。