Terraform Provider를 Terraform Registry에 게시

7865 단어 Terraform
이 문서는 terraform Advent Calendar 2020의 마지막 날입니다.

개요



크리스마스 당일이므로 크리스마스 트리를 기기에 Provisioning합니다.
모처럼이므로 Provider를 구현해, Terraform Registry 에 Publish 해, 그것을 이용해 Provisioning를 실시해 갑니다.

설명하기


  • Terraform Provider 구현 시작 방법
  • Terraform Provider 문서를 쉽게 작성하는 방법
  • Terraform Registry에 Provider를 Publish하는 방법

  • 설명하지 않는 것


  • Terraform Provider의 상세한 구현 방법

  • Setup and Implement Read | Terraform - HashiCorp Learn에서 읽기 시작하면 좋다고 생각합니다.


  • 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에 게시



    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

    대상 리포지토리에 GPG_PRIVATE_KEY, PASSPHRASE의 두 개의 보안을 등록해야합니다. (등록하기 전의 순서는 이후에 설명합니다.)

    Terraform Provider를 Publish하는 흐름은 다음과 같습니다.
    Terraform Registry - Publishing Providers - Terraform by HashiCorp

    GPG 키가 없는 경우


    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에 푸시하면 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를 게시할 수 있습니다.

    구현한 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
    

    모처럼 색의 설정을 했으므로 실행 결과의 화상을 첨부합니다.


    참고


  • hashicorp/terraform-provider-scaffolding: Quick start repository for creating a Terraform provider
  • Terraform Registry - Publishing Providers - Terraform by HashiCorp
  • hashicorp/terraform-plugin-docs: Generate and validate Terraform plugin/provider documentation.
  • fileexists - Functions - Configuration Language - Terraform by HashiCorp
  • 좋은 웹페이지 즐겨찾기