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 への貢献の例

center

開発環境を用意する

まとめ

Terraform Provider for Azure への貢献は簡単!

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