Scenario
1. CodeRepository에 node.js 코드 푸시
2. node.js 코드 ECR로 푸시
3. ECS에서 ECR 컨테이너 지정 후 EC2환경 서비스
4. node.js 코드 실행 확인
사전 준비
Test Node.js 코드
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 설치 및 설정
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
로컬 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> 입력
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
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:// )
'Infra > AWS' 카테고리의 다른 글
AWS AWS Access Key ID 생성 (0) | 2024.08.02 |
---|---|
AWS CLI 설치 및 설정 (0) | 2024.08.02 |
AWS VPC The maximum number of VPCs has been reached. (0) | 2024.07.10 |
AWS VPC private subnet & public subnet NAT gateway, Internet gateway (0) | 2024.07.10 |
lambda - available EBS volume 목록 message to slack (0) | 2024.07.04 |