[AWS/Jenkins] AWS 구성

2025. 1. 13. 16:15·Cloud(AWS)

AWS 상세 구성도



AWS 구성에 대한 설명


🔧 전체 아키텍처 설명

1. 외부 접근 및 도메인 관리

  • Route 53: DNS 서비스로, 사용자의 요청을 적절한 리소스로 라우팅합니다.
  • 인터넷: 사용자 트래픽이 인터넷을 통해 유입되고 Route 53을 통해 로드밸런서로 전달됩니다.

2. VPC (Virtual Private Cloud)

  • 전체 네트워크 인프라는 VPC 안에 구성되어 있고, 퍼블릭 및 프라이빗 서브넷으로 구분되어 있습니다.

🌍 퍼블릭 서브넷

  • Bastion Host: 관리용 SSH 접속을 위해 사용되며, 외부에서 내부 리소스 접속을 중계합니다.
  • NAT Gateway: 프라이빗 서브넷의 인스턴스가 인터넷에 접근할 수 있도록 합니다.
  • Application Load Balancer (ALB): 외부 요청을 Auto Scaling 그룹 내 인스턴스로 분산시켜 줍니다.

🔒 프라이빗 서브넷

  • Jenkins: CI/CD 도구로 GitHub에서 푸시된 코드를 감지하여 빌드 및 배포 파이프라인을 실행합니다.
    • GitHub → Jenkins: Push/Trigger
    • Jenkins → Docker: Build 후 이미지 생성
    • Jenkins → ECR(S3 심볼로 표시됨): Docker 이미지 업로드
  • Auto Scaling Group: 생성된 Docker 이미지를 기반으로 애플리케이션 인스턴스를 자동 확장 및 축소합니다.

🐳 Docker 연동

  • GitHub에서 소스코드 푸시 → Jenkins가 감지
  • Jenkins가 Docker 이미지를 생성 → Private 서브넷에 배포

🗄️ Database Subnet

  • 데이터베이스는 별도의 서브넷에 존재하며, 보안 및 접근 제어를 강화한 영역입니다.

🔐 VPN Gateway

  • 사내 네트워크와 AWS 간 보안 연결을 위해 VPN 게이트웨이를 사용하고 있습니다.

✅ 요약

  • CI/CD 파이프라인 구축 (GitHub + Jenkins + Docker)
  • 보안 및 확장성 고려한 AWS 인프라 구성 (VPC, 서브넷, ALB, Auto Scaling)
  • 내부와 외부 모두에 대응 가능한 구조 (VPN + Bastion + NAT)
  • DNS 및 트래픽 분산 (Route 53 + ALB)

프로젝트 구성 단계


정책 및 역할 생성

# 정책 생성:  user18-code-deploy-ec2-policy


# 역할 생성

  • user18-code-deploy-ec2-role

  • user18-code-deploy-service-role


bastion- instance 생성 - (Private Subnet과 통신을 위해서)


보안 자격 증명 구성


1. 액세스 키 만들기

절대 액세스 키를 분실하거나, 공유되어서는 안된다. .csv 파일 다운로드를 하고 나서 잘 챙겨둬야한다. 아래는 AWS CLI 도구를 설치 및 사용하는 방법이기 때문에 참고하면 좋을 것 같다.

 

다운로드


Jenkins EC2 생성

1. 젠킨스 인스턴스 생성

이름: user18-jenkins-ec2
OS: Ubuntu 22.04
인스턴스 : t2.micro
보안그룹 : SSH, WEB
스토리지 : 20GB
설치 소스 : https://github.com/sjh4616/aws-project

?? 어? 이거 젠킨스가 아니네...


# aws-Client로 ssh로 Jenkins 접속 & 도커 설치 (접속 전 config 파일에서 ip 주소 바꾸기) 

ubuntu@ip-172-31-73-69:~/aws-project$ git --version
ubuntu@ip-172-31-73-69:~/aws-project$ git clone https://github.com/sjh4616/aws-project
ubuntu@ip-172-31-73-69:~/aws-project$ cd aws-project/
ubuntu@ip-172-31-73-69:~/aws-project$ ls
ubuntu@ip-172-31-73-69:~/aws-project$ cat Dockerfile
ubuntu@ip-172-31-73-69:~/aws-project$ clear
ubuntu@ip-172-31-73-69:~/aws-project$ cat install-docker.sh

ubuntu@ip-172-31-73-69:~/aws-project$ chmod +x install-docker.sh
ubuntu@ip-172-31-73-69:~/aws-project$ sh ./install-docker.sh
ubuntu@ip-172-31-73-69:~/aws-project$ clear
ubuntu@ip-172-31-73-69:~/aws-project$ exit
ubuntu@ip-172-31-73-69:~/aws-project$ ssh Jenkins
ubuntu@ip-172-31-73-69:~/aws-project$ docker version

# Jenkins에 Container 설치

ubuntu@ip-172-31-73-69:~/aws-project$ cd aws-project/
ubuntu@ip-172-31-73-69:~/aws-project$ docker compose up -d --build

ubuntu@ip-172-31-73-69:~/aws-project$ docker images
ubuntu@ip-172-31-73-69:~/aws-project$ docker ps -a


# Jenkins에 Docker 설치

ubuntu@ip-172-31-73-69:~/aws-project$ docker exec -it jenkins bash
root@7519c2b70850:/# cat command-line
root@7519c2b70850:/# export DOCKER_GID=1000
root@7519c2b70850:/# apt install zip unzip -y
root@7519c2b70850:/# groupadd -g ${DOCKER_GID:-1000} -f docker
root@7519c2b70850:/# usermod -aG docker jenkins

ubuntu@ip-172-31-73-69:~/aws-project$ docker logs jenkins
ubuntu@ip-172-31-73-69:~/aws-project$ docker version
ubuntu@ip-172-31-73-69:~/aws-project$ cd aws-project/
ubuntu@ip-172-31-73-69:~/aws-project$ ls
ubuntu@ip-172-31-73-69:~/aws-project$ cat docker-compose.yaml

# aws CLI 계정 등록

ubuntu@ip-172-31-73-69:~/aws-project$ apt install less -y 
ubuntu@ip-172-31-73-69:~/aws-project$ aws configure
AWS Access Key ID [None]:
      AWS Secret Access Key [None]:
      Default region name [None]: ap-northeast-2
      Default output format [None]: json
ubuntu@ip-172-31-73-69:~/aws-project$ aws sts get-caller-identity 확인

Jenkins 설정

1. Tools 설정 : Java(name: JDK17 / JAVA_HOME: opt/java/openjdk), Maven(name : M3)

2. Plugin 설치

  • Publish over SSH
  • github integration
  • Docker
  • Docker Pipeline
  • docker-build-step
  • AWS CodeDeploy
  • Pipeline : Aws Steps
  • Pipeline : stage view
  • Maven Integration
  • Pipeline Utility Steps
  • Pipeline Stage View


로드밸런서 생성

로드밸런스 생성을 해줬다. 이제 로드밸런스를 통해 auto scaling group 과 jenkins에 접속 하는 방법은 두가지 이다. 하나는 두개를 포트로 구분시켜서 접속하는 방법이 있고, 또 다른 방법은 도메인 헤더를 가지고 접속하는 방법이 있는데, 이번 포스팅에서는 도메인 헤더를 가지고 접속하는 방법을 이용해보겠다. 이제는 도메인 헤더를 통해 접속하기 위해 설정해볼 것이다.

로드 밸런서 생성
이름 : user18-alb
가용영역 : public 1a, public 2c
대상그룹 : user18-jenkins-target-group(상태검사x)

Github 키 생성

1. VM box에서 aws-client에서 git-key 생성

ubuntu@aws-client:~/.ssh$ ssh-keygen -t rsa -C "내 깃허브 이메일 주소"
이름 : git-key

 

2. 공개키 등록하는 방법

ubuntu@aws-client:~/.ssh$ cat git-key.pub

 

3. config 파일에서 github 등록

 

# 깃허브에 공개키 등록 완료


# 깃허브 spring-petclinic private로 설정해주기

 

이제 키가 없으면 접속이 안된다.


젠킨스에 github 접속, aws Cridential 설정


1. github 접속 만들기

ubuntu@aws-client:~/.ssh$ cat git-key

깃허브 ssh 접속할 때 사용하는


2. 젠킨스 aws Credential 설정


원본 ec2 만들기

[원본 인스턴스 생성]
- 이름 : user18-app-ec2
- OS : Ubuntu 22.04
- VOC : 502

- 서브넷 : public 1a
- 인스턴스 : t2.micro
- 기존 보안 그룹 선택

- 보안그룹 : SSH, WEB

 

# config 없이 바로 들어가는 방법

ubuntu@aws-client:~/.ssh$ ssh -i user18-key.pem ubuntu@43.201.51.22

ubuntu@ip-172-31-0-245:~$ sudo apt install vim git curl -y

# 도커 설치

ubuntu@ip-172-31-0-245:~$ vim install-docker.sh
ubuntu@ip-172-31-0-245:~$ chmod +x install-docker.sh
ubuntu@ip-172-31-0-245:~$ ./install-docker.sh


# CodeDeploy-agent 설치 

ubuntu@ip-172-31-0-245:~$ sudo apt install -y ruby
ubuntu@ip-172-31-0-245:~$ wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install
ubuntu@ip-172-31-0-245:~$ chmod +x ./install
ubuntu@ip-172-31-0-245:~$ sudo ./install auto
ubuntu@ip-172-31-0-245:~$ sudo service codedeploy-agent status


# Spring-petClinic application 인스턴스 - 원본 이미지로 생성 


시작 템플릿 생성

이름 : user18-app-launch-template
설명 : initial version
내 AMI : user18-app-image
인스턴스 : t2.micro
키페어 : user18-key
서브넷 : 시작템플릿에 포함하지 않음
보안그룹 : SSH, WEB
고급세부 정보
- IAM 인스턴스 프로파일 : user18-code-deploy-ec2-role


Auto Scaling Group 생성


# spring-petclinic으로 가는 대상 그룹 생성 - 상태검사 x / 인스턴스랑 연결 안함.


로드밸런서 생성

리스너 및 규칙을 보면 80으로 들어가면 jenkins-target으로 들어가는데, 우리는 이전에 도메인으로 들어가게 하기로 했다.두개로 쪼개야한다.

저 도메인으로 접속을 하면 대상그룹에서 spring-petclinic으로 가라는 뜻이다. 기본값일 때는 jenkins로 가고 아니면 spring-petclinic으로 가라는 뜻이다.


기본값 규칙 변경

젠킨스로 가는게 없어졌으니 만들어준다.

 

이렇게 도메인 헤더로 접속을 하였다. 다음으로 router 53을 통해 레코드를 만들것이다.

 

auto scaling group으로 연결하는 spring-petclinic 대상 그룹 생성

 

저작자표시 비영리 변경금지 (새창열림)

'Cloud(AWS)' 카테고리의 다른 글

[AWS | Jenkins(dock)] AWS 구성 - 2  (0) 2025.01.20
CodeDeploy 배포  (0) 2025.01.06
[AWS] CodeDeploy 구성  (0) 2024.12.30
[AWS] AWS Client 만들기  (0) 2024.12.30
[AWS] VPC 생성  (0) 2024.12.23
'Cloud(AWS)' 카테고리의 다른 글
  • [AWS | Jenkins(dock)] AWS 구성 - 2
  • CodeDeploy 배포
  • [AWS] CodeDeploy 구성
  • [AWS] AWS Client 만들기
Kouji
Kouji
Journey to Becoming a Data & Server Engineer
  • Kouji
    Kouji's Data & Server Journey
    Kouji
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Programming
        • Python
        • SQL
      • Data & AI
        • Data Analysis
        • Ai
      • Cloud(AWS)
      • OS
        • Linux
        • Docker
        • Jenkins
        • Ubuntu
        • Window
        • Kubernates
        • Ansible
      • Network
        • NVIDIA
        • Network[이론]
        • Network[GNS3, Packet]
        • Network[On-Premise]
        • Network [L2, L3]
      • 트러블 슈팅
      • Life
        • My Career Stories
        • Personal
      • 개발 + OS 지식 함양
  • 블로그 메뉴

    • 홈
    • 관리 페이지
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AWS
    docker
    dns
    네트워크엔지니어링
    티스토리챌린지
    네트워크엔지니어
    화이팅
    Linux
    네트워크관리사
    OS
    보안
    알고리즘
    서버엔지니어
    웹
    라우팅
    클라우드엔지니어
    오블완
    VMware
    인프라
    도커
    스위치
    서버
    리눅스
    ubuntu
    L3
    네트워크
    CISCO
    시스템엔지니어
    인프라엔지니어
    IT
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kouji
[AWS/Jenkins] AWS 구성
상단으로

티스토리툴바