LoginSignup
7
7

More than 3 years have passed since last update.

Terraform Tips

Last updated at Posted at 2019-11-17

スクリプト

バージョンを固定する

  • 環境差異によるトラブルを防ぐために必ず記載する
terraform {
  required_version = "= 0.12.12"
}

プロバイダバージョンを固定する

  • AWSを使う場合は下記の通り
  • プロバイダバイナリは進化が早く環境差異が生じやすい
provider "aws" {
  version = "= 2.35.0"
}

コマンドライン

コードフォーマット

  • -recursiveオプションで再帰的にフォーマットしてくれる
$ terraform fmt -recursive

バリデーション

  • 構文エラーをチェックしてくれる
  • これは再帰的には実行されない
  • $ terraform initを実行した後にやる
$ terraform validate

オートコンプリート

  • terraformコマンドを補完してくれるようになる
$ terraform -install-autocomplete

プラグインキャッシュ

  • $ terraform init時のプロバイダバイナリファイルをキャッシュできる

    • 設定しないと毎回ダウンロードされる
  • ホームディレクトリに.terraformrcファイルを作成し、以下を記載する

.terraformrc
plugin_cache_dir = "$HOME"/.terraform.d/置きたいディレクトリ
  • 対象のディレクトリを作成すればよい

TFLint

  • $ terraform plan時に発生するエラーを検出できる
  • brewでインストール
$ brew install tflint
  • tfファイルがあるディレクトリで$tfintを実行すればよい
  • 不正なインスタンスタイプなど、リソースに関する整合性を確認してくれる
  • オプションをつけると詳細情報が表示される
$ tflint --deep --aws-region=ap-northeast-1

tfenv

  • ディレクトリ毎に使用するTerraformのバージョンを変更できる
    • Pythonのpyenvに相当
  • プロジェクト毎に異なるバージョンを使用していることもあるので、ローカルの環境とバージョンを合わせましょう
    • バージョンの相違でtfstateが参照できなくなることがある
  • 詳細はこちら

tfstateファイル管理

  • tfstateファイルには、対象のリソースの状態が記載されている
  • デフォルトではローカルに保存されるが、チーム開発時に複数の環境から実行される場合は整合性が保てなくなる
  • また、ファイルが復元できなくなった場合にTerraformでの管理ができなくなってしまう

S3で管理

  • スクリプトに以下のようような記載をすることでtfstateファイルがS3で管理される
  • バケットとキーは自由に設定
terraform {
  backend "s3"{
    bucket = "store-waf-tfstate"
    key = "production/terraform.tfstate"
    region = "ap-northeast-1"
  }
}
  • これにより、実行のたびにS3上のtfstateファイルを確認→更新をしてくれる
  • バケットにバージョニング、暗号化、パブリックアクセス禁止の設定をしておく

Gitを使わない理由

  • Pullを忘れると整合性が合わなくなる
  • tfstateは平文で保存されるため、機密情報が入っている場合は危険
    • DBを作成するときは、ユーザー名やパスワードが記載される
  • S3にはバージョニング、暗号化、パブリックアクセス禁止の設定があり、安く可用性も高いためAWSではS3の使用が推奨されている

参考

7
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7