Scenario

 

1. CodeRepository에 node.js 코드 푸시

2. node.js 코드 ECR로 푸시

3. ECS에서 ECR 컨테이너 지정 후 EC2환경 서비스

4. node.js 코드 실행 확인

 

 

사전 준비

Test Node.js 코드

https://yes5.tistory.com/45

 

Node.js Express 실행 확인 index.html 포함

Node.js 설치먼저, Node.js를 설치해야 합니다.Node.js 다운로드:Node.js 공식 웹사이트로 이동합니다.LTS (Long Term Support) 버전을 다운로드합니다. 이는 안정적이고 장기적으로 지원되는 버전입니다.Node.js

yes5.tistory.com

 

AWS CLI 설치 및 구성

  • AWS CLI가 설치되어 있지 않다면, AWS CLI 설치 가이드를 참고하세요.
  • AWS CLI를 설치한 후, 다음 명령어를 사용하여 AWS 자격 증명을 구성합니다:
aws configure

1. KEYID
2. PASSWORD
3. REGION (ap-northeast-2)
4. 생략 enter

 

Git 설치

  • Git이 설치되어 있지 않다면, Git 다운로드 페이지에서 설치하세요.

Docker 설치 및 설정

https://yes5.tistory.com/46

 

Docker 설치 및 설정 deploying WSL2 distributionsensuring main distro is deployed error 해결

1. Docker 설치Docker는 대부분의 운영 체제에서 설치할 수 있습니다. 아래는 주요 운영 체제별 설치 방법입니다.WindowsDocker Desktop for Windows를 다운로드하고 설치합니다.설치 과정에서 기본 설정을 따

yes5.tistory.com

 

 

AWS CodeCommit 리포지토리 생성

  • AWS Management Console 또는 AWS CLI를 사용하여 리포지토리를 생성할 수 있습니다.

 

IAM 사용자 생성 및 권한 부여

  • AWS Management Console에서 IAM 사용자에게 CodeCommit에 접근할 수 있는 권한을 부여하세요. 사용자에게 AWSCodeCommitFullAccess 정책을 추가하면 됩니다.

 

HTTPS Git 자격 증명 생성 (선택 사항)

  • AWS Management Console의 IAM 서비스에서 "HTTPS Git 자격 증명"을 생성하여 사용자의 Git 자격 증명을 설정할 수 있습니다. 이 자격 증명을 사용하면 Git 명령을 통해 AWS CodeCommit에 접근할 수 있습니다.
  • https://yes5.tistory.com/42
 

AWS code repository 생성 git

https://git-scm.com/download Git - DownloadsDownloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools

yes5.tistory.com

 

로컬 Git 리포지토리 설정 및 푸시

기존 프로젝트가 있는 경우:

  • 기존 프로젝트 디렉토리로 이동하여 Git 리포지토리를 초기화하고 원격 리포지토리를 추가합니다.
cd /path/to/your/local/repo
git init
git remote add origin https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/my-express-app

 

새 프로젝트를 시작하는 경우:

  • 새로운 디렉토리를 생성하고 Git 리포지토리를 초기화한 후, 원격 리포지토리를 추가합니다.
mkdir my-express-app
cd my-express-app
git init
git remote add origin https://git-codecommit.ap-northeast-2.amazonaws.com/v1/repos/my-express-app

git config --global user.email "you@example.com"
git config --global user.name "Your Name"
  • Git을 처음 설정할 때 사용자 이름과 이메일 주소를 지정해야 합니다. 이 정보를 사용하여 커밋을 할 때 작성자가 누구인지 식별합니다.

 

변경 사항 커밋 및 푸시:

  • 파일을 추가하고 커밋한 후, 변경 사항을 AWS CodeCommit 리포지토리에 푸시합니다.
git add .
git commit -m "Initial commit"

# master 브랜치 생성 및 리모트에 푸시
git branch -M master
git push -u origin master

 

Dockerfile 작성

먼저, Express 애플리케이션을 Docker 컨테이너로 빌드할 수 있도록 Dockerfile을 작성해야 합니다. 프로젝트 루트 디렉토리에 Dockerfile을 추가합니다.

# Node.js 이미지를 기반으로 합니다
FROM node:18

# 작업 디렉토리를 설정합니다
WORKDIR /app

# 패키지 파일들을 컨테이너로 복사합니다
COPY package*.json ./

# 의존성 패키지를 설치합니다
RUN npm install

# 애플리케이션 소스 파일들을 컨테이너로 복사합니다
COPY . .

# 애플리케이션이 실행될 포트를 설정합니다
EXPOSE 3000

# 애플리케이션을 실행합니다
CMD ["node", "index.js"]

 

Docker 이미지 빌드:

Docker 이미지를 빌드합니다:

docker build -t my-express-app .

 

Docker 이미지 실행 (로컬 테스트):

로컬에서 Docker 컨테이너를 실행하여 애플리케이션이 잘 작동하는지 확인합니다:

docker run -p 3000:3000 my-express-app

 

 

AWS ECR(Elastic Container Registry) 설정

ECR 리포지토리 생성:

AWS 관리 콘솔에 로그인하고 ECR 서비스로 이동하여 새 리포지토리를 생성합니다.

 

ECR 로그인:

AWS CLI를 사용하여 ECR에 로그인합니다:

aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin <YOUR_ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com
# <YOUR_ACCOUNT_ID> 입력

 

Docker 이미지 태깅 및 푸시:

ECR 리포지토리에 Docker 이미지를 태깅하고 푸시합니다:

docker tag my-express-app:latest <YOUR_ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com/my-express-app:latest
docker push <YOUR_ACCOUNT_ID>.dkr.ecr.ap-northeast-2.amazonaws.com/my-express-app:latest

# <YOUR_ACCOUNT_ID> 입력

 

ECR에 푸시 된 컨테이너 이미지

 

 

AWS ECS(Elastic Container Service) 설정

ECS 클러스터 등록

  •  이름만 지정하여 클러스터를 생성합니다.

 

IAM 역할 생성

IAM 역할은 ECS 인스턴스가 ECS와 통신할 수 있도록 필요한 권한을 제공합니다.

  • AWS Management Console에서 IAM으로 이동합니다.
  • 역할을 선택하고, 역할 생성을 클릭합니다.
  • EC2를 선택하여 EC2 인스턴스에 사용할 역할을 생성합니다.
  • 정책을 추가하여 ECS 관련 권한을 설정합니다. 필요한 권한은 AmazonEC2ContainerServiceforEC2Role 정책을 포함합니다.
  • 역할을 생성한 후, 역할의 IAM 역할 ARN을 기록해 둡니다.

 

인스턴스에 ECS 에이전트 설치:

  • ECS-optimized AMI를 사용하는 경우, ECS 에이전트가 이미 설치되어 있습니다. ECS-optimized AMI는 Amazon Linux 2 또는 Windows Server AMI로 제공됩니다.
  • EC2 인스턴스를 시작할 때, ECS-optimized Amazon Linux 2 AMI를 선택하여 인스턴스를 생성합니다.

https://aws.amazon.com/marketplace/pp/prodview-do6i4ripwbhs2

 

AWS Marketplace: Amazon ECS-Optimized Amazon Linux 2 (AL2) x86_64 AMI

Operating System Linux/Unix, Amazon Linux 2.0.20240709

aws.amazon.com

위 AMI의 Software Price는 무료입니다. 다른 AMI 사용시 Software 요금이 부과될 수 있습니다.

 

 

EC2 인스턴스를 생성할 때 고급 세부 정보에 IAM 인스턴스 프로파일을 생성해놓은 IAM role으로 선택합니다.

사용자 데이터에 해당 명령문을 입력합니다.

#!/bin/bash
echo ECS_CLUSTER=my-express-app >> /etc/ecs/ecs.config

#my-express-app은 ECS클러스터의 이름으로 클러스터 이름과 맞게 입력합니다.

 

 

ECS Task definition

  •  Json을 사용하여 새 테스크 정의를 생성합니다.

{
  "family": "my-express-app",
  "containerDefinitions": [
    {
      "name": "my-express-app",
      "image": "431997274392.dkr.ecr.ap-northeast-2.amazonaws.com/my-express-app:latest",
      "memory": 256,
      "memoryReservation": 128,
      "cpu": 128,
      "portMappings": [
        {
          "containerPort": 3000,
          "hostPort": 3000,
          "protocol": "tcp"
        }
      ]
    }
  ],
  "cpu": "256",
  "memory": "512",
  "networkMode": "bridge",
  "requiresCompatibilities": ["EC2"]
}
  • Task memory와 cpu 할당을 생성한 인스턴스(t3.micro 2 vCpu, 1GB RAM )이하로 설정해야합니다. 
  • container memory와 cpu 할당은 Task 할당 이하로 설정해야합니다.

 

ECS Cluster Task 실행

  • Task definition에서 정의한 패밀리와 시작유형을 EC2로 지정합니다.

 

ECS Cluster 실행 확인

  • Task가 실행중으로 변경되면, ECS cluster에 배정된 인스턴스ip:3000포트로 확인합니다. ( http:// ) ( https:// )

+ Recent posts