👋
docker-composeでTerraform実行
このページについて
hashicorp/terraform
のdocker imageを使って、docker-composeでTerraform実行させます。
環境
- Docker Desktop 4.12.0
- docker-compose 2.10.2
- aws-cli 2.7.27
- direnv 2.32.1
AWS環境構築の場合
docker-compose.yaml
version: "3"
services:
terraform:
image: hashicorp/terraform:X.X.X
volumes:
- ~/.aws:/root/.aws:ro
- ./:/workdir
working_dir: "/workdir"
environment:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_SESSION_TOKEN
- AWS_REGION
- AWS_DEFAULT_REGION
- AWS_PROFILE
image
hashicorp/terraform
のtagでTerraformバージョンを指定します。
volumes
AWSの認証情報( ~/.aws
)をReadOnlyでマウントします。
実行するディレクトリにはtfファイルが配置されている想定で、tfファイルをworking_dirにマウントします。
environment
必要なパラメータに応じて設定します。
以下のdirenvの設定も参考までに。
direnvの設定
AWSの認証情報を以下のように設定することも可能ですが、誤って .envrc
ファイルをgitにあげてしまうリスクがあります。
.envrc
export AWS_ACCESS_KEY_ID=AKIXXXXXXXXXXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
export AWS_DEFAULT_REGION=ap-northeast-1
そのため、基本的には AWS_PROFILE
のみを指定しておくことを推奨します。
.envrc
export AWS_PROFILE=sample-project
アクセスキー、シークレットアクセスキーは以下のように、 ~/.aws/credentials
に記載しておきます。
~/.aws/credentials
[sample-project]
aws_access_key_id = AKIXXXXXXXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
コマンド実行
tfファイルが配置されているディレクトリで、docker-compose実行します。
terraform plan
$ docker-compose run --rm terraform plan
terraform apply
$ docker-compose run --rm terraform apply
New Relic設定の場合
TerraformでNew Relicの設定をする場合に必要な設定は以下となります。
- direnv
.envrc
export TF_VAR_new_relic_account_id="アカウントID文字列"
export TF_VAR_new_relic_api_key="APIキー文字列"
export TF_VAR_new_relic_region="US"
export TF_VAR_NEW_RELIC_API_SKIP_VERIFY=true
- terraform
provider.tf
variable "NEW_RELIC_ACCOUNT_ID" {}
variable "NEW_RELIC_API_KEY" {}
variable "NEW_RELIC_REGION" {}
variable "NEW_RELIC_API_SKIP_VERIFY" {}
provider "newrelic" {
account_id = var.NEW_RELIC_ACCOUNT_ID
api_key = var.NEW_RELIC_API_KEY
region = var.NEW_RELIC_REGION
insecure_skip_verify = var.NEW_RELIC_API_SKIP_VERIFY
}
- docker-compose
docker-compose.yaml
version: "3"
services:
terraform:
image: hashicorp/terraform:X.X.X
volumes:
- ~/.aws:/root/.aws:ro
- ./:/workdir
working_dir: "/workdir"
environment:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_SESSION_TOKEN
- AWS_REGION
- AWS_DEFAULT_REGION
- AWS_PROFILE
- TF_VAR_NEW_RELIC_ACCOUNT_ID
- TF_VAR_NEW_RELIC_API_KEY
- TF_VAR_NEW_RELIC_REGION
- TF_VAR_NEW_RELIC_API_SKIP_VERIFY
tfstateをS3に置く場合もあるため、AWS認証情報については必要に応じて設定します。
変数について
insecure_skip_verify
を使用して自己証明書の認証をスキップしないと、terraform applyでエラーになります。
Error: POST https://api.newrelic.com/graphql giving up after 1 attempt(s): Post "https://api.newrelic.com/graphql": x509: certificate signed by unknown authority
Datadog設定の場合
TerraformでDatadogの設定をする場合に必要な設定は以下となります。
- direnv
.envrc
export TF_VAR_api_key="APIキー文字列"
export TF_VAR_app_key="APPキー文字列"
- terraform
provider.tf
variable "api_key" {}
variable "app_key" {}
provider "datadog" {
api_key = var.api_key
app_key = var.app_key
}
- docker-compose
docker-compose.yaml
version: "3"
services:
terraform:
image: hashicorp/terraform:X.X.X
volumes:
- ~/.aws:/root/.aws:ro
- ./:/workdir
working_dir: "/workdir"
environment:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_SESSION_TOKEN
- AWS_REGION
- AWS_DEFAULT_REGION
- AWS_PROFILE
- TF_VAR_api_key
- TF_VAR_app_key
tfstateをS3に置く場合もあるため、AWS認証情報については必要に応じて設定します。
TF_VAR_name
参考記事
GitHubで編集を提案
Discussion