terraform
terraformはインフラを定義に沿ってデプロイしてくれるソフト
嬉しみ
環境をコピペで増やせる!!
環境設定をgit管理できる!!
色んなリソース間で設定値を引き回せる
サービスAの項目αの値をサービスBのβにコピペ、が宣言的に書ける
特徴
ディレクトリ構成、ファイル分割は自由。実行時にフラットに展開・統合される
1ファイルに全部を書くこともできるし、細かくファイルとディレクトリを分けることもできる
逆に使う側のセンスが大きく問われるやつ
「環境に何をデプロイしているか」の状態を持つ(Terraform State)
これはローカルのファイルとして置いたり、S3に置いたり、色々できる(Terraform Backend)
現環境と、これから適用しようとする変更の差分をdiff表示してくれる
プロバイダの癖により、実際には差分がないものが差分として出ることがある
問題ない差分を無視するスキルが必要
terraformは何でないか
AWSとGCPを抽象化するなんかではない
AWS用のプロバイダ、別サービスのプロバイダ、みたいにサービスごとの仲立ちをしてくれるものがある
それぞれの間に互換性はない。あるやつも存在するかもしれんけど。
アプリケーションのデプロイに使うツールではない
https://blog.recruit.co.jp/rmp/infrastructure/post-16931/
インフラの状態を定義するツール
インフラと、その上で動くアプリケーションは別のもの
概念
もの
HCL
Terraform State
Terraform Module
よいTerraform Moduleの特徴
Terraform Provider
Terraform Backend
tfvars
こと
ロック
Terraform Workspace
Terraform Remote State
コマンド
terraform init
terraform get
terraform plan
terraform validate
terraform apply
terraform destroy
terraform fmt
terraform import
terraform console
DSL
ブロック
resource:管理対象のリソースの定義
lifecycle:???
locals:Local Valuesの定義 →Terraformの変数
variable:Input Variablesの定義 →Terraformの変数
output:Terraform Moduleの戻り値に相当するもの。"${module.宣言名.output名}" みたいに参照できて、apply後に表示される。
module:Terraform Moduleの利用宣言
terraform:terraform本体や依存プロバイダーのバージョン要求を書ける。Terraform Backendの設定もここ。
data:データソースの定義。どこかにある設定を参照するためのもの。
provider:Terraform Providerの設定を書くところ。
Tips
Terraformの変数
Terraformのバージョン
Terraformのドキュメントの探し方
リソースの変更マーク
+ 作成
- 削除
~ 変更
-/+ 再作成(状態を持つリソースでは状態が失われる。要注意)
ファイル分割
拡張子.tfのファイルが自動的に読み込まれる
1ファイルに全部を書くこともできるし、細かくファイルとディレクトリを分けることもできる
Terraform Moduleは例外。
運用パターン
再利用可能部分をTerraform Moduleとし、環境と分ける。循環参照しないよう注意。
環境ごとのtfstateはディレクトリで分けるのが安牌。Terraform Workspaceもあるっちゃあるけど。
データを状態としてもつリソース(ex. RDB)はtfstateを分ける。誤ってデータを持たないリソースと一緒に消す恐れがある。
/icons/hr.icon
資料
公式
https://learn.hashicorp.com/terraform チュートリアル
https://www.terraform.io/language リファレンス
https://registry.terraform.io/ 公式レジストリ(プロバイダとモジュール)
入門
✅ https://zenn.dev/sway/articles/terraform_index_list とっつきやすいチュートリアル
Software Design 2022年1月号
実践
✅ https://qiita.com/minamijoyo/items/1f57c62bed781ab8f4d7
✅ https://qiita.com/minamijoyo/items/3a7467f70d145ac03324
✅ 実践Terraform 評判の良い同人誌が本になったらしい。発売は2019年、v0.12時代
https://techblog.kayac.com/terraform-import-easier
https://dev.classmethod.jp/articles/terraform-bset-practice-jp/
https://engineering.mercari.com/blog/entry/20220121-securing-terraform-monorepo-ci/
Tips
https://www.hashicorp.com/resources/terraform-practices-the-good-the-bad-and-the-ugly
https://dev.classmethod.jp/articles/2022-07-11-tfstate-backend-using-gitlab/
https://dev.classmethod.jp/articles/integrate-terraform-remote-state-hub/
https://cloud.google.com/docs/terraform/best-practices-for-terraform?hl=ja Google CloudのTerraform Tips