패스트캠퍼스/백엔드 웹개발

[PART6] Ch04 개발을 좀 더 수월하게(AWS-EC2 설정)

숲별 2023. 3. 14. 21:04
728x90

CI(Continuous Integration)
자동으로 프로젝트에 코드가 머지된다.

CD(Continuous Deployment)
자동으로 코드가 배포된다.

<필요한 이유>
-개발을 좀 더 수월하게 하기 위함
-개발에 좀 더 집중 가능
-시간 Save(=반복되는 행위를 없애자!)

CI/CD는 devOps파트지만,
서비스 백엔드는 몰라도 되는 게 아님
스크립트, 어떻게 파이프라인이 돌아가는지, 어떤 설정 등이 있는지 알아야
내가 푸시했는데 배포가 안됐을 때 1차적으로 본인이 확인할 수 있어야 함.



AWS는 쉽게 말해 가상클라우드 환경에서 다양한 서비스를 제공해주는 회사
EC2와 다양한 서비스

[인스턴스 시작]
이름, 
애플리케이션 및 OS 이미지 => 우분투, 20.04(프리티어)
인스턴스 유형 =>t2.micro(프리티어)
키 페어(로그인) => 새 키페어 생성(RSA, .pem)

pem키는 주의할 점이 인스턴스 만드는 처음에만 발급가능하고 이후에는 받을 수가 없어서 관리 잘해줘야해
pem를 소유한 자만 들어갈 수 있고 이용해서만 서버 들어갈 수 있는데
사실 그러면 클라우드 서비스 이용하는 입장에서 내가 어떤 장소, 컴퓨터로도 접속가능해야 편할테니까
pem키로 최초로 로그인 후, 우분투에서 비밀번호로도 접속이 가능할 수있게 설정 변경할 예정

 

나머지 설정은 기본으로 둔 채 인스턴스 생성.

1. 태그값 설정해주는 이유는 코드디플로이라는 서비스 사용할 것.
거기서 태그 그룹을 지정해줌. 이 때 코드디플로이에서 설정한 키값이랑 EC2의 태그 키값을 매칭해서 
해당 EC2인스턴스에서 코드 디플로이에 정의된 동작을 실행하게 됨.

 

 

CodeDeploy-Element로 태그 설정

 

 

 

2.인스턴스로 들어올 수 있는 인바운드 설정
CICD랑 관련은 없지만 기본적으로 회사에서도 IP를 제한할 필요가 있음.
IP다 열어두면 무분별한 공격을 받을 수 있기 때문에 한정적으로 IP 열어야 함.

인스턴스 클릭하면 아까 설정한 [태그]도 볼 수 있고 [세부사항]가면
AMI 이름에서 20.04확인 가능
[보안]에서 인바운드 규칙
스프링은 8080포트이기 때문에 추가 ip4/ip6
80포트도 ip4/ip6

80은 사용은 안할 거
8080도 열어는 두되, 실제 테스트는 인스턴스 내에서 컬?명령어로 테스트 할 것.

 

 

 

 

 

3. 인스턴스 같은 경우 해당 ip값이 계속 바뀌게 됨.
클라이언트가 요청할 때 ip를 바꿔서 빌드하고 바뀐 ip반영 계속 해줘야해. 번거롭다.
정적인 ip를 발급 받을 것. 한번 발급받은 ip는 바뀌지 않음.
클라이언트 입장에서도 해당 ip로만 요청하면 됨.
좌측배너에서 네트워크 및 보안-탄력적 IP(Elastic IPs)
탄력적 IP 주소 할당 들어가서 기본값 그대로 할당

 

정적인 ip하나를 할당받았고 이 ip를 인스턴스와 매핑을 해줘야 해.

탄력적 IP주소 연결-인스턴스 선택해주고-연결


참고로 보통 놓치기 쉬운 게 발급받고 사용하지 않거나
인스턴스와 매핑 후 인스턴스만 삭제하고 탄력적ip를 같이 삭제하지 않았다면 여기서 계속 돈이 빠져나감.
반드시 EC2삭제시 탄력적IP도 삭제해야함.

 

다시 인스턴스 가보면 세부사항에 탄력적ip연결된 것 확인 가능

 

 

이제 직접 인스턴스 들어가볼것.
원하는 인스턴스 클릭 후 위에 연결 클릭
SSH 클라이언트 탭에 가면 설명 자세히 나옴.
터미널 켜서 .pem은 다운로드파일에 있으니까 
들어가서

참고)
윈도우 + R : 실행
리눅스 cd 폴더 들어가기

윈도우 명령 프롬프트(cmd)에서 ls = dir
윈도우 명령 프롬프트(cmd)에서 clear = cls


EC2-KEY-PAIR.pem


....윈도우니까 gitbash켜서 
$ cd downloads
복사했던 
ssh -i "EC2-KEY-PAIR.pem" ubuntu@ec2-3-35-250-247.ap-northeast-2.compute.amazonaws.com
붙여넣고 yes
ec2인스턴스 생성, 서버 접근 성공

이제 지금 이 인스턴스는 깡통, 아무런 설정x
프로젝트 필요한 것들을 설정해줘야 함. apt를 이용해서.

sudo apt update && sudo apt upgrade

최신 데이터로 업데이트 해주고 자바 설치 가자.

코드디플로이도 설치 aws 서비스이고 이걸 이용해서 자동으로 배포

22나 16은 aws에서 제공하는 커맨드 명령어가 다르기 때문에 우분투 20.04으로 진행해줘야함.

sudo apt install openjdk-11-jdk

자바 잘 설치됐는지 버전확인 
java -version

이 다음은 필요성에 의한 게 아니라 aws에서 제공하는 가이드라인 문서
첫번째로 루비설치

sudo apt install ruby-full

sudo apt install wget

Ubuntu Server용  CodeDeploy 에이전트 설치라는 aws DOSC가 있음

https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-ubuntu.html

 

Install the CodeDeploy agent for Ubuntu Server - AWS CodeDeploy

Writing the output to a temporary log file is a workaround that should be used while we address a known bug with the install script on Ubuntu 20.04.

docs.aws.amazon.com

위 링크의 사용설명서 보고 순서대로 따라하면 됨.

 

 

https://docs.aws.amazon.com/codedeploy/latest/userguide/vpc-endpoints.html

 

Use CodeDeploy with Amazon Virtual Private Cloud - AWS CodeDeploy

Use CodeDeploy with Amazon Virtual Private Cloud If you use Amazon Virtual Private Cloud (Amazon VPC) to host your AWS resources, you can establish a private connection between your VPC and CodeDeploy. You can use this connection to enable CodeDeploy to co

docs.aws.amazon.com

위 링크에서 서울리전
Region code - Asia Pacific (Seoul) : ap-northeast-2
bucket-name 대체 : aws-codedeploy-ap-northeast-2
2개 찾아서 아래처럼 우분투에 입력

wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install

 

chmod +x ./install

sudo ./install auto > /tmp/logfile

이제 세팅 다 됨.
코드디플로이가 진짜 실행중인지 확인 위해

sudo service codedeploy-agent status

active(running)이라고 뜨는 거 확인.


ec2로 돌아와서 인스턴스에 역할 부여해줄 것.
이 인스턴스는 어떤 것들을 할 수 있다.
AWS의 IAM(Identity and Access Management)가서
Roles을 새로 만들 것.

AWSCodeDeployFullAccess 검색, 선택해서 다음 가면
1단계: 신뢰할 수 있는 엔터티 선택
이 자동으로 json형태로 입력되어있다.
2단계: 권한 추가
에 AWSCodeDeployFullAccess들어있는 것 확인
이전으로 돌아가서

AmazonS3FullAccess 검색해서 선택 다음가면

1단계 json은 그대로 두고
2단계에
AWSCodeDeployFullAccess, AmazonS3FullAccess
2개 권한 들어있는 거 확인 후
역할 생성

다시 ec2로 돌아와서 해당 인스턴스에 연결을 해줘야 함.
인스턴스에 대고 우클릭-보안-IAM 역할 변경(강의랑 달랐음. 강의는 아래 이미지와 같았다.)

 

방금 만든 IAM으로 업데이트

하면 해당 인스턴스에 IAM 설정 끝.

여기까지만 해도 EC2 설정 끝이라고 봐도 됨.

 

 


이제 pem키로 접속 말고 비번으로 접속하게 해보겠음.

 

sudo vi /etc/ssh/sshd_config

/pass치면 
PasswordAuthentication이 검색된다는데...
찾아서
no를 yes로 바꾸고

:wq
치고 나감.

참고(리눅스나 유닉스에서 사용하는 vi 편집기 명령어 총 정리)
https://blockdmask.tistory.com/25

 

[vi 명령어] vi 명령어 정리

[리눅스나 유닉스에서 사용하는 vi 편집기 명령어 총 정리 입니다.] 1. vi 편집기 명령어 전체 구조 살펴보기 2. vi 명령어 총정리 (자주 사용하는 것은 색으로 표시)3. 제가 진짜로 사용하는 vi 알짜

blockdmask.tistory.com


config 파일 수정 끝

우분투에 권한 줘야 해
sudo su -
=>우분투가 root로 바뀌는 명령어

passwd ubuntu
패스워드 입력하면 끝


exit 누르고 나가면 됨.

sudo service ssh restart

진짜 비밀번호로 서버 접속되는지 확인 위해
exit
누르고

원래 cd downloads에서 
ssh -i "EC2-KEY-PAIR.pem" ubuntu@ec2-3-35-250-247.ap-northeast-2.compute.amazonaws.com
로 접속했었는데

ssh ubuntu@ec2-3-35-250-247.ap-northeast-2.compute.amazonaws.com

입력하면 비밀번호 입력하라고 나옴
비밀번호 입력하면 서버 접속 성공
(pem키 있는 downloads 안 들어가도 어디서든 접속 가능)