LoginSignup
9
8

More than 3 years have passed since last update.

複数のAWSアカウントにterraformを実行する

Last updated at Posted at 2020-03-03

やりたいこと

terraform workspaceを使って、複数AWS環境にterraformを実行したい

前提

この記事ではhogeプロジェクトに対して、dev/stg/prdそれぞれの環境を別AWSアカウントに作りたいという前提にします。
また各アカウントでリソースを作成する権限をもったaccess_key / secret_keyはすでに払い出してもらっており、それをterraformを実行するマシンの$HOME/.aws/credentialsに保存しているものとします。

実装

最終的な実装は以下の様な形になりました。

~/.aws/credentials
[dev-hoge]
aws_access_key_id=AKIAXXXXXXXXXXXXXX
aws_secret_access_key=eD1vNSXXXXXXXXXXXXXXXXXXXXXXXXXXXX

[stg-hoge]
aws_access_key_id=AKIAXXXXXXXXXXXXXX
aws_secret_access_key=eD1vNSXXXXXXXXXXXXXXXXXXXXXXXXXXXX

[prd-hoge]
aws_access_key_id=AKIAXXXXXXXXXXXXXX
aws_secret_access_key=eD1vNSXXXXXXXXXXXXXXXXXXXXXXXXXXXX
provider.tf
terraform {
  backend "s3" {
    bucket                  = "<bucket_name>"
    key                     = "terraform.tfstate"
    region                  = "ap-northeast-1"
    dynamodb_table          = "<dynamo_db_table_name>"
    shared_credentials_file = "$HOME/.aws/credentials"
    profile                 = "dev-hoge"
  }
  required_providers {
    aws = ">= 2.43.0"
  }
}

provider "aws" {
  shared_credentials_file = "$HOME/.aws/credentials"
  profile                 = "${terraform.workspace}-hoge"
  region                  = "ap-northeast-1"
}

2つの権限が必要になります。
1. terraform stateの保存先であるS3を参照する権限
2. terraform実行時に対象になるアカウントに対してリソースを作成する権限
1は上のコードのterraform {} に対応し、2はprovider "aws"の部分に対応します。

ポイントとしては、terraformは${terraform.workspace}にそれぞれworkspaceの環境名を埋め込んでくれるので、ここで読むべきprofileを切り替えています。

実行

## 開発環境への適用
terraform workspace select dev
terraform plan
terraform apply 

## 検証環境への適用
terraform workspace select stg
terraform plan
terraform apply

## 本番環境への適用
terraform workspace select prd
terraform plan
terraform apply

以上です。
もっと違うやり方だったり、自分はこうしているなどありましたら教えて下さい。

9
8
0

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
9
8