我使用S3后端为我的Terraform脚本:
terraform {
backend "s3" {
bucket = "mybucket"
key = "path/to/my/key"
region = "us-east-1"
}
}
如果我使用多个工作区,所有工作区的状态是否都存储在上面提到的S3后端状态文件中?
我尝试创建2个工作区,状态文件甚至没有在上面提到的S3桶上创建。
我错过了什么?
Terraform将在bucket中创建状态文件,这取决于您选择的工作空间,并带有工作空间密钥前缀,默认设置将给出如下内容:
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>"
。