hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

Terraform歴4時間くらいのメモ

今週の初めくらいからちょっとずつTerraformを触っていて、といっても1日30分とか1時間くらいで手探り状態だけど、今のところの理解のメモ。

  • AWS CDKとなにがちがうか
    • CDKはCloudFormationのYAMLを生成するためのもので、TypeScript, Pythonに対応していて、TypeScriptならTypeScriptの補完が使える
    • TerraformはHCL(HashiCorp Configuration Language)という言語であって、補完はHCL用に開発されたものが動く
      • VSCode拡張が乱立していて、HashiCorp製の拡張はインストール数は多く評価は低い、という謎な状況
    • AWS CDKはAWSだけど、Terraformは汎用的なものなので、GitHubのorgの管理とかもできる
  • CloudFormationとの違い
    • 既存のプログラミング言語のなかで自由に書けるわけではない、という点はCloudFormationのほうが近い
      • Terraformのループの書き方はちょっととっつきにくさを感じる(慣れてないだけだと思う)
  • stateファイル
    • CloudFormationでは状態の管理や差分検出をAWS側でやってくれているけど、Terraformの適用先はAWSに限らないので状態をファイルに書き込んで管理している
      • 毎回APIを取りに行って差分を見るのは非効率なので、Terraformで管理するなら、一度取得した状態を保持しておいても困ることはない
      • CloudFormationにはドリフトの検出機能があった。Terraformではrefreshしてplanを見る
      • Detecting and Managing Drift with Terraform
    • applyしなければ安全というわけではなくて、importするとstateにリソースが追加される。手元で試しているだけでもstateファイルに書き込んでしまうと他人の環境に影響が出る
      • stateがどこにあるか注意すること
      • 一時的に手元でimportを交えた練習なんかをしたいときに、backend s3をbackend localに書き換えて試していてちょっと格好悪い。なんかいい方法ないのかな…
    • lockを取って作業することができる
      • CloudFormationのスタックも、いまUPDATE_IN_PROGRESSで止まってるね、とかみんなで観測したりしていたので、それがS3に置かれる1ファイルになったと考えるとそんなに違和感ない

今見返すとどこを見ればよさそうかわかるものでも、本当に前提知識がないときには、どこが自分と関係あるか判別しにくい。
公式サイトにはintroがあったりtutorialがあったりして、どこから見ていけばいいかわからないな、となったので本を読んでみたら、AWSにあれこれ構築するとか、モジュールを作るとか、環境の管理とか、ステートファイル間のリソースの移動とか教えてもらえてよかった。

追記

ブコメで教えていただいた、ありがとうございます

Terraformのlanguage server公式のlanguage serverが後発なので云々 詳しくは https://github.com/hashicorp/terraform-ls#terraform-ls-vs-terraform-lsp

https://b.hatena.ne.jp/michael26/20201019#bookmark-4692956382982889602

追記(2)

Spaceliftの方からメールが来て、このチュートリアルが読者にも役立つと思うよ!とのことだったので貼っておきます。
spacelift.io

SpaceliftはTerraformを実行してくれるCIサービスみたいなもののようです。
我々も手元からはplan, applyしてないので、こういうCI/CDツールがあると便利そう。