CloudFormation yaml - ¿Cómo forzar el tipo de número?
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
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.