Я успешно использую codebuild & codepipeline для непрерывного развертывания на ECS для нескольких проектов, но столкнулась с проблемой.В этом проекте мне нужно развернуть одну и ту же сборку в четырех разных контейнерах ECS .
. По умолчанию я использую CD с кодовой сборкой и кодовой линией, как показано в документах aws - я создаю файл imagedefinitions.jsonв конце процесса сборки.Насколько я вижу, этот файл может содержать определение только одного контейнера ECS .
Необходимо указать имя контейнера:
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker images...
- docker push $REPOSITORY_URI:latest
- docker push $REPOSITORY_URI:$IMAGE_TAG
- echo Writing image definitions file...
- printf '[{"name":"hello-world","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
artifacts:
files: imagedefinitions.json
Дляэто определение задачи:
{
"taskDefinition": {
"family": "hello-world",
"containerDefinitions": [
{
"name": "hello-world",
"image": "012345678910.dkr.ecr.us-west-2.amazonaws.com/hello-world:6a57b99",
"cpu": 100,
"portMappings": [
{
"protocol": "tcp",
"containerPort": 80,
"hostPort": 80
}
],
"memory": 128,
"essential": true
}
]
Это может работать, если я изменю имена всех четырех контейнеров в разных сервисах на одно и то же имя.например это конкретное имя изображения.Но я не могу сказать, является ли это хорошей идеей.
Теперь мне интересно, могу ли я вообще использовать codepipeline для ECS в этом проекте или я должен развернуть другим способом.