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

如何避免Terraform因移除自定义属性销毁AWS Cognito用户池?

解决Terraform触发AWS Cognito用户池销毁的问题

我之前也踩过这个坑,核心原因其实是AWS Cognito用户池的自定义属性一旦创建就无法删除,而Terraform发现你配置里移除了这个属性后,默认会尝试销毁整个用户池来重建(因为它没法原地删除这个属性)。下面给你两个可行的解决办法:

方法一:保留已废弃的属性配置(最简单)

直接在你的Terraform配置里保留那个不再使用的schema块,但加上注释标记它已废弃,不要直接删除。这样Terraform会认为配置和状态一致,就不会触发销毁操作了:

resource "aws_cognito_user_pool" "my_pool" {
  name = "${var.la} Pool"
  alias_attributes = [ "email" ]
  /* Auto-verify these fields */
  auto_verified_attributes = [ "email" ]
  ...
  # Deprecated: 该属性已不再使用,保留是为了避免用户池被销毁
  schema {
    attribute_data_type = "String"
    name = "my_custom_attribute1"
    required = "false"
    mutable = "true"
  }
}

方法二:手动修改Terraform状态(彻底移除配置中的属性)

如果你确实想把这个属性从配置文件里删掉,那需要手动让Terraform停止跟踪这个schema属性,步骤如下:

  1. 先从你的配置文件中移除那个schema块
  2. 备份当前的Terraform状态(非常重要,防止操作失误):
    terraform state pull > state-backup.tfstate
    
  3. 运行命令移除状态中对应的schema属性(注意索引要和你实际的属性位置对应,比如第一个schema就是[0]):
    terraform state rm 'aws_cognito_user_pool.my_pool.schema[0]'
    
  4. 现在再运行terraform plan,应该就不会再出现销毁用户池的提示了

注意事项

  • AWS Cognito的自定义属性创建后就无法在AWS控制台或API中删除,所以即使你让Terraform不再管理它,这个属性依然会存在于用户池中,只是不会影响你的后续操作
  • 修改Terraform状态前一定要备份,避免意外破坏状态文件

内容的提问来源于stack exchange,提问作者cyram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:12:25