Help us understand the problem. What is going on with this article?

Terraform Tips

スクリプト

バージョンを固定する

  • 環境差異によるトラブルを防ぐために必ず記載する
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

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の使用が推奨されている

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away