CloudFormation yaml - Jak wymusić typ liczb?

Oct 12 2020

Próbuję utworzyć definicję zadania ECS jako część stosu CloudFormation.

Jak dotąd moja definicja zadania wygląda następująco ...

  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

Kiedy próbuję to uruchomić, pojawia się następujący błąd ...

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

Wygląda więc na to, że CloudFormation konwertuje 128 na łańcuch, a następnie stos nie działa.

Jak poprawnie zdefiniować tę wartość, aby pozostała liczbą?

Odpowiedzi

1 user1751825 Oct 13 2020 at 04:26

Okazało się, że błąd zgłaszany przez CloudFormation właściwie nie miał nic wspólnego z awarią. Powyższy kod był w porządku.

W moim przypadku problem polegał na tym, jak zdefiniowałem sekcję logowania, która pojawiła się później w szablonie.

Wniosek z tego jest taki, że CloudFormation jest bardzo mylący w debugowaniu, a jeśli pojawi się taki błąd, nie zakładaj, że to właśnie on powoduje awarię stosu.

Aby znaleźć rzeczywisty problem, musiałem najpierw usunąć właściwości, które powodowały błąd konwersji typu, MemoryReservation i PortMappings, a następnie pokazał błąd dotyczący sposobu zdefiniowania sekcji logowania. Po naprawieniu tej usterki mogłem ponownie dodać inne właściwości i działało dobrze.

Podejrzewam teraz, że ponieważ moja sekcja logowania była niepoprawna, prawdopodobnie całe ContainerDefinitions nie zostało poprawnie przeanalizowane, co może spowodować błąd niezgodności typów wprowadzających w błąd.