Infra

ECS - EC2 간단 배포하기 [2] - 테스크 정의 및 배포

SungHoJung 2025. 3. 15. 01:57

1. ECR(Elastic Container Registry) 생성

 AWS Console > Amazon Elastic Container Registry > Private Repositories > [Create repository]

 

빨간 영역에 폴더 생성할 폴더명을 만들면된다. 해당 앞으로 이미지를 빌드하고 푸시할 때, 저장할 장소의 이름이라고 생각하면 편하다.

이후 아래처럼 생성한 이름의 리포지토리가 만들어진 것을 확인할 수 있다. 

2. EC2에서 ECR에 접근할 수 있는 IAM 생성

AWS Console > Identity and Access Management (IAM) ****> Access management > Users > [Create user]

 

IAM > 사용자 > kobaco-ecs-iam-user

이제 생성한 IAM 유저를 선택하고, 보안 자격 증명 탭에서 엑세스 키를 발급해준다. 내가 만든 IAM명은 kobaco-ecs-iam-user였다.

다음 단계에서 Command Line Interface(CLI) 를 선택하고, 생성하면 된다 엑세스키와 시크릿키가 발급되는데,

‼️ 이때 발급된 키의 시크릿 키는 다시 열람이 불가능하니 다른 곳에 적어두도록 하자.

 

3. EC2에 IAM 엑세스 키 등록

인스턴스에 접속하여 방금 발급받은 IAM의 엑세스 키와, 시크릿 키를 이용해 자격 증명을 등록한다. 

EC2 > 인스턴스 > i-0d555fac23f178bf4 > 인스턴스에 연결
# 자격 증명을 설정한다.
aws configure

# 프롬프트에 맞춰 값을 입력한다.
# 앞에 엑세스 키와 시크릿 키만 입력하고, 엔터롤 넘겨도 된다
AWS Access Key ID [None]: <발급받은 엑세스 키 입력>
AWS Secret Access Key [None]: <발급받은 시크릿 키 입력>
Default region name [None]: <리전 입력>
Default output format [None]:

⚡ 이렇게 하면 ~/.aws/credentials 및 ~/.aws/config 파일에 저장된다. 

4. EC2에 배포할 이미지 빌드 및 ECR에 Push 

EC2 인스턴스에 접속하여, 우선, 배포 테스트를 위해 사용한 이미지 빌드에 쓰일 도커파일을 하나 만든다.

접속하자마자 해당 위치에 만들어주면 된다.

  • index.html
#index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ECS Deployment Successful</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            text-align: center;
            padding: 50px;
            background-color: #e3f2fd;
        }
        h1 {
            color: #0277bd;
        }
        p {
            color: #01579b;
            font-size: 18px;
        }
        .success {
            font-size: 24px;
            font-weight: bold;
            color: #388e3c;
        }
    </style>
</head>
<body>
    <h1>🎉 ECS 배포 성공! 🎉</h1>
    <p class="success">Your application has been successfully deployed to AWS ECS.</p>
    <p>Everything is up and running 🚀</p>
</body>
</html>
  • Dockerfile
FROM nginx:latest

COPY ./index.html /usr/share/nginx/html/index.html

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

 

해당 파일들을 만들고, 이미지를 빌드해서 ECR에 푸시하면 된다.

해당 버튼을 누르면 아래와 같은 창이 나오는데, 1번부터 순서대로 복사 붙여넣기를 하면 된다. 

도커허브와 마찬가지로, ECR에 이미지를 푸시할 때도, 아까만든 레포지토리명을 사용해서 태그를 만들어야 푸시가 된다. 

이제 ECR에 아까 생성한 레포지토리에 들어가면 이미지가 하나 올라와 있는것을 알 수 있다!

5. Task Definition 정의

테스크에서 사용할 역할을 IAM에서 생성해주어야 한다.

AWS Console > Identity and Access Management (IAM) > Access management > Roles > 역할 생성

그림처럼 역할을 생성해주면 된다. 이후에 task Definition에 할당해줄 것이다.

이제 task definition을 만들어보자

 AWS Console > Amazon Elastic Container Service > Task definitions > 새 테스크 정의 생성

- 1편에서 ec2에 에이전트를 설정해놨기 때문에, ec2를 선택해준다

- 여기서 ecs-task-definition은 바로 직전에 만들어놓은 iam 역할이다.
- 네트워크 모드를 bridge로 선택하고, 해당 테스크에서 사용할 CPU와 메모리를 지정한다

‼️ 프리티어로 제공되는 t2.micro는 1vCPU에 1GB 메모리 인스턴스이기 때문에, 위와 같이 설정하였다. 

해당 테스크가 띄워줄 컨테이너의 이름을 지정하고, 이미지 URI는 ECR에 올라온 이미지의 URI를 넣어준다

이후 해당 컨테이너의 80번 포트를 호스트의 80번 포트와 연결해주어 http로 접속 시에 접근할 수 있도록 지정해준다.

‼️ 읽기 전용은 체크를 풀어준다.

필요하다면 아래와 같은 설정도 추가해준다

6. Task 수행

 AWS Console > Amazon Elastic Container Service > Task definitions > 생성한 테스크 선택

생성한 테스크를 선택하고 테스크 실행을 선택하면, 
ECS 클러스터의 테스크 탭에서 해당 테스크가 실행됨을 확인할 수 있다.

http://<ec2의 퍼블릭 ip or DNS 네임>으로 접속했을 때 아래와 같은 화면이 뜨면 성공이다.