CloudFormation yaml - Comment forcer le type de nombre?

Oct 12 2020

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

1 user1751825 Oct 13 2020 at 04:26

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.