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のバージョン指定 / バックエンドの設定をしています
-
バージョン指定
Terraformは現在も開発が継続されており、頻繁にバージョンアップが実施されています
バージョンによってはリソースの構文が大きく変わっている可能性があり、既存定義がエラーとなる可能性があります
それを回避するために実行バージョンを指定します -
バックエンド指定
基本ページに記載したとおり、
terraform.tfsate
には実行時のリソースの構成情報が追記されている
通常、作成した場合はローカル環境にterraform.tfstate
が出力されます
git等を利用してバージョン管理を実施したいところですが、コンフリクト等が発生すると正しくリソースが作成できません
そこでプロバイダに準じた環境へバックエンドを指定することが推奨1されています
AWS環境ではS32 / DynamoDB等を指定し、そこでterraform.tfstate
を管理します
provider "aws" {}
ProviderにAWS環境を指定する場合の認証情報を定義します
-
認証情報
AWSへの各種操作を実施するための認証情報を記載します
IAMロールがアタッチされたインスタンスやCloudShellのような環境であれば、リージョンのみを指定すれば動作します
AssumeRoleやprofileなどで認証情報を管理している場合には、shared_credentials_file
でcredentialファイルを、profile
でプロファイルを指定します
留意事項
Providersにもvariables.tf
を利用すれば、変数を指定できそうだが指定するとエラーとなります
環境ごとに設定を変更したい等の変数を使用したい場合は、以下の方法で対応します
- ハードコーディング
terraform init
を実行する際にオプション-backend-config
で指定します
■実行例
$ terraform init -backend-config='key=aaa/bbb/terraform.tfstate'
これでprovides.tfに記載のバケットに対して、引数で渡したkey情報が付与される
-
https://blog.gruntwork.io/how-to-manage-terraform-state-28f5697e68fa ↩
-
バージョニングを有効にして利用する ↩