Search

AWS CLI를 활용하여 ECS Service 수정하기

카테고리
Dev-Ops
태그
AWS-CLI
게시일
2024/11/27
수정일
2024/11/27 09:43
시리즈
1 more property

1. Intro

AWS ECS에서 서비스를 만들고 아주 사소한 이유로 서비스를 변경했던 경험을 해보니, 여간 귀찮고 번거로운 일이 아닐 수 없었습니다. 이런 이슈를 해결하기 위해서 AWS에서는 CLI를 제공해주는데요. 이번 포스트에서는 AWS CLI를 활용하여 ECS 서비스를 수정해보려고 합니다.

2. update-service

AWS CLI Command Reference에 따르면 update-service를 사용하는 Synopsis는 아래와 같습니다. 아래의 모든 기능에 대해서는 설명하진 않고, 각각 케이스별로 어떻게 사용하면 될지 예제를 작성해보려고 합니다.
update-service [--cluster <value>] --service <value> [--desired-count <value>] [--task-definition <value>] [--capacity-provider-strategy <value>] [--deployment-configuration <value>] [--availability-zone-rebalancing <value>] [--network-configuration <value>] [--placement-constraints <value>] [--placement-strategy <value>] [--platform-version <value>] [--force-new-deployment | --no-force-new-deployment] [--health-check-grace-period-seconds <value>] [--enable-execute-command | --disable-execute-command] [--enable-ecs-managed-tags | --no-enable-ecs-managed-tags] [--load-balancers <value>] [--propagate-tags <value>] [--service-registries <value>] [--service-connect-configuration <value>] [--volume-configurations <value>] [--vpc-lattice-configurations <value>] [--cli-input-json <value>] [--generate-cli-skeleton <value>] [--debug] [--endpoint-url <value>] [--no-verify-ssl] [--no-paginate] [--output <value>] [--query <value>] [--profile <value>] [--region <value>] [--version <value>] [--color <value>] [--no-sign-request] [--ca-bundle <value>] [--cli-read-timeout <value>] [--cli-connect-timeout <value>]
Bash
복사

containerPort 수정

1.
현재 Task Definition 확인:
먼저, 현재 서비스가 사용하는 태스크 정의를 확인하여 지정한 포트가 포함되어 있는지 확인합니다. 아래와 같이 task definition의 이름으로 데이터를 읽어와 확인해볼 수 있는데, AWS Console 에서도 확인해볼 수 있습니다. 아래는 aws cli로 task-definition을 확인하기 위한 cli 명령어 입니다.
aws ecs describe-task-definition --task-definition <TASK_DEFINITION_NAME> > new-task-def.json
Shell
복사
2.
Task Definition 수정:
가져온 task-definition.json 파일에서 containerPort 번호를 원하는 값으로 재정의해줍니다. JSON 파일에서 portMappings 섹션을 찾아 다음과 같이 추가합니다.
"portMappings": [ { "containerPort": 12321, "hostPort": 12321, "protocol": "tcp" } // 다른 포트 매핑이 있다면 여기에 추가 ]
JSON
복사
3.
새로운 Task Definition 등록:
수정한 task defitnition 사용하여 새로운 task defitnition를 등록합니다.
aws ecs register-task-definition --cli-input-json file://new-task-def.json
Shell
복사
4.
서비스 업데이트:
이제 새로운 태스크 정의를 사용하여 서비스를 업데이트할 수 있습니다.
# task definition의 revision 번호 포함 aws ecs update-service \ --cluster <CLUSTER_NAME> \ --service <SERVICE_NAME> \ --task-definition <TASK_DEFINITION_NAME> \ --load-balancers "targetGroupArn=<TARGET_GROUP_ARN>,\ containerName=<CONTAINER_NAME>,\ containerPort=<PORT_NUMBER>"
Bash
복사
만약 task definition의 revision 번호도 포함하여 명령어를 실행시키고 싶다면 아래와 같이 실행할 수 있습니다. 만약 revision 번호를 넣지 않으면 가장 마지막으로 올라간 latest 번호를 가져오게 됩니다.
# task definition의 revision 번호 포함 aws ecs update-service \ --cluster <CLUSTER_NAME> \ --service <SERVICE_NAME> \ --task-definition <TASK_DEFINITION_NAME>:<REVISION_NUMBER> \ --load-balancers "targetGroupArn=<TARGET_GROUP_ARN>,\ containerName=<CONTAINER_NAME>,\ containerPort=<PORT_NUMBER>"
Shell
복사
5.
유의 사항:
containerPort를 업데이트 해주었다면, task 내에서 실행되는 서비스의 포트 번호도 확인해주어야 합니다. Task 가 정상적으로 구동되는 부분을 확인해봅시다.

References