Amazon ECS Fargate에 자동 배포
5190 단어 containerappsawsecsdevops
이 게시물에서는 AWS CLI 및 GitLab CI/CD를 사용하여 자동화된 방식으로 인프라를 관리할 필요 없이 컨테이너를 실행하는 서버리스 옵션인 Amazon ECS Fargate에 컨테이너화된 애플리케이션을 배포하는 방법을 언급하고 싶습니다.
시작하기 전에 필요한 환경은 다음과 같습니다. 따라서 아래에서 언급한 기술 스택에 대해 이미 사용 중이거나 익숙하다고 가정합니다.
ECS 클러스터를 생성한 다음 컨테이너화된 애플리케이션의 첫 번째 릴리스를 ECS Fargate에 배포했다고 가정해 보십시오. 그러나 계속해서 컨테이너의 새 릴리스 배포를 자동화하는 데 필요할 것입니다.
이를 위해 GitLab CI/CD와 결합하여 AWS CLI를 활용합니다.
1단계 - ECS 작업 정의 생성
컨테이너화된 애플리케이션의 도커 관련 명령을 참조하는 정의와 유사한 정의ECS task definition를 생성해야 합니다.
myapp-ecs-task-definition.json
{
"family": "myapp-preprod-fargate",
"executionRoleArn": "arn:aws:iam::<aws_account_id>:role/ecsTaskExecutionRole",
"taskRoleArn": "arn:aws:iam::<aws_account_id>:role/ecsTaskExecutionRole",
"cpu": "1 vCPU",
"memory": "4GB",
"networkMode": "awsvpc",
"containerDefinitions": [
{
"name": "myapp-preprod",
"image": "<aws_account_id>.dkr.ecr.eu-central-1.amazonaws.com/myapp:latest",
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/myapp-preprod-fargate",
"awslogs-region": "eu-central-1",
"awslogs-stream-prefix": "ecs"
}
},
"portMappings": [
{
"protocol": "tcp",
"containerPort": 3000
}
],
"cpu": 0,
"essential": true
}
],
"requiresCompatibilities": [
"FARGATE"
]
}
Pay attention to "image": ".dkr.ecr.eu-central-1.amazonaws.com/myapp:latest"
2단계 - gitlab-ci.yml 준비
이제 업데이트된 컨테이너화된 애플리케이션을 ECS Fargate에 자동으로 배포하는 데 사용할 CI/CD 측을 준비해야 합니다.
ecs-gitlab-ci.yml은 빌드 및 배포 단계를 포함하는 완전히 준비된 .gitlab-ci.yml 파일입니다. Amazon ECS Fargate 관련 섹션을 살펴보겠습니다.
고유한 컨테이너 이미지 버전 태그 설정
sed -i 's/latest/'"${CI_ENVIRONMENT_NAME}-${CI_PIPELINE_IID}"'/g' myapp-ecs-task-definition.json
위의 명령을 실행하면 컨테이너 이미지가 아래와 같이 표시됩니다.
<aws_account_id>.dkr.ecr.eu-central-1.amazonaws.com/myapp:preprod-1
이를 통해 우리가 실행하는 모든 CI/CD 파이프라인에서 고유한 컨테이너 이미지 태그가 ECS 작업 정의 파일에 주입됩니다.
ECS 작업 개정 번호 가져오기
이제 업데이트된 작업 정의 파일을 등록하여 새 작업 정의를 생성하고 개정 번호를 얻습니다.
export TASK_REVISION=$(aws ecs register-task-definition \
--family ${ECS_TASK_FAMILY} \
--cli-input-json file://myapp-ecs-task-definition.json \
--region eu-central-1 | jq --raw-output '.taskDefinition.revision')
echo "Registered ECS Task Definition = " $TASK_REVISION
위의 명령을 실행하면 고유 개정 번호가 있는 ECS 작업 정의 파일이 생성됩니다.
aws ecs register-task-definition 명령은 기본적으로 개정 번호를 하나씩 증가시켜 새 작업 정의 파일을 생성합니다. 그리고 아래와 같이 보일 것입니다.
echo "Updated Task Definition = " $ECS_TASK_FAMILY:$TASK_REVISION
myapp-preprod-fargate:1
ECS 서비스 업데이트 - 롤링 업데이트
마지막 단계에서는 업데이트된 작업 개정으로 ECS 서비스를 업데이트해야 합니다. 아래 명령은 ECS 서비스에 대한 롤링 업데이트를 트리거합니다.
UPDATE_ECS_SERVICE=$(aws ecs update-service \
--cluster $ECS_CLUSTER_NAME \
--service $ECS_SERVICE_NAME \
--task-definition $ECS_TASK_FAMILY:$TASK_REVISION \
--desired-count 1 \
--region eu-central-1 | jq --raw-output '.service.serviceName')
echo "Deployment of $UPDATE_ECS_SERVICE has been completed"
그게 다야! 이제 다운타임 없이 자동화된 방식으로 컨테이너화된 애플리케이션을 배포할 수 있습니다.
이 게시물에서는 AWS CLI 및 GitLab CI/CD를 사용하여 Amazon ECS Fargate에 대한 컨테이너 배포 프로세스를 자동화하는 방법에 대해 언급하고 싶었습니다.
Reference
이 문제에 관하여(Amazon ECS Fargate에 자동 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-builders/automated-deployment-to-amazon-ecs-fargate-4o6c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)