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

Terraform优化:合并AWS Sagemaker端点配置的条件逻辑

简化AWS SageMaker端点配置的Terraform代码

你可以通过调整条件判断的逻辑方向来简化代码,同时保持功能不变,可读性也更强:

resource "aws_sagemaker_endpoint_configuration" "ec" {
  name = "${var.model_name}-ec"

  production_variants {
    variant_name = "${var.model_name}-ec-variant"
    model_name   = aws_sagemaker_model.model.name

    # Serverless模式下生成配置块
    dynamic "serverless_config" {
      for_each = var.serverless ? [1] : []
      content {
        max_concurrency   = 200
        memory_size_in_mb = 2048        
      }
    }

    # 非Serverless模式下赋值实例属性,否则设为null
    initial_instance_count = var.serverless ? null : var.initial_instance_count
    instance_type          = var.serverless ? null : var.instance_type
  }
}

优化点说明:

  • 将原代码中var.serverless == false ? ... : null的判断逻辑反转,改为var.serverless ? null : ...,避免否定式判断,让代码逻辑更直观
  • dynamic "serverless_config"的写法已经是Terraform中动态生成块的标准简洁写法,因为for_each要求接收集合类型,所以用三元表达式生成单元素列表(启用时)或空列表(禁用时)的方式无法再进一步简化

如果需要提升代码的可维护性(比如后续要扩展更多依赖该布尔值的逻辑),可以用局部变量封装条件:

locals {
  use_serverless = var.serverless
}

resource "aws_sagemaker_endpoint_configuration" "ec" {
  name = "${var.model_name}-ec"

  production_variants {
    variant_name = "${var.model_name}-ec-variant"
    model_name   = aws_sagemaker_model.model.name

    dynamic "serverless_config" {
      for_each = local.use_serverless ? [1] : []
      content {
        max_concurrency   = 200
        memory_size_in_mb = 2048        
      }
    }

    initial_instance_count = local.use_serverless ? null : var.initial_instance_count
    instance_type          = local.use_serverless ? null : var.instance_type
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:10:22