Jenkins, Docker, Ansible를 이용하여 AWS로 배포를 해보자. 최종적으로는 AWS EC2 인스턴스 3개로 배포하게 될 것이다. 각 인스턴스를 jenkins-server, docker-server, ansible-server 라고 하자. jenkins-server로 사용될 EC2 를 하나 생성하고 해당 EC2에 Java를 설치한 후 해당 서버를 AMI로 만들 것이다. Java가 설치된 AMI로 EC2 서버를 추가로 생성할 것이다.
1. AWS EC2 인스턴스 생성
먼저 AWS로 접속하여 리전이 서울인지 확인한 후에 EC2 탭으로 들어간다.
인스턴스 생성을 위해 인스턴스 시작을 클릭한다.
다음과 같이 설정한 후 인스턴스를 시작한다.
- 인스턴스 이름 : cicd-project-ec2 (추후에 변경 가능)
- OS 이미지 : Quick Start - Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volumne Type (프리티어 사용 가능)
- 인스턴스 유형 : t2.micro
- 키 페어 : cicd-project-key 라는 이름으로 키 페어를 새로 생성
- 네트워크 설정 (기본으로 아래와 같이 설정되어 있을 수도 있지만 다시 한 번 확인하기)
- 방화벽(보안 그룹) : 보안 그룹 생성
- 다음에서 SSH 트래픽 허용 : 0.0.0.0/0
인스턴스가 만들어지기 까지 조금 시간이 걸린다. 정상적으로 생성되었다면 아래와 같이 보인다.
2. EC2 서버에 탄력적 IP 할당
방금 생성한 EC2 인스턴스에 접속해보고자 해당 인스턴스를 클릭 후 연결 시도를 누르면 할당된 퍼블릭 IP 주소가 없다고 하며 연결 버튼이 비활성화 되어있는 것을 볼 수 있다.
탄력적 IP를 할당하지 않으면 인스턴스를 재실행 할 때 마다 IP주소가 바뀌어 번거롭다. 또한 이것을 설정하지 않으면 AWS 사이트를 통해 우리가 생성한 EC2로 접속이 어렵다.
왼쪽 파란색 동그라미 표시된 목록을 클릭하고 섹션을 스크롤하여 네트워크 및 보안 부분의 탄력적 IP를 클릭한다.
오른쪽 상단 탄력적 IP 주소 할당 버튼을 클릭한다.
네트워크 경계 그룹이 ap-northeast-2 로 설정되어 있는지 확인 후 스크롤 해서 할당 버튼을 누르면 된다.
탄력적 IP 주소가 잘 할당이 된 것을 볼 수 있다.
이제 이 IP 주소를 EC2 인스턴스에 연결해보자. 방금 생성한 IP 주소를 선택한 후 작업에서 탄력적 IP 주소 연결을 클릭한다.
1번에서 만들었던 인스턴스는 EC2 인스턴스를 선택하고, 프라이빗 IP 주소는 AWS에서 자동으로 만들어주는 것 같다. 프라이빗 IP 주소도 설정을 하고 연결을 누른다.
다시 EC2 탭으로 와서 다시 인스턴스 연결을 해보면 이제 연결 버튼이 활성화 된 것을 볼 수 있다. 사용자 이름은 ec2-user로 하고 연결을 해보자.
아래와 같이 보인다면 EC2 인스턴스에 잘 접속한 것이다!
3. EC2에 Java 설치
이제 EC2에 Java를 설치해보자.
아래 명령어로 인스턴스에 자바가 설치되어 있는지 확인할 수 있다. 아마 설치되어 있지 않을 것이다.
java -version
아래 명령어로 설치 가능한 자바 버전을 확인할 수 있다.
yum list java*jdk-devel
자바 11버전을 설치하기 위해 다음 명령어를 사용한다.
sudo curl -L https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.rpm -o aws_corretto_jdk11.rpm
sudo yum localinstall aws_corretto_jdk11.rpm
설치 완료 후 아래 명령어를 입력하고 우리가 설치한 버전인 자바 11 버전을 선택해준다.
sudo /usr/sbin/alternatives --config java
이제 다시 자바 버전을 확인하는 명령어를 입력하면 11 버전이 뜰 것이다.
java --version
다운받은 jdk11.rmp 파일은 삭제해준다.
rm -rf jdk11.rmp
(17버전을 설치하고 싶다면 아래 명령어를 입력한다.)
sudo curl -L https://corretto.aws/downloads/latest/amazon-corretto-17-x64-linux-jdk.rpm -o aws_corretto_jdk17.rpm
sudo yum localinstall aws_corretto_jdk17.rpm
4. EC2 인스턴스를 AMI로 만들기
Java까지 설치한 EC2 인스턴스를 AMI로 만들자. 추후에 AMI로 인스턴스를 추가로 생성할 것이다.
먼저 방금 생성한 인스턴스를 중지시킨다.
해당 인스턴스의 작업 - 이미지 및 템플릿 - 이미지 생성을 클릭한다.
이미지 이름만 지정하고 생성한다. 이름은 cicd-project-image로 한다.
이후 AMI 탭에 들어와서 AMI가 잘 생성된 것을 확인한다. 그리고 Name이 비어있는 것을 볼 수 있는데, cicd-project-image로 지정해준다.
5. AMI로 인스턴스 생성하기 전 준비
보안그룹에 태그를 지정해주고 EC2 인스턴스명을 바꿔보자.
생성한 인스턴스를 클릭하여 연결된 보안그룹을 클릭한다.
해당 보안그룹에서 태그 - 태그 관리를 클릭한다.
키는 Name, 값은 cicd-project-sg 로 작성하고 변경 사항 저장을 클릭한다.
아래와 같이 태그로 Name이 잘 적용된 것을 볼 수 있다.
이제 EC2 인스턴스명을 바꾸자. 인스턴스 Name 칸에 아이콘을 클릭하여 cicd-project-ec2 를 cicd-project-jenkins로 바꾸자.
6. AMI로 인스턴스 생성
이제 Java까지 설치된 AMI를 이용해 인스턴스를 생성하자.
EC2 탭에 들어와서 인스턴스 시작을 클릭한다.
맨 처음 EC2를 생성할 때는 Quick Start로 linux를 지정했지만, 우리는 linux에 Java가 설치된 우리가 만든 AMI를 사용할 것이기에 내 AMI 에서 우리가 만든 이미지를 선택해준다.
인스턴스 유형은 t2.micro를 선택한다.
네트워크 설정 부분에서는, 기존 보안 그룹 선택을 클릭하고 cicd-project-jenkins EC2 인스턴스와 연결된 것과 동일한 보안 그룹을 선택한다. 그리고 파란색으로 표시한 편집 버튼을 클릭한다.
퍼블릭 IP 자동 할당을 활성화해준다.
인스턴스는 4개(tomcat, docker, sonarqube, jenkins)를 생성할 것이다. 인스턴스 시작을 눌러준다.
인스턴스가 잘 생성되었다면 아래와 같이 인스턴스명을 바꿔준다.
모든 인스턴스의 VPC가 동일함을 확인한다.
7. ping 테스트
jenkins 서버로 사용할 EC2인스턴스에서 docker 서버로 사용할 EC2 인스턴스로 ping이 잘 되는지 확인해보자.
ping docker-ec2-private-ip-주소
(각 EC2의 private ip 주소는 EC2 탭에서 각 인스턴스를 클릭하면 볼 수 있다. 아래는 예시 사진이다.)
응답이 오지 않는다. control + c 로 종료해준다.
보안그룹에서 인바운드 규칙으로 cicd-project-sg를 추가해줘야 한다.
보안 - 보안그룹 - 해당 보안 그룹으로 들어가서
인바운드 규칙을 아래와 같이 추가하고 저장해준다.
다시 ping을 보내면 잘 되는 것을 확인할 수 있다.
docker 서버로 사용할 EC2에서 jenkins 서버로 사용할 EC2로도 ping이 잘 가는 것을 확인할 수 있다.
'Deploy' 카테고리의 다른 글
[AWS(EC2) + Jenkins + Docker + Ansible] AWS EC2에 Docker 서버 설치하기 (0) | 2024.06.04 |
---|---|
[AWS(EC2) + Jenkins + Docker + Ansible] AWS EC2에 Jenkins 서버 설치하기 (1) | 2024.06.04 |