コンテンツにスキップ

Terraform - Providers

概要

providers.tfに記載すべき内容について、詳細をまとめたページです
主にterraform {}provider "aws" {}についての記述内容や留意事項を記載します

全体像

terraform {
    required_version = ">=0.13"
    backend "s3" {
        bucket                  = "backet"
        region                  = "ap-northeast-1"
        shared_credentials_file = "$HOME/.aws/credential"
        profile                 = "xxx"
    }

}

provider "aws" {
  shared_credentials_file = "$HOME/.aws/credential"
  profile                 = "yyy"
  region                  = "ap-northeast-1"
}

terraform {}

Terraformのバージョン指定 / バックエンドの設定をしています

  1. バージョン指定

    Terraformは現在も開発が継続されており、頻繁にバージョンアップが実施されています
    バージョンによってはリソースの構文が大きく変わっている可能性があり、既存定義がエラーとなる可能性があります
    それを回避するために実行バージョンを指定します

  2. バックエンド指定

    基本ページに記載したとおり、terraform.tfsateには実行時のリソースの構成情報が追記されている
    通常、作成した場合はローカル環境にterraform.tfstateが出力されます
    git等を利用してバージョン管理を実施したいところですが、コンフリクト等が発生すると正しくリソースが作成できません
    そこでプロバイダに準じた環境へバックエンドを指定することが推奨1されています
    AWS環境ではS32 / DynamoDB等を指定し、そこでterraform.tfstateを管理します

provider "aws" {}

ProviderにAWS環境を指定する場合の認証情報を定義します

  1. 認証情報

    AWSへの各種操作を実施するための認証情報を記載します
    IAMロールがアタッチされたインスタンスやCloudShellのような環境であれば、リージョンのみを指定すれば動作します
    AssumeRoleやprofileなどで認証情報を管理している場合には、shared_credentials_fileでcredentialファイルを、profileでプロファイルを指定します

留意事項

Providersにもvariables.tfを利用すれば、変数を指定できそうだが指定するとエラーとなります
環境ごとに設定を変更したい等の変数を使用したい場合は、以下の方法で対応します

  1. ハードコーディング
  2. terraform initを実行する際にオプション-backend-configで指定します
    ■実行例
    $ terraform init -backend-config='key=aaa/bbb/terraform.tfstate'
    これでprovides.tfに記載のバケットに対して、引数で渡したkey情報が付与される

  1. https://blog.gruntwork.io/how-to-manage-terraform-state-28f5697e68fa 

  2. バージョニングを有効にして利用する