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

Terraform中AWS WorkSpace用KMS别名加密卷每次apply触发重建如何解决

问题原因

AWS Workspaces API的设计特性是:创建资源时可接受KMS别名作为加密密钥参数,但查询资源详情时只会返回对应KMS密钥的完整ARN,不会保留传入的别名字符串。同时Terraform AWS Provider的aws_workspaces_workspace资源的volume_encryption_key字段未做别名与ARN的归一化比对逻辑,且该字段被标记为强制替换(ForceNew)属性,因此每次执行plan/apply时,Terraform都会比对到配置值(别名)与远端状态值(ARN)不一致,触发重建逻辑。
这不属于配置错误,属于Terraform AWS Provider对该字段的兼容性处理缺失问题。

解决方案

方案一:配置中直接使用KMS密钥ARN(优先推荐)

直接引用KMS密钥资源的ARN属性作为参数值,保证配置值与AWS返回的状态值完全一致,不存在漂移问题:

resource "aws_workspaces_workspace" "workspace" {
    directory_id = aws_workspaces_directory.ws-ad.id
    bundle_id    = var.bundle_id
    user_name    = var.username

    root_volume_encryption_enabled = true
    user_volume_encryption_enabled = true
    # 替换别名为KMS密钥的ARN引用
    volume_encryption_key          = aws_kms_key.kms-ws-volume.arn

    workspace_properties {
        compute_type_name                         = "POWER"
        user_volume_size_gib                      = 80
        root_volume_size_gib                      = 50
        running_mode                              = "AUTO_STOP"
        running_mode_auto_stop_timeout_in_minutes = 60
    }
}

原有aws_kms_alias资源可保留,不影响其他场景下通过别名访问该密钥。

方案二:添加生命周期规则忽略该字段变更

如果必须在配置中保留别名写法,可在资源块中添加ignore_changes规则,忽略该字段的漂移比对:

resource "aws_workspaces_workspace" "workspace" {
    directory_id = aws_workspaces_directory.ws-ad.id
    bundle_id    = var.bundle_id
    user_name    = var.username

    root_volume_encryption_enabled = true
    user_volume_encryption_enabled = true
    volume_encryption_key          = "alias/workspace-volume"

    # 新增生命周期规则
    lifecycle {
        ignore_changes = [volume_encryption_key]
    }

    workspace_properties {
        compute_type_name                         = "POWER"
        user_volume_size_gib                      = 80
        root_volume_size_gib                      = 50
        running_mode                              = "AUTO_STOP"
        running_mode_auto_stop_timeout_in_minutes = 60
    }
}

注意:使用该方案后,如果后续需要实际修改加密密钥,需要先临时移除ignore_changes规则再更新配置,否则Terraform不会识别到密钥变更。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:45:02