During creation of AWS::ECS::Service
via cloudformation i got the error: Model validation failed
The error is related to #HealthCheckGracePeriodSeconds
and some other properties. Error detail is: expected type: Number, found: String
.
In yaml it is already a number. It's not clear to me whats going wrong. Already tried to desclare it as string or as parameter with type Number.
I need some hint because i am stuck in the muck at this point.
Error is:
Model validation failed
(
#/HealthCheckGracePeriodSeconds: expected type: Number, found: String
#/DesiredCount: expected type: Number, found: String
#/DeploymentConfiguration/MaximumPercent: expected type: Number, found: String
#/DeploymentConfiguration/MinimumHealthyPercent: expected type: Number, found: String
)
Definition in template.yaml is:
ServiceDefinition:
Type: AWS::ECS::Service
Properties:
ServiceName: !Ref ServiceName
Cluster: !Ref ClusterName
TaskDefinition: !Ref TaskDefinition
DeploymentConfiguration:
MinimumHealthyPercent: 100
MaximumPercent: 200
DesiredCount: 1
HealthCheckGracePeriodSeconds: 60
LaunchType: FARGATE
NetworkConfiguration:
AwsVpcConfiguration:
AssignPublicIP: ENABLED
SecurityGroups: !FindInMap [Env2SecurityGroups, !Ref AWS::AccountId, securitygroup]
Subnets: !FindInMap [Env2PublicSubnets, !Ref AWS::AccountId, subnets]
The error was caused because SecurityGroups
and Su.nets
resulted in a wrong format.
To extract su.nets
and securitygroups
the FindInMap
function was used. It is necessary that this result is a list. This can be achieved using the Split
function.
The wrong format unfortunately leads to a completely misleading error message.
Declare mappings like this:
Mappings
Env2SecurityGroups:
'111111111111':
securitygroup: 'sg-1111111111111111'
'222222222222':
securitygroup: 'sg-2222222222222222'
'333333333333':
securitygroup: 'sg-3333333333333333'
Env2PublicSubnets:
'111111111111':
subnets: subnet-1111111111111111,subnet-22222222222222222,subnet-33333333333333333
'222222222222':
subnets: subnet-1111111111111111,subnet-22222222222222222,subnet-33333333333333333
'333333333333':
subnets: subnet-1111111111111111,subnet-22222222222222222,subnet-33333333333333333
Use !Split
combined with !FindInMap
to get a list:
SecurityGroups: !Split [",", !FindInMap [ Env2SecurityGroups, !Ref AWS::AccountId, securitygroup] ]
Subnets: !Split [",", !FindInMap [ Env2PublicSubnets, !Ref AWS::AccountId, subnets] ]
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.