前回の続きから・・・
今回は複数人で同じ環境を変更する際に必要な対応になります。
前回gitignoreにて、しれっと管理外にした「*.tfstate」ファイルですが、これが重要になります。
こちらのファイル何かというとJSON形式で実際に設定した詳細な情報がかいてあります。
作成したユーザーのアクセスキーとかも記載されているので取扱いは注意が必要。
下記の設定を行うとapplyした際にS3に保存するという動きに変わり、ローカルに残さないようになります。
設定方法については以下を参考にしました。
Terraform v0.11でAmazon S3 backendを使ってtfstateファイルを管理する
https://qiita.com/marshmallow911/items/e8c05f580d07451fcf5e
TerraformのBackend機能を利用して.tfstateを管理する
https://qiita.com/siro33950/items/1b94bc8234c46e440057
修正点
- アクセスキーの管理を環境変数にしないと上手く動作しませんでした。
- terraform.tfvarsを削除
- envファイルの作成
AWS_ACCESS_KEY_ID=**********************
AWS_SECRET_ACCESS_KEY=**********************
AWS_DEFAULT_REGION=ap-northeast-1
- main.tfを編集
terraform {
required_version = ">= 0.11.7"
backend "s3" {
bucket = "terraform-state-bucket" <- ユニークなるように変更
key = "terraform.tfstate.aws"
}
}
provider "aws" {
}
- シェルが環境変数を読み込むように編集
#!/usr/bin/env bash
set -eu
SCRIPT_DIR=$(cd $(dirname $0); pwd)
cd $SCRIPT_DIR/../
docker run --env-file $(pwd)/aws/.env -i --rm -t -v $(pwd)/aws:/aws -w /aws hashicorp/terraform:light $@
AWSコンソールを利用してS3にバケットを作成
main.tf内で設定したバケットを作成
例: "terraform-state-bucket"
作成時にバージョニングを設定しておくといいようです
実行
$ sh bin/terraform_aws.sh init
ハマったところ
S3バケットを作り直したくなった...
terraform {
required_version = ">= 0.11.7"
backend "s3" {
bucket = "terraform-state-bucket" <- 変更
key = "terraform.tfstate.aws"
}
}
provider "aws" {
}
バケットが見つからないというエラーで何もできなくなった
設定の再構築コマンドを実行する必要があります。
sh bin/terraform_aws.sh init --reconfigure
再構築して、applyしたら既に存在するというエラーが出た
terraform.tfstate.aws を新しいバケットにコピー
※自分は失敗して消してしまい検証できていないです