使用Terraform在AWS上构建环境的方法(利用后端功能)
从上次的故事继续…
本次将讨论在多人共同修改同一个环境时所需做出的响应。之前在gitignore中,将“*.tfstate”文件无意中排除在版本管理之外,但这实际上非常重要。
這個文件裡面實際上寫有詳細的設定信息,格式是JSON。它還記錄了所創建使用者的訪問金鑰,因此需要小心處理。
进行以下设置后,在应用时会将其保存到S3,并且不再保留在本地。
我参考了以下的设置方法。
使用 Terraform v0.11,借助 Amazon S3 backend 来管理 tfstate 文件。
参考链接:https://qiita.com/marshmallow911/items/e8c05f580d07451fcf5e
使用Terraform的后端功能来管理.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" {
}
- 编辑Shell以加载环境变量。
#!/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” 的存储桶。
假设在创建时设置版本控制会有好处。
进行活动
运行以下命令初始化 AWS 的 Terraform:
$ 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
使用以下命令进行本地化转换:
运行 bin/terraform_aws.sh init –reconfigure
重新构建后,应用发生错误,提示已存在。
将 terraform.tfstate.aws 复制到新的存储桶中。
*我在尝试中出错并且无法进行验证。