You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform部署AWS Cognito User Pool二次无变更apply报schema修改错误

Terraform二次部署Cognito User Pool报错解决方案

错误根因

你遇到的cannot modify or remove schema items报错由以下两个原因共同导致:

  • 配置中声明的name、family_name、phone_number都属于AWS Cognito默认预置的标准用户属性,无需在schema块中显式定义
  • 3.x版本的hashicorp/aws provider存在逻辑缺陷,会将显式声明的标准属性识别为待新增的自定义属性,首次部署创建成功后,二次执行terraform apply时会触发无意义的修改逻辑,而Cognito原生不允许修改或删除已存在的schema属性,因此触发报错

可行解决方案

方案1:移除标准属性的schema声明(推荐)

直接删除配置中三个对应标准属性的schema块即可,标准属性默认自带,无需额外配置。修改后的资源配置参考如下:

resource "aws_cognito_user_pool" "pool" {
  name = "my-user-pool"

  mfa_configuration = "OFF"
  username_attributes = ["email"]

  password_policy {
    minimum_length = 8
  }

  account_recovery_setting {
    recovery_mechanism {
      name     = "verified_email"
      priority = 1
    }
  }

  auto_verified_attributes = [
    "email"
  ]

  user_pool_add_ons {
    advanced_security_mode = "OFF"
  }
}

修改完成后先执行terraform plan确认没有待执行的Cognito schema更新操作,再执行terragrunt apply-all即可正常通过。

方案2:升级AWS Provider版本

如果团队规范要求全量显式声明所有属性,可以将aws provider的版本升级到4.0及以上,该版本已经修复了标准schema的识别缺陷,不会将显式声明的标准属性识别为自定义属性触发修改逻辑。

方案3:添加忽略变更规则(适用于生产环境不可修改配置/重建用户池的场景)

如果当前用户池已经上线投入使用,既不能重建也不能修改现有配置,可以在aws_cognito_user_pool资源中添加lifecycle规则忽略schema变更:

resource "aws_cognito_user_pool" "pool" {
  // 原有配置保持不变
  lifecycle {
    ignore_changes = [schema]
  }
}

添加后Terraform会跳过schema字段的变更对比,不会触发修改逻辑,即可避免报错。

内容的提问来源于stack exchange,提问作者Olivier Castro-Perrier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:57:04