今週の初めくらいからちょっとずつ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のループの書き方はちょっととっつきにくさを感じる(慣れてないだけだと思う)
- 既存のプログラミング言語のなかで自由に書けるわけではない、という点はCloudFormationのほうが近い
- 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ファイルになったと考えるとそんなに違和感ない
- CloudFormationでは状態の管理や差分検出をAWS側でやってくれているけど、Terraformの適用先はAWSに限らないので状態をファイルに書き込んで管理している
今見返すとどこを見ればよさそうかわかるものでも、本当に前提知識がないときには、どこが自分と関係あるか判別しにくい。
公式サイトには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ツールがあると便利そう。