Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「Terraform ProviderはGoだけ?」PHPで覗いてみた

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest. →
Avatar for fumiyan fumiyan
October 02, 2026

「Terraform ProviderはGoだけ?」PHPで覗いてみた

Avatar for fumiyan

fumiyan

October 02, 2026

More Decks by fumiyan

Other Decks in Programming

Transcript

  1. 自己紹介 名前: Fumiya Sakurai / @fumiyan_e 所属: Sreake事業部 / Tech

    Branding Team 役割: SRE 出身地: 愛媛県松山市 2
  2. provider の役割 resource "aws_s3_bucket" と書いたとき、実際に AWS を叩いているのは Terraform 本体ではない terraform

    計画を立てる provider → provider を叩く API → AWS / Datadog リソース は Terraform とは別のプログラム 4
  3. Terraform の方針 "Go is currently the only programming language supported

    by HashiCorp for building Terraform providers." "...while it is technically possible to write providers in languages other than Go, our tooling, documentation, and ecosystem will all assume your provider is being written in and distributed as Go code for the time being." サポートする言語は Go だけ。ただし他の言語でも技術的には可能 出典: HashiCorp supported languages and libraries developer.hashicorp.com/terraform/plugin/best-practices/provider-code 5
  4. で書くには、何が必要か PHP で起動 → ← 標準出力に1行 exec terraform terraform-provider-php PHP

    のプロセス gRPC over HTTP/2 → PHP の中では gRPC フレーム解析 → msgpack デコード → リソース操作 → エンコードして応答 6
  5. 値は msgpack で渡す リソースの値は、protobuf の上では ただの bytes message DynamicValue {

    bytes msgpack = 1; bytes json = 2; } 中身は msgpack。作ってみないと決まらない値(IDなど)を表せるのは msgpack だけ Terraform の型に合わせて、自分で組み立てる 10
  6. まとまった仕様書は無い 公式に「Go以外でプラグインを書く方法」というガイドはある ガイド(全150行) TLS / cert / magic cookie という単語が

    0件 ハンドシェイクの仕様 公式が「not currently documented」と明記 値の変換の規定 リポジトリの1ファイルだけ 読んだのは、散らばった公式のコードとドキュメント 12