带有 DynamoDB 后端的 terraform:创建新工作区时出现 400 Bad Request
Posted
技术标签:
【中文标题】带有 DynamoDB 后端的 terraform:创建新工作区时出现 400 Bad Request【英文标题】:terraform with DynamoDB backend: 400 Bad Request when creating new workspace 【发布时间】:2020-12-17 17:12:24 【问题描述】:我有在 DynamoDB 中保持锁的 terraform 堆栈:
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)
我做错了什么以及如何解决?
【问题讨论】:
您的帐户中是否存在该表?该角色可以访问它吗? 绝对是,是的。 【参考方案1】:解决方案:terraform workspace whatsoever
应该只在terraform init
之后朗姆酒。如果您设置了TF_WORKSPACE
,您可能会在tf init
期间出错,说工作空间尚不存在,因此您可能会在tf init
之前尝试朗姆酒tf ws new
。不要这样做,只需仅在tf init
之后设置TF_WORKSPACE
。
【讨论】:
【参考方案2】:您可能没有创建 AWS 资源。 documentation 对 s3 存储桶说了以下内容:
这假设我们创建了一个名为 mybucket 的存储桶。
我认为第二条消息来自未创建或未正确配置的 DynamoDb 表。该文档对使用 DynamoDb 进行锁定和一致性进行了如下说明:
dynamodb_table -(可选)用于状态的 DynamoDB 表的名称 锁定和一致性。该表必须有一个名为 带有字符串类型的 LockID。如果没有配置,状态锁定将是 已禁用。
【讨论】:
以上是关于带有 DynamoDB 后端的 terraform:创建新工作区时出现 400 Bad Request的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 localstack dynamoDB 锁定 terraform 状态:UnrecognizedClientException
Terraform + DynamoDB:所有属性都必须被索引
Terraform + Dynamodb - 了解 aws_appautoscaling_target 和 aws_appautoscaling_policy
每个 dynamodb 表的多个基本云监视警报的 Terraform 模块。定义一次使用多次
terraform dynamodb 中如何指定复合主键(hashkey)
由 Terraform 在 LocalStack 中创建的 DynamoDB 表在 NoSQL Workbench 中不可见