Jenkins를 활용한 CI/CD 입문 (with.AWS)
defining-nginx-task-on-ecs-jenkins
✅ 1. ECS 테스크 정의 생성하기
- 우리는 테스트를 위해 Nginx 도커 이미지를 기반으로 실습을 진행해 볼 것이다.
- 해당 사이트에 들어가 도커 이미지 버전을 확인한다.
- Nginx 이미지를 해당 버전과 꼭 동일한 버전을 사용하지 않아도 무방하나, 버전 차이로 어려움을 겪지 않기 위해 부득이한 경우를 제외하고는 해당 버전으로 실습을 진행하는 것을 추천한다.
{
"requiresCompatibilities": [
"FARGATE"
],
"family": "LearnJenkinsApp-TaskDefinition-Prod",
"containerDefinitions": [
{
"name": "learnjenkinsapp",
"image": "nginx:1.26-alpine",
"portMappings": [{
"name": "nginx-80-tip",
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp",
"appProtocol": "http"
}],
"essential": true
}
],
"volumes": [],
"networkMode": "awsvpc",
"memory": "512",
"cpu": "256",
"executionRoleArn": ""
}
- 해당 설정은 도커 이미지를 활용하여 Nginx 웹 서버를 AWS Fargate 환경에서 80번 포트로 띄우기 위한 기본 설정임.
- 기타 세부 설정을 전부 다 알 필요는 없으나, 학습하길 원하는 경우 AWS의 문서 혹은 검색을 통하여 설정을 알아보는 것을 추천함.
✅ 2. task-definition-prod.json 파일 생성하기
- 우리 프로젝트 루트 폴더에 aws 라는 이름의 디렉터리 생성
- aws 폴더 내부에
task-definition-prod.json 파일 생성
task-definition-prod.json
{
"requiresCompatibilities": [
"FARGATE"
],
"family": "",
"containerDefinitions": [
{
"name": "learnjenkinsapp",
"image": "nginx:1.26-alpine",
"portMappings": [{
"name": "nginx-80-tip",
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp",
"appProtocol": "http"
}],
"essential": true
}
],
"volumes": [],
"networkMode": "awsvpc",
"memory": "512",
"cpu": "256",
"executionRoleArn": ""
}
- 방금 생성했던 클러스터를 클릭한 뒤 서비스 탭에서 생성 버튼을 클릭한다.
- 이전에 생성했던 테스크 정의 패밀리를 선택하고 서비스 이름을 기입해준다.
- 생성을 클릭하고 몇 분 정도 기다리면 생성이 완료된다.
- 배포가 진행되고 나서 퍼블릭 IP 주소를 클릭하여 Nginx의 배포를 확인해야 한다.
- 하지만, 접속이 되지 않을 것이다. 보안그룹 설정을 하지 않았기 때문이다.