问题描述
我有terraform堆栈,该堆栈在DynamoDB中保持锁定:
terraform {
backend "s3" {
bucket = "bucketname"
key = "my_key"
encrypt = "true"
role_arn = "arn:aws:iam::11111111:role/my_role"
dynamodb_table = "tf-remote-state-lock"
}
}
当我运行terraform workspace new test
时,它失败,并出现(相当误导)错误:
Failed to lock s3 state: 2 errors occurred:
* ResourceNotFoundException: Requested resource not found
* ResourceNotFoundException: Requested resource not found
如果我打开TF_LOG=DEBUG
,则会看到400 Bad Request
(更多详细信息on pastebin)
我在做什么错以及如何解决?
解决方法
可能您没有创建AWS资源。 documentation说了有关s3存储桶的以下内容:
这假设我们创建了一个名为mybucket的存储桶。
我认为第二条消息来自未创建或配置不正确的DynamoDb表。该文档介绍了以下有关使用DynamoDb进行锁定和保持一致性的信息:
,dynamodb_table-(可选)用于状态的DynamoDB表的名称 锁定和一致性。该表必须具有一个名为 带字符串类型的LockID。如果未配置,则状态锁定为 禁用。
解决方案:terraform workspace whatcoever
应该仅在terraform init
之后朗姆酒。如果已设置TF_WORKSPACE
,则在tf init
期间可能会出错,提示工作空间尚不存在,因此您可能会在tf ws new
之前尝试朗姆酒tf init
。不要这样做,只需在TF_WORKSPACE
之后才设置tf init
。