CloudFormation yaml - 如何强制数字类型?

use*_*825 5 yaml aws-cloudformation

我正在尝试创建 ECS 任务定义作为 CloudFormation 堆栈的一部分。

到目前为止我的任务定义看起来像这样......

  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      RequiresCompatibilities:
        - EC2
      ExecutionRoleArn: !Ref MyTaskRole
      ContainerDefinitions:
        - Name: !Ref ServiceName
          Image: amazon/amazon-ecs-sample
          PortMappings:
            - ContainerPort: 3000
              HostPort: 0
              Protocol: tcp
          MemoryReservation: 128
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此程序时,出现以下错误...

#/ContainerDefinitions/0/MemoryReservation: expected type: Number, found: String
Run Code Online (Sandbox Code Playgroud)

所以看来CloudFormation正在将128转换为字符串,然后堆栈失败。

定义该值以使其保持为数字的正确方法是什么?

use*_*825 9

事实证明,CloudFormation 报告的错误实际上与失败无关。上面的代码完全没问题。

就我而言,问题在于我定义稍后出现在模板中的日志记录部分的方式。

由此得出的结论是,CloudFormation 的调试非常混乱,如果您收到这样的错误,请不要认为它是真正导致堆栈失败的原因。

为了找到实际问题,我必须首先删除导致类型转换错误的属性 MemoryReservation 和 PortMappings,然后它显示有关我定义日志记录部分的方式的错误。修复该错误后,我可以重新添加其他属性,并且效果很好。

我现在怀疑,因为我的日志记录部分不正确,整个 ContainerDefinitions 可能没有被正确解析,可能导致误导性的类型不匹配错误。