🧡 AWS
AWS ECS로 컨테이너 관리하기: NLB와 Auto Scaling (feat. DockerHub)
MNY
2024. 11. 5. 19:29
728x90
반응형
해당 단원의 사진은 그냥 참고용!
-> 글로 적혀있는 내용을 참고하시기 바랍니다. ☺
Keyword
- ECS
- NLB
- Auto Scaling
- Fargate vs EC2
Flow
- LoadBalnace 대상 그룹 생성
- LoadBalanc(NLB) 생성
- 태스크 정의
- 클러스터 생성
- 클러스터 -> 서비스 생성
Auto Scaling 종류?
- AWS
- ECS AutoScaling
- EC2 group AutoScaling
- 컨테이너 오토스케일링
- 쿠버네티스
LoadBalance 대상 그룹 생성
- Fargate는 IP 주소 선택 -> IP 주소를 선택하라는 말...
- 사진은 참고용이며, 다를 수 있음.
- 대상 그룹에 아무것도 추가하지 않고 생성하기
- 사진은 참고용이며, 다를 수 있음.
LoadBalance(NLB) 생성
- 인터넷 경계로 선택
- VPC와 서브넷은 기존의 것을 선택
- 우리가 앞서 만들었던 대상그룹 선택
- 포트 : 8080
태스크 정의
- 해당 부분에서 환경변수 설정해주는데 이 부분이 사진이 없음.
- 혹시 모르니 환경변수 하나씩 추가하는 것을 권장…
- 시작 유형은 전부 선택
- 컨테이너 이미지 URL은 도커 허브의 레파지토리명 제대로 입력할 것
- 계정ID / 이미지명 : tag
- 포트 : 8080
- VPC와 서브넷은 기존의 것을 사용
- 보안 그룹도 기존으 것 사용해도 무방
- 8080을 사용하는 보안그룹 생성 권장
- 퍼블릭IP 켜기
클러스터 생성
- 원하는 용량 : 최소 1 최대 3
- VPC와 서브넷은 기존의 것을 사용
- 기존 보안 그룹 사용해도 무방
서비스 생성
- 우리가 만들었던 로드밸런서와 대상그룹 연결하기
back - Jenkins 업데이트
Jenkins 컨테이너 내부에서 AWS CLI 설치
- Jenkins 컨테이너 내부 관리자 권한으로 들어가기:
docker exec -itu0 jenkins
// user 0번은 보통 관리자
- AWS CLI 설치:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
back - Jenkins 업데이트
pipeline {
agent any
environment {
// Docker Hub credentials
DOCKER_HUB_CREDENTIALS = 'docker-hub-credentials'
DOCKER_HUB_REPO = 'ysy561356/today-space-back'
DOCKER_CONTAINER = 'back-today-space-container' // 여기에서 프로퍼티 정의
// Github credentials
GIT_CREDENTIALS_ID = 'github-token'
GIT_BRANCH = 'release'
GIT_URL = 'https://github.com/today-space/today-space-back.git'
// AWS
AWS_CREDENTIALS_ID = 'aws-credentials-id' // 이 값이 Jenkins에 저장된 자격 증명의 ID입니다.
}
stages {
stage('Clone Git Repository') {
steps {
script {
// GitHub 저장소에서 코드 클론
git credentialsId: "${GIT_CREDENTIALS_ID}", branch: "${GIT_BRANCH}", url: "${GIT_URL}"
// gradlew 파일에 실행 권한 부여
sh 'chmod +x gradlew'
// Gradle 빌드
sh './gradlew build'
// destination 디렉토리 생성
sh 'mkdir -p ../destination'
sh 'mkdir -p ../destination/build/libs'
// JAR 파일과 Dockerfile을 특정 경로로 이동
sh 'cp build/libs/*.jar ../destination/build/libs'
sh 'cp Dockerfile ../destination/'
}
}
}
stage('Build and Push Docker Image') {
steps {
script {
dir('../destination') { // 특정 경로로 이동
// Git 태그를 이용해 버전 설정
def gitTag = sh(returnStdout: true, script: 'git describe --tags --always').trim()
def dockerImage = docker.build("${DOCKER_HUB_REPO}:${gitTag}", "./")
// Docker Hub에 로그인
withCredentials([usernamePassword(credentialsId: DOCKER_HUB_CREDENTIALS, usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD')]) {
sh 'echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin'
}
// docker 이미지 태그별 push
dockerImage.push("${gitTag}")
dockerImage.push("latest") }
}
}
}
stage('Restart Docker Compose on EC2') {
steps {
script {
withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', credentialsId: env.AWS_CREDENTIALS_ID]]) {
withAWS(role: 'developUser', roleAccount: '211125316339') {
sh """
aws ecs update-service --region ap-northeast-2 --cluster back-today-space-cluster --service back-today-space-service-v2 --force-new-deployment
"""
}
}
}
}
}
}
post {
always {
cleanWs()
}
success {
echo 'Deployment successful!'
}
failure {
echo 'Deployment failed!'
}
}
}
참고 자료
- AWS CLI 설치
- ECS vs EKS 차이점?
- health Check 관련
- ECS 개념
728x90
반응형