Развертывание одного проекта Codebuild в нескольких контейнерах ECS

Я успешно использую codebuild и codepipeline для непрерывного развертывания на ECS для нескольких проектов, но у меня возникла проблема. В этом проекте мне нужно развернуть ту же сборку на четыре разных контейнера ECS.

По умолчанию я использую codebuild и codepipeline 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 в этом проекте или мне следует развернуть его другим способом.

почему бы вам не использовать единый репозиторий ECR / единый образ для сервисов?

sin 24.10.2018 11:24

Я использую одно изображение ECR. Я переношу наш компакт-диск на aws, поэтому система уже работает, и в настоящее время каждая служба, использующая один и тот же образ, имеет другое имя для контейнера. Я не уверен, почему бы мне просто не изменить имя контейнера на это имя изображения.

nyoely 24.10.2018 11:31

на самом деле не имеет значения, есть ли у вас одно и то же имя контейнера в разных службах.

sin 24.10.2018 11:41
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
3
1 193
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Действие CodeBuild в codePipeline в настоящее время поддерживает только один выходной артефакт. Вы можете заархивировать все файлы определения изображения в один zip-файл и добавить действие вызова лямбда-выражения, чтобы разделить его на несколько артефактов и использовать их в действиях развертывания ECS.

Вы можете создать файл для перечисления нескольких пар контейнер-образ в файле imagedefinitions.json, как показано ниже:

[{
  "name": "simple-app",
  "imageUri": "httpd:2.4"
},
{
  "name": "simple-app",
  "imageUri": "mysql"
},
{
  "name": "simple-app-2",
  "imageUri": "java1.8"
}]

Вот пример того, как это делается в моем файле buildspec.yml:

 post_build:
   commands:
     - docker push $IMAGE1_URI:$IMAGE_TAG
     - docker push $IMAGE2_URI:$IMAGE_TAG
     - printf '[{"name":"conatiner1_name","imageUri":"%s"}, {"name":"container2_name","imageUri":"%s"}]' $IMAGE1_URI:$IMAGE_TAG $IMAGE2_URI:$IMAGE_TAG > imagedefinitions.json

Подробнее здесь: https://docs.aws.amazon.com/codepipeline/latest/userguide/file-reference.html#pipelines-create-image-definitions

Другие вопросы по теме