【问题标题】:ValidationException error when deploying AWS WorkSpaces via terraform通过 terraform 部署 AWS WorkSpaces 时出现 ValidationException 错误
【发布时间】:2020-07-01 10:20:03
【问题描述】:

我一直在尝试使用 Terraform 部署 AWS WorkSpaces 基础设施。代码本身通过verify和plan检查,但申请失败。

来源:

module "networking" {
  source = "../../modules/networking"
  region = var.region
  main_cidr_block = var.main_cidr_block
  cidr_block_1 = var.cidr_block_1
  cidr_block_2 = var.cidr_block_2
  size = var.size
}

resource "aws_directory_service_directory" "main" {
  name     = var.aws_ds_name
  password = var.aws_ds_passwd
  size     = var.size
  type = "SimpleAD"
  vpc_settings {
    vpc_id     = module.networking.main_vpc
    subnet_ids = ["${module.networking.private-0}", "${module.networking.private-1}"]
  }
}

resource "aws_workspaces_directory" "main" {
  directory_id = aws_directory_service_directory.main.id
  subnet_ids   = ["${module.networking.private-0}", "${module.networking.private-1}"]
}

resource "aws_workspaces_ip_group" "main" {
  name        = "Contractors."
  description = "Main IP access control group"


  rules {
    source      = "10.0.0.0/16"
    description = "Contractors"
  }
}

错误代码:

ValidationException: 2 validation errors detected: Value at 'password' failed to satisfy constraint: Member must satisfy regular expression pattern: (?=^.{8,64}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9\s])(?=.*[a-z])|(?=.*[^A-Za-z0-9\s])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9\s]))^.*; Value '' at 'name' failed to satisfy constraint: Member must satisfy regular expression pattern: ^([a-zA-Z0-9]+[\\.-])+([a-zA-Z0-9])+$
        status code: 400, request id: 073f6e61-775e-4ff9-a88e-e1eab97f8519

  on modules/workspaces/workspaces.tf line 10, in resource "aws_directory_service_directory" "main":
  10: resource "aws_directory_service_directory" "main" {

我知道这是用户名/密码的正则表达式问题,但我目前尚未设置任何用户,并且出于测试原因我已重置安全策略。

以前有人遇到过这个问题吗?

【问题讨论】:

    标签: amazon-web-services terraform terraform-provider-aws


    【解决方案1】:

    AWS API for the directory service enforces a constraint on the password attribute 与您在运行 terraform apply 时在该错误中看到的内容相匹配:

    密码

    目录管理员的密码。目录创建 进程使用用户名创建目录管理员帐户 管理员和此密码。

    如果您需要更改管理员帐户的密码,您可以 可以使用 ResetUserPassword API 调用。

    类型:字符串

    图案:

    (?=^.{8,64}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9\s])(?=.*[a-z])|(?=.*[^A-Za-z0-9\s])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9\s]))^.*
    

    必填:是

    通常,Terraform 能够使用计划或验证命令来验证这一点,但不幸的是,AWS 提供商是 currently missing an appropriate ValidateFunc,因此它只会在应用时失败,而不是在分钟。

    如果您希望在计划或验证时间内捕获此问题,则应在 provider issue tracker 上提出功能请求。

    【讨论】:

    • 好的,这就解释了。
    • 但是,一个问题仍然存在 - 我该如何解决这个问题/我应该包含什么格式的数据?我尝试输入各种组合,但到目前为止都没有奏效。
    • 您需要输入与过于复杂的正则表达式匹配的密码。乍一看,它归结为 8 到 64 个字符,包含一个字母、一个数字和一个标点符号。你可以测试东西here
    • 非常感谢!我知道这听起来像是一个菜鸟问题,但无论如何感谢您帮助我解决它。不知道 API 有第二个密码强制策略,除了 IAM 一个。
    • 根本不是菜鸟问题。理想情况下,Terraform 会在计划或验证时捕获它,并且倾向于这样做,但它需要有人将限制添加到 ValidateFunc,而这些并不总是由贡献者完成。如果您在问题跟踪器上提出功能请求,那么希望有人会在某个时候解决它,因为它是一个简单的添加。或者,如果您有兴趣,那么它是一种开始回馈 Terraform 并了解其工作原理的简单方法。
    猜你喜欢
    • 1970-01-01
    • 2021-10-05
    • 2016-04-08
    • 1970-01-01
    • 2022-01-18
    • 2021-07-29
    • 1970-01-01
    • 2014-06-28
    • 2014-05-15
    相关资源
    最近更新 更多