AWS Batch作业定义模块resource_requirements配置问题求助
AWS Batch作业定义动态生成resource_requirements列表的问题解决
错误原因
你碰到的Expected a comma to mark the beginning of the next item错误,本质是Terraform语法使用错误:dynamic块仅用于资源、数据源等内部的嵌套块生成,不能直接在列表字面量中使用。你原本试图在列表里插入dynamic块来动态添加GPU资源条目,这不符合Terraform的语法规则。
错误代码示例
locals { resource_requirements = [ { "Type": "VCPU", "Value": tostring(var.vcpus) }, { "Type": "MEMORY", "Value": tostring(var.memory) }, dynamic "gpu_map" { for_each = var.gpu != 0 ? [1] : [] content { Type = "GPU", Value = tostring(var.gpu) } } ] }
解决方案
正确的做法是将CPU、MEMORY、GPU的资源需求拆分为独立的列表,再通过flatten函数合并成最终的resource_requirements列表。当var.gpu为0时,GPU对应的列表为空,合并后自动跳过该条目:
locals { cpu_map = [{ "Type": "VCPU", "Value": tostring(var.vcpus) }] memory_map = [{ "Type": "MEMORY", "Value": tostring(var.memory) }] # 当var.gpu不为0时生成GPU资源条目,否则返回空列表 gpu_map = var.gpu != 0 ? [{ "Type": "GPU", "Value": tostring(var.gpu) }] : [] # 合并所有资源需求列表并展平为一维数组 resource_requirements = flatten([local.cpu_map, local.memory_map, local.gpu_map]) }
内容的提问来源于stack exchange,提问作者Suraj
相关产品推荐
相关产品推荐

