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
相关产品推荐
相关产品推荐

