Wpis z mikrobloga

Probuje zrobic pipeline CI/CD w gitlabie. Budowanie ładnie działa ale męcze się z deployem do AWS.

Mam taki skrypt:

- ECR_IMAGE="293393024721.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/test:latest"
- TASK_DEFINITION=$(aws ecs describe-task-definition --task-definition test-definition-family --region eu-west-1)
- NEW_TASK_DEFINTIION=$(echo $TASK_DEFINITION | jq --arg IMAGE "$ECR_IMAGE" '.taskDefinition | .containerDefinitions[0].image = $IMAGE | del(.taskDefinitionArn) | del(.revision) | del(.status) | del(.requiresAttributes) | del(.compatibilities)')
- NEW_TASK_INFO=$(aws ecs register-task-definition --region "$AWS_DEFAULT_REGION" --cli-input-json "$NEW_TASK_DEFINTIION")
- NEW_REVISION=$(echo $NEW_TASK_INFO | jq '.taskDefinition.revision')
- aws ecs update-service --cluster test --service test-service --task-definition test-definition-family:${NEW_REVISION} --region eu-west-1

I niby wszystko jest ok, wersje taska sie zwiększają, ale cluster ECS za nic nie chce odpalić kolejnej instancji EC2 z nowym taskiem.
Ktoś ma wskazówkę, gdzie zwaliłem sprawe ?

#ecs #aws #gitlab
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@mccloud: do aws ecs update-service dodaj

--force-new-deployment
sprawdz w logach serwisu też czy jest miejsce na klastrze aby odpalić kolejnego taska, bo nowe ec2 wstanie jesli masz capacity providera skonfigurowanego
  • Odpowiedz
@mmichal: sprawdzalem, nie pomaga:

aws ecs update-service --cluster test-cluster --service test --force-new-deployment --task-definition test-definition-family:${NEW_REVISION} --region eu-west-1 --profile ptt
  • Odpowiedz
@mmichal: :13

{
"id": "d6d93541-3e15-41f8-b024-243771abc0e7",
"createdAt": 1583314899.747,
"message": "(service test) was unable to place a task because no container instance met all of its requirements. The closest matching (container-instance 2d5043d3-fc58-47ef-9a92-f0b3733d8a88) is already using a port required by your task. For more information, see the Troubleshooting section of the Amazon ECS
  • Odpowiedz
@mccloud: masz na sztywno wpisany ten port więc blokujesz port na EC2 i kolejny task nie wstanie bo poprzedni już używa tego portu. Masz 2 rozwiązania:

- zmienić na dynamiczne porty czyli dać w task definition hostport: 0 wtedy mozesz mieć ile chcesz apek na jednej ec2 z tym samym portem, pozniej zrobić target grupę dla serwisu (aby serwis się w nią wpinał) i na LoadBalancerze kierować ruch do TargetGrupy
  • Odpowiedz