Terraform Provider for Azure の
開発と貢献方法


Tatsuro Shibamura @shibayan

自己紹介

芝村 達郎 @shibayan

今日は Terraform Provider for Azure の話

Terraform Provider for Azure について

  • Azure のリソースを Terraform で管理するために使います
  • https://github.com/hashicorp/terraform-provider-azurerm でアクティブに開発中
    • リポジトリのホスト元が変わりました (terraform-providers => hashicorp)
    • 主にコミュニティドリブンで開発されてます
  • azurerm は Resource Manager API を使っていることを表しています
    • 昔は terraform-provider-azure もあった

Azure における IaC 向けツールの選択肢は地味に多い

  • Azure ネイティブサポートの ARM Template
  • 最終的に ARM Template にコンパイルされる DSL の Bicep
  • 汎用言語でリソースを定義できる Pulumi
  • 喋ってる人は Terraform と Terraform Cloud が大好きです

よく耳にする不満

  • 😢 他の IaC 向けツールに比べて新サービス・新機能に対応するのが遅い
    • ARM TemplateBicep はタイムラグなしで新機能が利用可能
    • Pulumi は API 定義からの自動生成になったのでタイムラグが最小限
    • Terraform は Provider の対応を待つ必要がある
  • 😢 対応していない機能が多い
    • Terraform では利用頻度の低い機能は対応が遅れがち

新サービス・新機能に対応するのが遅い

Terraform Provider における新サービス・機能の追加の流れ

  1. 🛠️ 新しいサービス・機能が実装される
  2. 📝 Azure REST API 定義 (Swagger) が更新される <= (Bicep / Pulumi はここで OK)
  3. 🛠️ 更新された API 定義を元に Azure SDK for Go が更新される
  4. 📝 Terraform Provider に新リソース・プロパティが追加される
  5. 🎉 新しいバージョンの Terraform Provider がリリース

Terraform Provider での対応が遅れる理由

  • ⏱️ API 定義の更新から Azure SDK の更新までにタイムラグがある
    • 平均して数週間遅れでリリースされている
  • 💪 新リソースの追加にはテストケースを含め作業が多い
    • リソース定義・単体テスト・受け入れテスト・ドキュメントなど
  • 😫 そもそも Azure REST API と API 定義の出来が悪い
    • API 定義にミスがあることも多い
    • 一貫性のない API 設計になっていることが多い
    • Terraform Provider で Azure REST API のダメな部分をカバーしている

要するに Azure REST API の設計が悪い
(ことが多い)

対応していない機能が多い

古いリソースほど抜け漏れが出てしまう

  • メンテナーが Azure 全てのアップデートを知っているわけではない
    • 新しく追加された機能は Issue や PR が無いとそもそも気付かれない
  • 特に Azure Storage や App Service は多い傾向(歴史が長い)
  • プロパティの追加だけで解決出来るので、簡単に貢献できる!
    • 必要な機能が無ければ Issue を作成し、PR を投げています

Terraform Provider へ貢献したい方へ

  1. Issue を作成して Reaction をたくさん集める(誰でもできる!)
  2. ドキュメントの typo やプロパティの記載漏れを修正(簡単!)
  3. 既存リソースへ新しいプロパティを追加(Azure の知識があれば簡単)
  4. 新規リソースを追加(Azure と Provider 両方の知識が必要、難しい)
  • 喋ってる人は主に 23 を行っています
    • 受け入れテストの実行には実際にリソースを作成するのでお金がかかる 💸

Terraform Provider への貢献の例

  • Azure App Service のゾーン冗長向けプロパティをほぼタイムラグなく追加

h:400 center

PR がスムーズにマージされると嬉しい

h:500 center

開発環境を用意しよう

まとめ

Terraform Provider for Azure への貢献は簡単!
(Issue を上げないと気付かれない!)

ご清聴ありがとうございました