CloudFormation yaml - Comment forcer le type de nombre?
J'essaie de créer une définition de tâche ECS dans le cadre d'une pile CloudFormation.
Jusqu'à présent, ma définition de tâche ressemble à ceci ...
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
Quand j'essaye d'exécuter ceci, j'obtiens l'erreur suivante ...
#/ContainerDefinitions/0/MemoryReservation: expected type: Number, found: String
Il semble donc que CloudFormation convertit 128 en chaîne, puis la pile échoue.
Quelle est la manière correcte de définir cette valeur pour qu'elle reste un nombre?
Réponses
Il s'est avéré que l'erreur signalée par CloudFormation n'avait en fait rien à voir avec l'échec. Le code ci-dessus était parfaitement correct.
Dans mon cas, le problème était avec la façon dont j'avais défini la section de journalisation qui apparaissait plus tard dans le modèle.
Ce qu'il faut retenir de ceci, c'est que CloudFormation est très déroutant à déboguer, et si vous recevez une erreur comme celle-ci, ne supposez pas que c'est ce qui cause réellement l'échec de la pile.
Pour trouver le problème réel, je devais d'abord supprimer les propriétés qui causaient l'erreur de conversion de type, MemoryReservation et PortMappings, puis une erreur sur la façon dont j'avais défini ma section de journalisation. Après avoir corrigé ce problème, j'ai pu ajouter à nouveau les autres propriétés et cela a bien fonctionné.
Je soupçonne maintenant que, parce que ma section de journalisation était incorrecte, l'ensemble de ContainerDefinitions n'était peut-être pas analysé correctement, ce qui pourrait entraîner une erreur de non-correspondance de type trompeuse.