Terraform自定义属性销毁用户池AWS

时间:2018-05-08 13:14:10

标签: amazon-web-services terraform

我有一个我不再使用的自定义属性,并且强制terraform每次都会破坏用户池。有没有避免用户池的破坏?

我的terraform:

resource "aws_cognito_user_pool" "my_pool" {
   name                          = "${var.la} Pool"

   alias_attributes              = [
      "email"
   ]

   /* Auto-verify these fields */
   auto_verified_attributes      = [
      "email"
   ]

   ...

   schema {
      attribute_data_type         = "String"
      name                        = "my_custom_attribute1"
      required                    = "false"
      mutable                     = "true"
   }
 }

terraform计划给出以下结果:

  schema.xxx.attribute_data_type:                          "String" => "" (forces new resource)
  schema.xxx.developer_only_attribute:                          "false" => "false"
  schema.xxx.mutable:                                           "true" => "false" (forces new resource)
  schema.xxx.name:                                              "my_custom_attribute1" => "" (forces new resource)
  schema.xxx.number_attribute_constraints.#:                    "0" => "0"
  schema.xxx.required:                                          "false" => "false"
  schema.xxx.string_attribute_constraints.#:                    "1" => "0" (forces new resource)
  schema.xxx.string_attribute_constraints.0.max_length:         "" => ""
  schema.xxx.string_attribute_constraints.0.min_length:         "" => ""

我没有对这些进行更改,但每次我尝试计划时都说有变化,我需要销毁我的用户池(我不想做)。

我尝试过运行terraform刷新,但它似乎没有效果。

我发现了以下内容,但这些建议似乎无法解决我的问题:https://github.com/terraform-providers/terraform-provider-aws/issues/3891

我认为这不是一个真正的错误。如何避免破坏我的Cognito用户池?

terraform版本:0.11.5 aws版本:0.17(也试过0.15)

1 个答案:

答案 0 :(得分:1)

我最近遇到了同样的问题,看来Terraform已更新their documentation来突出此问题:

  

注意:在定义String或Number的attribute_data_type时,需要各个属性约束配置块(例如string_attribute_constraints或number_attribute_contraints)来防止重新生成Terraform资源。对于标准(例如名称,电子邮件)和自定义架构属性,此要求都是正确的。

简而言之,您可能需要向属性添加约束以阻止每次重新创建它,例如:

string_attribute_constraints = { # This is required to stop user pool being recreated
  max_length = 32
}

这可能会导致您的资源被更新(并因此被破坏)一次,但随后应按预期运行。与往常一样,我还是建议您先进行测试!