💭

個人GitHub IaC化RTA

2024/06/14に公開

やること

  • 個人のリポジトリを全てTerraformで管理する
  • 組織も同様の手順で可能

やらないこと

  • その他リソースのIaC化。慣れれば同様の手順が使えます
  • github_repository_collaborator(s)やgithub_repository_rulesetなども管理できますが、今回はやりません

provider.tfの作成

terraform {
  required_providers {
    github = {
      source  = "integrations/github"
      version = "~> 6.0"
    }
  }
}

provider "github" {}
gh auth login  # GitHub CLIでの認証
terraform init

Terraform import blockを作成するスクリプト

import.sh
# Fetch the list of repository names from GitHub
repos=$(gh repo list --json name -L 200 --source -q ".[].name")

# Loop through each repository name
for repo in $repos; do
  # Append the import block to the repo.tf file
  echo "import {
  id = \"$repo\"
  to = github_repository.${repo//[-.]/_}
}
" >> repo-import.tf
done

これを実行すると、repo-import.tfにimport blockが生成されます。

# repo-import.tfの例
import {
  id = "repo1"
  to = github_repository.repo1
}

import {
  id = "repo2"
  to = github_repository.repo2
}

リソースの生成

terraform plan -generate-config-out=repo.tf
terraform apply -auto-approve

これでrepo.tfにリソースが生成されます。

それでは良きGitHubライフを!

Discussion