Terraform Cloudを使ってみた

jagaNikumanPosted by

この記事は GRIPHONE Advent Calendar 2021 22日目の記事です。
今回はTerraform Cloudを使ってみたため、その理由や使ってみて感じたことについて書きます。

本記事とは関係ないですが、中断されていたライブが最近開催されるようになってきて人生が充実してきました。ライブっていいですよね、最高です。

Terraform Cloudとは

この記事を見ている方々には説明が不要かもしれませんが、ざっくり紹介すると

  • Hashicorp社が提供するTerraformのSaaS
  • Backendに指定することでCloudにstateを預けられる
  • その他色々便利な機能がついている
    • 依存関係, VCS連携など

といったサービスになります。

ざっくりUIの紹介として、ドキュメントからの引用ですがこのようにworkspaceの一覧があったり、

Workspace一覧

Plan/Applyの結果をWebUIから確認できたり、

Plan/Applyの実行履歴
Plan/Applyの詳細なログ

Plan/Apply時に使用するSecretを登録することなども出来ます。

Secret・Variablesの管理画面

また、他にも色々な機能があります。

Terraform Cloudを一部で使用している理由

理由としては、大まかに以下の3つがありました。

  • State用Bucketの置き場所に困るリソースがあった
  • Plan/Applyのログが残るのが良い
  • SREチームの人数的にギリギリFree Planに収まる

まずState用Bucketの置き場所に関してですが、Project依存のリソースであればそのProjectのGCSにState用Bucketを作るのが個人的にはスッキリすると思っています。
ただ、例としてGCPなどのOrganizationリソースやProject、 Billingリソースはプロジェクト依存のリソースではないため上記の考え方だとStateを置く場所が無くなってしまいます。
その際によくあるのは、そういったリソース用に適当な場所にGCSを用意して共有State置き場みたいなものを作ったり、Gitに乗せて管理することがあると思います。

となると、その共有GCSを管理するTerraformのstateはどこへ・・・?という話になり、鶏卵の話になってしまい、そして結果手で作ってimportするとか言う話になります。

今回はそのようなケースに対して、Terraform Cloudを使うことでStateをCloudで保管して解決することを手段として選んだのが大きなTerraform Cloudを採用した理由になります。

次に、Plan/Applyのログが残るですが、これは副次的な理由であったら嬉しいよね程度の理由です。
SlackやGitHubのPRにPlan結果を載せたり、コケたときにログを貼るようなことをやっていたため、その手間が省けるのは少し嬉しい点です。

最後にギリギリFlee Planで収まる人数という話ですが、これは少し大きいかもしれません。
Terraform CloudはFree planの次の課金段階は$20 per UserとなりGoogle Workspaceよりも高い値段で、他のSaaSよりもユーザ単価は群を抜いて高いのではないでしょうか。そのため、軽い理由で使うのは使うのは気が引けてしまいます。
ただ、人数的にFree planで収まるのであればとりあえず使ってみて、SREの人数が増えたりしたときにTerraform Cloudを継続するかどうかは考えるとして、とりあえず使ってみようという決断になりました。

これらが弊社でTerraform Cloudを採用した理由になります。

Terraform Cloudを使って感じたpros, cons

ここからは使ってみたお気持ちの話になります。 ざっくりのpros, consとしては、

  • pros
    • State用Bucketを用意しなくて良い
    • Terraform Cloud側でロックが管理される
    • SecretをCloud側で統一的に管理できる
    • Plan/Applyのログが残る
    • 依存関係を設定して自動で別WorkspaceのApplyをTrigger出来る
    • UIが使いやすくおしゃれ
  • cons
    • PRにPlan結果を貼ってくれない
      • Terraform CloudへのURLはある
    • 値段が高い
      • $20 per User
    • 無料だと割と遅い

pros

まずState用Bucketに関しては既に述べているので飛ばしますが、ロックの管理やSecretの統一的な管理、Plan/Applyのログが残るなどは細かいですが重要な機能だと思います。
ここらへんをSaaSに頼ることが出来るのは、IaaSがしたいだけであってTerraformに労力を割きたくない場合には良いのではないでしょうか。

また、依存関係のTriggerに関しては弊社では使っていないのですが、stateを分割してremote_stateを利用している場合などは自動で別のTerraformもApplyしたくなるときがあるのではないでしょうか。
そういうときに力を発揮する機能があったりしてSaaSらしいメリットだと思います。

あとは言わずもがな、UIが使いやすくおしゃれなのはいいですね、使っていて気持ちが良いです。重要なところですね。

cons

Terraform CloudにはVCS連携として、GitHubと連携してPRなどをTriggerとしてPlan/Applyを走らせてくれる機能があります。
ただ、この機能ではPRにTerraform Cloudのリンクを張ってくれますがPlanの結果自体は貼ってくれないようです。
そのため、PRをレビューする際にはリンクを踏んで、時にはログインを挟んでやっとTerraform CloudのWebUI上でPlan結果が見れます。
わずか数ホップですがこれが意外と面倒くさくデメリットだなーと思いました。

次に値段が高いという話ですが、$20ということで単純に他のサービスと比較するとGoogle WorkspaceやいろいろなIDaaSととんとん、それか高い値段だと思います。
そのため結構導入に慎重になるというか、躊躇するポイントだと思います。実際に値段が理由でTerraform Cloudをやめている方もいらっしゃいますし、我々のチームも人数が増えた場合はこの点について改めて考える必要があります。
個人的にはユーザ数課金ではなくWorkspace数課金のほうが納得行くなと思いましたが、そうなるとstateの分割に対してお金の話が入ってきてしまうのでこれまた微妙だなと思いました。

最後に無料の場合は割と遅いという話ですが、Free planのくせに文句言うんじゃないという意見はごもっともです😇
一応感想を述べておくと、refreshが手元のPCでやる場合と比べて数秒で終わるものが20秒ほどかかったりします(すみません、感覚値です)。
ただ、ドキュメントを読んだ感じだと有料planにすると早くなるといった記述もなさそうに見えたので、実際に課金する場合は要調査かと思います。

まとめ

今回の記事ではTerraform Cloudを採用した理由、使って感じたお気持ちを書いてみました。
Terraform Cloudは少し値が張りますが、細かい機能などを見ると流石SaaSだなと思うくらいには機能があります。
そのため、ぜひ皆さん検討してみてはいかがでしょうか。

明日はSenKさんの “PHP8のJITコンパイラについて” です。
JITはPHP8の目玉機能であるため必見の記事ですね!🙌

少し早いですが、皆さん良いお年を!