CloudFormation yaml - ¿Cómo forzar el tipo de número?

Oct 12 2020

Estoy tratando de crear una definición de tarea ECS como parte de una pila de CloudFormation.

Mi definición de tarea hasta ahora se ve así ...

  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

Cuando intento ejecutar esto, aparece el siguiente error ...

#/ContainerDefinitions/0/MemoryReservation: expected type: Number, found: String

Entonces parece que CloudFormation está convirtiendo 128 en una cadena, y luego la pila falla.

¿Cuál es la forma correcta de definir este valor para que siga siendo un número?

Respuestas

1 user1751825 Oct 13 2020 at 04:26

Resultó que el error que informaba CloudFormation en realidad no tenía nada que ver con la falla. El código anterior estaba perfectamente bien.

En mi caso, el problema estaba en la forma en que había definido la sección de registro que apareció más adelante en la plantilla.

La conclusión de esto es que CloudFormation es muy confuso de depurar, y si recibe un error como este, no asuma que es lo que realmente está causando que la pila falle.

Para encontrar el problema real, primero tuve que eliminar las propiedades que estaban causando el error de conversión de tipo, MemoryReservation y PortMappings, y luego mostró un error sobre la forma en que había definido mi sección de registro. Después de arreglar esa falla, pude volver a agregar las otras propiedades y funcionó bien.

Ahora sospecho que debido a que mi sección de registro era incorrecta, tal vez no se estaban analizando correctamente todas las ContainerDefinitions, lo que podría causar el error engañoso de falta de coincidencia de tipos.