amazon-s3 - 使用 Terraform 工作空间时未创建 S3 状态文件
问题描述
我正在为我的 Terraform 脚本使用 S3 后端:
terraform {
backend "s3" {
bucket = "mybucket"
key = "path/to/my/key"
region = "us-east-1"
}
}
如果我使用多个工作区,我所有工作区的状态是否会存储在上述 S3 后端状态文件中?
我尝试创建 2 个工作区,但状态文件甚至没有在上面提到的 S3 存储桶上创建。
我错过了什么?
解决方案
Terraform 将根据您使用工作区键前缀选择的工作区在存储桶中创建状态文件,默认设置将为您提供如下内容:
env:/<my workspace>/path/to/my/key
这意味着如果您运行terraform workspace select <my workspace>
并且terraform apply
所选工作区的状态文件将最终出现在上述文件夹中。
但是,要在 S3 存储桶上存储状态,您需要自己创建 S3 存储桶(Terraform 期望它存在)。
您可以使用以下命令:
aws s3 mb s3://<my bucket> --region <my region>
aws s3api put-bucket-versioning \
--region <my region> \
--bucket <my bucket> \
--versioning-configuration "Status=Enabled"
aws s3api put-public-access-block \
--region <my region> \
--bucket <my bucket> \
--public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
Terraform 还建议使用 DynamoDB 表进行锁定,您可以像这样创建它:
aws dynamodb create-table \
--region <my region> \
--table-name <my dynamodb lock table> \
--attribute-definitions AttributeName=LockID,AttributeType=S \
--key-schema AttributeName=LockID,KeyType=HASH
您需要在后端配置中添加 DynamoDB 锁定表的名称,然后使用dynamodb_table = "<my dynamodb lock table>"
.
推荐阅读
- express-session - 使用快速会话未收到任何 cookie 作为响应
- azerothcore - 使用 master 分支的最新更新更新 Azerothcore
- node.js - 从 AWS S3 ORC 格式数据库中读取节点中的数据
- eclipse - Eclipse 中的 Perl EPIC:尝试运行 Perl 脚本时如何摆脱这个 Ant Build 对话框?
- php - 我想在 php 中创建一个简单的日志文件,该文件存储有关软件中发生的一切的所有信息?
- reactjs - React Create App 中的 npm build 和 babel 问题
- python - _tkinter.TclError:无法连接以在绘图中显示“:0”
- timestamp - addHours,addMinutes 函数在 Azure 数据工厂中不起作用
- python - 未找到 在服务器上未找到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试。烧瓶
- c# - 怎么等到使用 selenium webdriver 重新加载部分?