DynamoDB后端的terraform:创建新工作区时出现400错误的请求

问题描述

我有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