Open1

Terraformの基礎流し読み

IsTre1592IsTre1592

3章:Terraformステートを管理する

  • Terraformのステートとは何か
    • Terraformで構築された現在のインフラの状態を管理するJSONファイル
    • 個人プロジェクトであればローカルのterraform.tfstateで管理できる
    • だが、チームでステートを管理する場合は以下問題が生じるため対応が必要
      • チームで共有できる場所にステートファイルを置く必要がある
      • 同時に操作してデグレを起こさないようファイルロックできる必要がある
      • 環境ごとにファイルを適切に分離できる必要があある
  • ステートファイルの共有ストレージ
    • バックエンドという共有ストレージでステートを管理する方が以下の理由で良い
      • バックエンドの多くでサポートされているロックの機能で、他の開発者がステートに変更が入る操作をしている場合でも、自分の操作を待たせることができる
      • 送受信時やステートファイルの暗号化が可能なのでセキュリティ的にも安心
      • AWS S3などを利用していれば、AWS側の権限管理でファイルアクセスも制限できるため尚安心
    • 利用する際はバージョニングなどをして切り戻しできるようにしておくことが良い
    • AWSでバックエンドを利用する場合は、S3とDynamoDBの各種設定後にterraform initを実行する
      • そうすることでローカルのステートファイルがバックエンドにコピーされる
      • 以降はバックエンドのステートファイルがプルされてくる
  • ステートファイルの分離
    • ワークスペースによる分離
      • ステートをワークスペースという機能で分離できる
      • 但し、これはすべてのワークスペースのステートが同じバックエンドに保存されるため、環境の分離においては不適切な場合が多い
    • ファイルレイアウトによる分離