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

CloudFormation模板!If语句配置网络时遇类型错误:期望JSONObject,实际为String

解决CloudFormation中ECS服务NetworkConfiguration的!If条件类型错误问题

问题场景:
尝试通过CloudFormation模板创建可根据部署环境参数切换Fargate/EC2启动类型的ECS服务,在使用!If条件配置NetworkConfiguration时触发错误:expected type: JSONObject, found: String。硬编码配置时可正常运行,原因是EC2模式下无需配置Awsvpc网络。

错误原因:
原模板中直接给NetworkConfiguration字段赋值为!If的结果,当条件指向EC2模式时返回AWS::NoValue,但CloudFormation对NetworkConfiguration的类型校验要求必须是JSONObject,AWS::NoValue在此场景下会被解析为字符串类型,导致类型不匹配。

解决方案:
将整个NetworkConfiguration属性的存在与否用!If控制,当使用Fargate时才添加该属性,EC2模式下不包含该属性,完全符合ECS服务的配置规则。修改后的模板片段如下:

Conditions:
  UseEC2: !Equals
    - dev
    - !Ref ParameterEnvironment
  UseFargate: !Not [ !Equals [ dev, !Ref ParameterEnvironment ] ]
WebService:
  Properties:
    Cluster: !Ref ClusterName
    DesiredCount: 1
    LaunchType: !If [ UseFargate, FARGATE, EC2 ]
    # 调整:用!If控制是否添加NetworkConfiguration属性
    !If
    - UseFargate
    -
      NetworkConfiguration:
        AwsvpcConfiguration:
          AssignPublicIp: "ENABLED"
          SecurityGroups:
            - !Ref AppDefaultGroup
            - !Ref OtherGroup
          Subnets:
            - subnet-xxxxxxxx
            - subnet-yyyyyyyy
    - !Ref AWS::NoValue
    SchedulingStrategy: REPLICA
    PropagateTags: TASK_DEFINITION
    TaskDefinition: !Ref WebTaskDefinition
  Type: 'AWS::ECS::Service'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:51:20