2022-02-28 @이영훈
AWS ECS Fargate로 서비스를 배포하였습니다. AWS ECS는 관리형 컨테이너 오케스트레이션 입니다. ECS로 배포하다보면 네트워크, 보안 부분들 공부가 많이 되었습니다. 설정할 것들이 많아서 미래의 나를 위해 영상으로도 올려 놓았습니다.
express-hello 프로젝트 생성
// app.js
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
})
JavaScript
복사
Dockerfile 생성
# Dockerfile
FROM node:16.13-alpine3.14
WORKDIR /usr/src/app
COPY . .
RUN rm -rf node_modules
RUN npm install
EXPOSE 3000
CMD node app.js
Docker
복사
# .dockerignore
node_modules
dist
Docker
복사
도커 이미지 빌드 후 AWS ECR에 업로드
# 1. AWS 인증 토큰을 가져오고 인증합니다
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin {accountId}.dkr.ecr.ap-northeast-2.amazonaws.com
# 2. 도커 이미지를 빌드합니다
docker build -t express-hello .
# 3. 도커 이미지에 태그를 붙입니다
docker tag express-hello:latest {accountId}.dkr.ecr.ap-northeast-2.amazonaws.com/{ECR_Repostiory}:latest
# 4. ECR에 푸쉬합니다
docker push {accountId}.dkr.ecr.ap-northeast-2.amazonaws.com/{ECR_Repostiory}:latest
Shell
복사
Task Definition 생성
1.
Fargate로 생성합니다
2.
Task Definition을 설정합니다
이름과 운영체제, 권한 등을 설정합니다
ECS Cluster 생성
1.
Fargate로 생성하기 때문에 Networking only로 설정합니다
2.
이름을 설정하고 ‘Create VPC’를 클릭하고 생성합니다
Public Subnet을 2개 이상 생성합니다 - ALB에서 2개 이상의 Subnet을 요구합니다
VPC 추가 설정
1.
모든 Public Subnets에 ‘자동으로 Public IP를 할당’하도록 설정합니다
2.
기본 Security Group의 80, 3000번 포트를 열어줍니다
ALB (Application Load Balancer) 생성
1.
이름과 VPC를 기입합니다
2.
Security Group은 VPC의 기본값을 사용하였습니다
그리고 Target Group은 임의로 생성 후 설정해줍니다 - 생성 후에 바로 삭제할 예정입니다
3.
Target Group을 삭제합니다
Service 생성
1.
종류(Fargate)와 작업 정의, Task 개수 등을 설정합니다
2.
네트워크를 설정합니다
(2-1) VPC를 선택하고 Security Group도 선택합니다
Security Group은 외부에서 접근할 포트 (HTTP 80번 포트)가 열려있는 기본값 Security Group으로 설정합니다.
(2-2) 로드밸러서를 선택합니다
Grace Period (어플이 실행되는 데 필요하신 시간만큼 Health Check를 기다려주는 시간)를 적절하게 선택합니다 그리고 ALB도 선택하고 express 앱의 3000번 포트와 연결할 포트를 선택합니다. HTTP 포트인 80번 포트로 하였습니다.
3.
오토스케일링 설정을 합니다. 저는 따로 설정하지 않았습니다. 실제 프로덕션 환경에서는 필요합니다.
4.
설정한 값들을 확인하고 서비스를 생성합니다.
ALB DNS 주소 접속
정상적으로 Hello World가 출력된 것을 확인할 수 있습니다
Trouble Shooting
Public Subnet에서 자동 public IP 할당 확인
ECS 서비스에서 사용하는 SG(Security Group)이 3000번 포트가 열려있는 지 확인