4차산업혁명의 일꾼/Java&Spring웹개발과 서버 컴퓨터

ECR/ECS 자동 배포 라인

르무엘 2024. 1. 8. 15:11

1. IAM 에 AmazonECS_FullAccess / CloudWatchLogFullAccess 와 ECR 권한을 추가합니다.

2. 만들어진 User의 Third-Party Service AccessKey 를 생성한다. (Github 시크릿에 등록)

3. AWS ECR (private) 계정  생성

4. VPC(VPC and more) 및 ALB 세팅(보안그룹- Inboud트래픽제어, 타켓그룹 - ALB가 요청을 분배하는 기준설정)

5. ECS 세팅 -Fargate 클러스터 생성 (Task Definition 작업정의)

6. 작업정의로 서비스 생성(서비스, 네트워크-서브넷,시큐리티그룹, 로드밸런스- 리스너, 타켓그룹)

7. ALB의 주소를 이용해 접근하면 Target Group에 의해 포트포워딩 되어 ECS의 서비스에 연결할 수 있다.

 

8. 깃헙 액션스 배포 자동화 

env:
# 본인의 Region 에 맞게 설정
    AWS_REGION:  
# 본인의 ECR URI 를 지정
    ECR_REGISTRY:  
  # 본인의 ECR Repository 명을 지정
ECR_REPOSITORY:  

 

task-definition.json 파일을 생성

{
    "family": "{ Task Definition 이름 }",
    "containerDefinitions": [
        {
            "name": "{ 컨테이너 명 }",
            "image": "{ 실행할 ECR 이미지 주소 ( 이건 스크립트를 통해 매번 자동 변경할 것 ) }",
            "cpu": 0,
            "portMappings": [
                {
                    "containerPort": 3000,
                    "hostPort": 3000,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "environment": [],
            "environmentFiles": [],
            "mountPoints": [],
            "volumesFrom": [],
            "ulimits": [],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-create-group": "true",
                    "awslogs-group": "/ecs/task-hhplus-nest-prod",
                    "awslogs-region": "ap-northeast-2",
                    "awslogs-stream-prefix": "ecs"
                },
                "secretOptions": []
            }
        }
    ],
    "taskRoleArn": "arn:aws:iam::200073956152:role/role-ecs-tasks",
    "executionRoleArn": "arn:aws:iam::200073956152:role/role-ecs-tasks",
    "networkMode": "awsvpc",
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "512",
    "memory": "1024",
    "runtimePlatform": {
        "cpuArchitecture": "X86_64",
        "operatingSystemFamily": "LINUX"
    }
}

 

깃헙 배포 파일에서 ECS task-definiton 경로 지정

- name: Render ECS task-definition
  id: render-task-definition
  uses: aws-actions/amazon-ecs-render-task-definition@v1
  with:
    task-definition: { 내 task definition 경로 }
    container-name: { 내 task definition container-name }
    image: ${{ steps.build-image.outputs.image }}

- name: Deploy Amazon ECS task-definition
  uses: aws-actions/amazon-ecs-deploy-task-definition@v1
  with:
    task-definition: ${{ steps.render-task-definition.outputs.task-definition }}
    cluster: { 내 서버가 위치할 ECS 클러스터 명 }
    service: { 내 서버를 실행시킬 ECS 서비스 명 }
    wait-for-service-stability: true

LIST