최근 CodeDeploy를 통해 ECS 서비스를 배포하면서, 기본 용량 공급자(Capacity Provider)로 설정된 FARGATE_SPOT이 아닌 FARGATE로 태스크가 생성되는 문제를 경험했다.
이 문제는 ECS 클러스터에 설정된 Capacity Provider가 배포 시 제대로 반영되지 않았고 다음 이슈로 인해 해결책을 얻을 수 있었다.
https://github.com/aws/containers-roadmap/issues/695
AWS CodeDeploy uses the AppSpec file as the source of truth for the capacity provider strategy
배포 시 AppSpec 파일에 명시적으로 용량 공급자(Capacity Provider)를 FARGATE_SPOT으로 설정하여 해결할 수 있었다.
{
"version": 1,
"Resources": [
{
"TargetService": {
"Type": "AWS::ECS::Service",
"Properties": {
"TaskDefinition": "arn:aws:ecs:us-west-2:<MyAccountNumber>:task-definition/<MyTaskDefinitionName>:<MyTaskDefinitionVersion>",
"LoadBalancerInfo": {
"ContainerName": "<MyContainerName>",
"ContainerPort": <MyContainerPort>
},
"CapacityProviderStrategy": [
{
"CapacityProvider": "<MyCapacityProviderNameFromECSCluster>",
"Base": 0,
"Weight": 1
}
]
}
}
}
]
}
aws deploy create-deployment \
--application-name {CODEDEPLOY_APP_NAME} \
--deployment-group-name {CODEDEPLOY_DEPLOYMENT_GROUP} \
--deployment-config-name CodeDeployDefault.ECSAllAtOnce \
--revision "{\"revisionType\":\"AppSpecContent\",\"appSpecContent\":{\"content\":{APPSPEC_CONTENT}}}"
https://github.com/aws/containers-roadmap/issues/713 https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-resources.html