Open5

詳解Terraform Chap.3メモ

t_shunsuket_shunsuke

3.1

  • ステートファイルとは、AWS/GCP等にどういうリソースを作成したのか、設定値はどうなっているのかを記録するファイル。拡張子 .tfstate
  • このステートファイルとTerraformコードの差分が、planコマンドで表示される差分。
  • これによって扱う関心ごとは次の3つ
    • ステートの共有: 共同開発者間でステートを共有する
    • ステートのロック: 共同開発者間で同時に変更を実行しないように、変更中にはロックをかけて排他制御する
    • 環境別のステートの分離: dev/stg/prdのような環境別にステートを分離する
t_shunsuket_shunsuke

3.2

  • ステートをGitに管理するのは良くない
    • 最新のpush忘れ、ロックされない、シークレットがローカル保存される等の問題から
  • ローカル/リモートバックエンドを使う: GCPの場合、GCSを使うとよい。上記問題解決される。
  • AWSの場合、ロックにDynamoDBを使用するが、これは近いうちに廃止になる。: https://zenn.dev/terraform_jp/articles/terraform-s3-state-lock
  • GCSのバージョニングと合わせて、おかしくなった際にロールバック可能
t_shunsuket_shunsuke

3.3

  • バックエンドもTerraformで作成する場合、
    • バックエンドリソース作成 -> ローカルでapply実行 -> バックエンドを指定してterraform init
  • -backend-config を使うことによって、部分設定を行うことができる
t_shunsuket_shunsuke

3.4

  • ステートを分離する方法として、大方針2つがある。
    • ワークスペースによる分離: 同じ設定値でテスト環境を作るのに便利
    • ファイルレイアウトによる分離: 開発環境、本番環境といったものを分離するのに便利
    • 参考: https://zenn.dev/t_shunsuke/articles/164f2c4ff06584
t_shunsuket_shunsuke

3.5

  • terraform_remote_state: あるtfstateで管理されている情報を、別の環境(Terraform、ECSpresso等)から読み込むためのもの
    • 他から参照する値は output として出力してやると、参照しやすい。
    • アクセス制御には注意が必要。GCSの読み取り権限のコントロールとか。
  • 秘匿データをセキュアに扱う方法はchap.6で扱う。
  • TF_VAR_[変数名] の形式の環境変数で、変数を読み込むことができる
    • GitHub Actionsのシークレット等から注入する場合などに使用
  • ビルトイン関数が用意されている。: https://developer.hashicorp.com/terraform/language/functions