Introduce Terraform

Table of Contents

最近転職活動を少しやっていまして,その中でお断りされる理由が以下の 2 つです.

  1. パブリッククラウドの経験
    これはプライベートクラウドをばりばりやっている弊社ではどうしようもない.
    その代わり自社 DC 運用経験というのがあるわけですが,オンプレの「オ」の字も考えていない企業からしたらムダな経験ってワケですね.
  2. Terraform の経験
    パブリッククラウドの IaC を Terraform でやるなんてもう当たり前です.
    上述のとおりプライベートクラウドかつ自社向け PF が提供されているので,これまで利用する必要がありませんでした.

正直 Terraform というか構成管理については Python Fabric から始まり,Chef を利用しそこから Ansible に移行するまで実施していたので,やればできるだろぐらいに考えていました.
とはいえ Terraform の実務経験がないことに渋られるのもなんかムカついてきたので,チーム内で Terraform を利用することにしました.
利用するだけだと職務経歴書に書いても響かないと思うので,Provider の作成も実施しました.
今回は Terraform Provider を自作して導入してみた,ということで記事を書かせていただきます.

教材

以下のとおり進めるだけで簡単に Provider が作成できました.
資料が優秀.

Implement a provider with the Terraform Plugin Framework

テンプレートも GitHub にあるのでこれを clone して上の通り進めるだけです.

terraform-provider-scaffolding-framework

data から作成する

チュートリアルでも Implement data source があるのでそのまま進めば data から作成することになります.
data いらない resource から作るぜというのもできるのですが,data の場合は Read だけとりあえず実装すれば動くので雰囲気がつかみやすいです.
resource の場合は Read/Create/Update/Delete の 4 つ実装する必要があります.

Provider の配布

実務で Provider を作成するとコードは GitHub Enterprise に置くことになると思います.
Provider の配布ですが Registry を用意する必要があり,GitHub にとりあえずバイナリ置けば OK という感じではありません.
普通チームで利用することになると思うので,作成前にどのように Provider を共有するかは考えておいた方が良いです.

チーム内展開

もちろんチームメンバーは Terraform を利用したことがないのでここが一番つらかったです.
インフラエンジニアなので BGP/OSPF などのルーティングプロトコルを理解した上でアプライアンス機器の運用・管理するのが主務なのであり,Terraform テンプレートの作成を含むコードを書くというのに慣れていないメンバーがほとんどです.
Ansible はその点 yaml を利用しており,モジュールや何を記載するかなどの問題はありつつも,フォーマットで問題になることがありませんでした.
Terraform テンプレートというか hcl をみんなで書いていくというのは,かなり難易度が高いです.
初期導入ということで大きなインパクトがないところに利用しているため,ドキュメントを共有することでとりあえずは運用できている状態です.
このへんはどのように浸透させていくかまだまだ考えていたいと思っています.
(実はプライベートクラウドの IaC のために,Terraform を利用していこうという噂があったのでチーム内への導入はわりとすんなりできました.)

まとめ

職務経歴書には早速 Terraform って書こうと思います.