CloudFormation yaml - Jak wymusić typ liczb?
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
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.