Обновление версий образов ECS Tasks — не самая простая задача, если вы не заходите в веб-интерфейс AWS. Кроме того, не существует прямого кода для того, чтобы сделать это в AWS CLI. Поэтому я придумал следующий код, который поможет вам сделать это без особых усилий.
Единственными необходимыми условиями являются:
- Машина с WSL2 (я тестировал только в Ubuntu), Linux или macOS.
- Установите jq (sudo apt-get install jq).
- Создайте файл .sh со следующим сценарием.
TASK_NAME=task_name
SERVICE_NAME=service_name
IMAGE_NAME=image_name
CLUSTER_NAME=cluster_name
REGION=region
VERSION=version
ACCOUNT_NUMBER=account_number
NEW_IMAGE=$ACCOUNT_NUMBER.dkr.ecr.$REGION.amazonaws.com/$IMAGE_NAME:$VERSION
TASK_DEFINITION=$(aws ecs describe-task-definition --task-definition "$TASK_NAME" --region "$REGION")
NEW_TASK_DEFINITION=$(echo $TASK_DEFINITION | jq --arg IMAGE "$NEW_IMAGE" '.taskDefinition | .containerDefinitions[0].image = $IMAGE | del(.taskDefinitionArn) | del(.revision) | del(.status) | del(.requiresAttributes) | del(.compatibilities) | del(.registeredAt) | del(.registeredBy)')
NEW_REVISION=$(aws ecs register-task-definition --region "$REGION" --cli-input-json "$NEW_TASK_DEFINITION")
NEW_REVISION_DATA=$(echo $NEW_REVISION | jq '.taskDefinition.revision')
NEW_SERVICE=$(aws ecs update-service --cluster $CLUSTER_NAME --service $SERVICE_NAME --task-definition $TASK_NAME --force-new-deployment)
echo "done"
echo "${TASK_NAME}, Revision: ${NEW_REVISION_DATA}"
После этого необходимо обновить переменные окружения:
- TASK_NAME=имя_задачи
- SERVICE_NAME=имя_службы
- IMAGE_NAME=имя_изображения
- CLUSTER_NAME=имя_кластера
- РЕГИОН=регион
- ВЕРСИЯ=версия
- ACCOUNT_NUMBER=номер_аккаунта
А затем запустите .sh вот так, ./update_task.sh. И это все!
Следуйте за мной на:
YouTube | Киберпророки | Делимся своими историями | ||
---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |