LoginSignup
8
1

More than 3 years have passed since last update.

Terraform Provider を Terraform Registry に Publish する

Last updated at Posted at 2020-12-24

本記事は terraform Advent Calendar 2020 の最終日の記事です。

概要

クリスマス当日なので、クリスマスツリーを端末にProvisioningします。
せっかくなのでProviderを実装して、Terraform Registry にPublishし、それを利用してProvisioningを行っていきます。

説明すること

  • Terraform Providerの実装の始め方
  • Terraform Providerのドキュメントを楽に作成する方法
  • Terraform RegistryにProviderをPublishする方法

説明しないこと

Providerを実装する

今回の成果物は cappyzawa/terraform-provider-christmas-tree です。

ロジックの実装

hashicorp/terraform-provider-scaffolding: Quick start repository for creating a Terraform provider を利用してProjectを作成すると簡単に実装を開始できます。

上記Templateの internal/provider ディレクトリを適宜修正することでProviderの実装ができます。

ドキュメントの執筆

examples ディレクトリを適宜修正しましょう。

修正後に以下のコマンドを実行することで docs ディレクトリの中身が更新されます。

go generate ./...

hashicorp/terraform-plugin-docs: Generate and validate Terraform plugin/provider documentation. が、terraform-provider-scaffolding/main.go at main · hashicorp/terraform-provider-scaffolding にて利用されているためです。

ProviderをTerraform RegistryにPublishする

ProjectのTemplateとして利用したhashicorp/terraform-provider-scaffolding: Quick start repository for creating a Terraform providerには、 TestやReleaseに利用するGitHub Actionsが含まれているのでそれをそのまま利用しましょう。

Releaseに利用するのは以下のファイルです。
terraform-provider-scaffolding/release.yml at main · hashicorp/terraform-provider-scaffolding

対象のRepositoryに GPG_PRIVATE_KEY, PASSPHRASE の2つのSecretを登録しておく必要があります。(登録するまでの手順は以降で説明します。)

Terraform ProviderをPublishするフローは以下が詳しいです。
Terraform Registry - Publishing Providers - Terraform by HashiCorp

GPG Keyが存在しない場合

gpg --full-generate-key

GPG Private Keyを取得する

gpg --armor --export-secret-keys [key ID or email]

出力結果を対象RepositoryのSecret: GPG_PRIVATE_KEYとして登録しましょう。
パスフレーズを設定した場合は Secret: PASSPHRASE も登録しましょう。

GitHubにReleaseを作成

v*.*.* の規則に沿うTagをうって、GitHubにPushするとよしなにReleaseが作成されます。
(GitHub Actions内で、GoReleaser - GoReleaser が実行されます)

Terraform RegistryにSigning Keyを登録する

gpg --armor --export "{Key ID or email address}"

この出力結果を User Settings > Signing Keys から登録します。

Publish

Publish Provider | Terraform Registry からナビゲーションに従って、対象のGitHub Repositoryを選択すると、Terraform ProviderのPublishができます。

実装したProviderを利用する

上記の手順を踏んでPublishされたProviderは以下になります。
cappyzawa/christmas-tree | Terraform Registry

これを利用して、端末にクリスマスツリーのProvisioningを行います。

versions.tf
terraform {
  required_providers {
    christmas-tree = {
      source = "cappyzawa/christmas-tree"
    }
  }
  required_version = ">= 0.13"
}
main.tf
resource "christmas-tree" "example" {
  path        = "/tmp/christmas-tree"
  ball_color  = "red"
  light_color = "white"
  star_color  = "yellow"
}

output "example" {
  value = fileexists(christmas-tree.example.path) ? file(christmas-tree.example.path) : ""
}

Merry Christmas!!

terraform init
terraform apply

せっかく色の設定をしたので実行結果の画像を添付します。
スクリーンショット 2020-12-14 0.43.12.png

参考

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1