[2023.01.10] 개발자 교육 76일 차 : 강의-AWS 학습(Mac) [구디 아카데미]

DaramGee·2024년 1월 10일
0

강의 내용

  • (AWS)EC2 인스턴스 접속(Mac)

  • 키체인 등록 및 파일 다운로드 경로에서 커멘더 실행
  • AWS에서 퍼블릭 Ip 주소 가져오기 : 주의, 인스턴스 시작시 Ip주소는 매번 바뀜!!
1. svr1 퍼블릭접속
ssh -i 키페어이름.확장자 유저명@퍼블릭ip주소

2. svr1 접속 후 svr2 프라이빗접속
ssh -i 키페어명 유저명@svr2프라이빗주소

3. ping 테스트
ping ip주소 (시작)
Ctrl + C (멈춤)
  • 프라이빗 서브넷 사용법

  • 퍼블릭ip : 중복이 없는 유일한 ip, 접속할 수 있음.

  • 프라이빗ip : 중복될 수 있음. 프라이빗ip로 접근할 수 없음. 내부에서만 사용이 가능함.
    - svr2로 접속했을 때, 밖으로 내보낼때 프라이빗ip로 나가는 것이 아니라 svr1의 퍼블릭Ip로 내보낼 수 있음.
    - 프라이빗ip를 쓸 수 있도록 설정을 할 수 있긴 함.
    - EC2에서 svr2 네트워킹을 누르면 서브넷 Id 확인 가능(private으로 써있음)
    - 서브넷 ID(subnet-0e548e7a20f18e4b0 (gdj73-private-subnet)
    - 바꿔나갈 수 있는 퍼블릭ip가 필요함 -> NAT 게이트 웨이 생성

  • 1. NAT 게이트웨이 설정

  • NAT 게이트웨이가 뭘까? 프라이빗 서브넷의 EC2들이 외부 통신(인터넷) 가능하도록 하는 서비스이다.

  • 생성 방법
    - 이름 : 설정
    - 위치 : 퍼블릭 서브넷으로 설정
    - 탄력적 ip 할당 선택 : 고정 ip -> 비용이 더 듦.
    - 생성 후 게이트웨이 목록에서 기본퍼블릭ip 확인가능(고정 ip임) 57.181.124.108
    - 이렇게 게이트웨이 설정하게 되면, 프라이빗 서브넷에서 탄력적 ip로 바꿔서 외부와 소통할 수 있게 됨.

  • 2. 라우팅 테이블 설정

  • 이게 뭐지? 네트워크상의 특정 목적지까지의 거리와 가는 방법등을 명시하고 있는 테이블을 말한다.

  • 서브넷 Id 클릭 -> 아래 라우팅 테이블 클릭 -> 라우팅 테이블 연결 편집 -> 디폴트 라우팅 추가
    - 대상 : 0.0.0.0.0 -> 누구나 연결해준다.
    - 대상 : 생성한 NAT 게이트웨이 선택

  • 이렇게 설정된 뒤 svr2에서 ping 1.1.1.1(아무 ip)을 하는 경우, ping이 되는 것을 확인할 수 있따.


추가 설정

  • svr2 도커 설치(배포판 : Amazon Linux 2 설치)

# sudo amazon-linux-extras install docker
# sudo service  docker start
# sudo usermod -a -G docker ec2-user
# exit
# 재접속
ssh -i 키페어명 ec2-user@svr2프라이빗주소
# 다운로드 및 컨테이너 실행
docker container run -d \
    --name=mysqldb \
    --restart=always \
    -e MYSQL_ROOT_PASSWORD=education \
    -e MYSQL_DATABASE=guestbook \
    -p 3306:3306 \
    yu3papa/mysql_hangul:2.0
  • 위 생성한 컨테이너 사용 위해 svr2 보안에서 mysql 3306을 허가해줄 보안그룹 추가 필요
    - ec2 -> 보안그룹 -> 언바운드 규칙 편집 -> 추가 (mysql/aurora)

이런 과정을 다 거치고 나면?
svr2에 db를 생성해두고, svr1을 통해 접속하며, 인터넷을 사용할 수 있는 설정이 완료된다.
컨테이너를 쓰는 목적?
도커 컨테이너는 경량의 형태이고, 나머지는 공유하고 있어서 같은 환경을 빠르게 구축할 수 있음.(환경을 이미지처럼 두었다가 사용할 수 있는 거라고 생각하면 됨)


SSH 서비스

  • SSH 서비스란?

  • 원격에서 명령을 수행할 수 있는 서비스로 송수신되는 데이터 암호화됨.

  • 기본적으로 TCP 22번 사용

  • 패키지 : openssh (open : 공개된 소스로 서버 프로그램/클라이언트 프로그램)

  • 서버 프로그램 설치

sudo apt install openssh-server
sudo dnf install openssh-server
  • SSH 인증방식

  • 패스워드 인증 : id & pw
  • 공개키 인증 : id & SSH키(개인키) / 공개키 알고리즘(rsa, dsa 중 rsa 사용 예정)
  • SSH 키 생성
ssh-keygen -t rsa -b 2048
저장위치/저장파일명
/home/ubuntu/.ssh/lyr_keypair2
passphrase를 설정할 수 있음.  => SSH키를 보호하기 위한 비밀번호
  • 키 저장 위치와 파일명 지정할 수 있음.
  • (passphrase설정) -> SSH키 보호 위한 비밀번호
  • 생성위치 : ~/.ssh -> 사용자 홈디렉토리로 보면 home/.ssh 에 생성
  • SSH키 기본값 생성 시
    - 개인키 id_rsa -> 개인이 갖고 있음. 데이터 암호화할 대칭키와 교환하여 데이터 암호를 접근하기도 함?!
    - 공개키 id_rsa.pub -> 서버에 줌. 속도가 느림
    - ??? 대칭키 -> 교환의 문제?
  • openssh 서버는 공개키를 authorized_key에 보관함.(키 확인법)
ubuntu@ip-172-31-40-130:~/guestbook$ cd
ubuntu@ip-172-31-40-130:~$ ls
__MACOSX  guestbook  guestbook.zip  ljy_keypair.pem
ubuntu@ip-172-31-40-130:~$ ls .ssh
authorized_keys  known_hosts
ubuntu@ip-172-31-40-130:~$ cd .ssh
ubuntu@ip-172-31-40-130:~/.ssh$ cat authorized_keys
ssh-rsa 키내용 키이름
  • SSH는 SSH 키를 이용해서 세션키(대칭키, 비밀키) 교환하고, 교환된 세션키를 이용해서 사용자 데이터를 암복호화함.
    (참고 : https://spidyweb.tistory.com/310)

  • SSH 접속방식

  • SSH 접속

1.패스워드 인증
ssh 사용자id@서버ip주소
pasward:

2.공개키 인증
ssh -i 개인키 사용자Id@서버ip주소
  • scp 이용한 파일 복사 -> 암호화되어있어서 안전하게 파일 복사 가능(FTP보다 안전)
1.클라이언트에서 서버로 복사하기
scp -i 개인키 복사할파일명 파일명 사용자id@서버ip주소:/복사할 위치

2.서버에서 클라이언트로 복사하기
scp -i 개인키 사용자id@서버ip주소:/복사할 파일 위치/파일명 복사될위치
  • 공개키를 원하는 서버에 복사하기
ssh-copy-id 공개키 사용자id@서버ip  

실습하기

  • 패스워드 인증 사용하기 설정

//경로 이동
cd ~/.ssh

//PasswordAthenitication yes로 수정하고 저장
sudo vi /etc/ssh/sshd_config

//비번 설정 
sudo passwd ubuntu(유저이름)
Changing password for user ec2-user.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

//시스템 재시작 -> 비번적용
sudo systemctl restart sshd

//키없이 로그인 시 패스워드 입력칸이 나오게 됨
원래 방식
ssh -i 키페어이름.확장자 유저명@퍼블릭ip주소

패스워드 인증 방식
ssh 유저명@퍼블릭ip주소 
password : 

ssh ec2-user@172.31.78.46
password:

서버이름 변경, 공개키 복사하기

1.서버이름 바꾸기
sudo hostnamectl set-hostname was-server(svr1)
sudo hostnamectl set-hostname db-server(svr2)
sudo hostnamectl set-hostname was-server2(svr1)

2.키만들기 & 위치 및 이름 지정
ssh-keygen -t rsa -b 2048
/home/ubuntu/.ssh/ljy_keypair2

3.확인하기 
cd .ssh
ubuntu@was-server:~/.ssh$ ls

4.새로만든 공개키 svr2에 복사하기
ssh-copy-id -i 복사할파일.확장자 복사해갈유저명@복사해갈프라이빗주소

파일 복사하기

<scp 이용한 파일복사>

1.클라이언트에서 서버로 복사하기
scp -i 개인키 복사할파일명 유저명@db서버주소:복사할위치
scp -i kyt_keypair.pem  testfile  ubuntu@서버IP주소:/home/ubuntu

2.서버에서 클라이언트로 복사하기
scp -i 개인키 유저명@db서버주소:복사할파일위치/파일명 복사될위치

<공개키를 원하는 서버에 복사하기>
ssh-copy-id 공개키

로드밸런싱

  • EC2 생성(svr3) ->ubuntu로 생성

  • 로드밸런싱?

  • 트래픽이 몰릴 때 나눠서 분산해주는 역할을 해줄 수 있음.

  • 현재 svr1, svr2는 같은 내용을 공유하도록 설계해 두었음.

  • svr3 서버 접속하여 was-server2로 이름 변경

  • was-server2에 guestbook 애플리케이션 서버 실행

  • DB서버는 기존 프라이빗 서브넷의 db-server 실행

  • 웹 브라우저에서 was-server2의 공인 Ip 접속시 방명록 페이지 출력

  • openjdk설치, 게스트북 올리기까지 다만, DB ip는 svr2와 같은 것으로 바꿔주기???

  • 테스트 위한 svr3 설정 및 svr2 db 연결

//자바설치
sudo apt install openjdk-8-jdk
//svr1의 guestvook파일 복사
scp -i ljy_keypair.pem guestbook.zip ubuntu@3.18.183.98.148:home/ubuntu
//unzip 설치
sudo apt install unzip
//guestbook 압축풀기
unzip guestbook.zip
//경로이동 및 환경설정 수정
vi application.properties
ip 수정 - svr2 프라이빗주소 & 비번 수정 education 
//메이븐 배포 환경설정
chmod u+x mvnw mvnw.cmd
//Maven/target Clean 및 build 실행
./mvnw clean package
cd target
sudo java -jar guestbook-0.0.1-SNAPSHOT.jar
  • svr3생성 및 설정을 통해 svr1, svr3에서 svr2의 Db에 접근하여 프로그램을 실행할 수 있게 되었음.
  • 로드 밸런싱 대상그룹 생성

  • 과정 : 생성->인스턴스 -> 이니셜(이니셜-group) & 기본값 -> 다음 -> 대상 svr1, 3 보류중 선택 -> 새 로드블랜서 생성(오른쪽 위) -> 이름(이니셜-loadbalancer), 네트워크매핑 두 개 선택하기, 보안그룹 svr1, 그룹(이니셜-group), 나머진 기본값 -> 생성하기
  • 이렇게 되면 두 서버에서 진행이 되고, 한 서버에 문제가 생겨도 다른 서버에서 처리를 할 수 있도록 설정이 됨.
  • 로드밸런서 주소 : 로드밸런서 -> 세부정보 -> DNS 이름(길다) -> 이 이름으로도 서버에 접속이 된다.
  • 트래픽 상황에 따라 두개의 서버 중 적절한 곳으로 전송이 됨.

AWS 기능 둘러보기

  • Route 53

  • 긴 로드밸런서 주소
  • ip주소 확인하기 위해 커멘더에 아래 명령어 입력하면 값이 나옴
nslookup ljy-loadbalancer-1274835263.ap-northeast-1.elb.amazonaws.com/
Server:		1.1.1.1
Address:	1.1.1.1#53
  • 내가 원하는 도메인을 붙일 수 있음.
  • AWS로 서비스를 할 때 주로 사용하는 서비스(비쌈)
  • 그 외 도메인 구입 가능함(가비아, 등 사이트)

여기서 DNS?
긴 주소 대신에 이름을 사용할 수 있도록 지원해 줌.

  • 보안 그룹

  • 각 EC2들이 보안그룹을 설정할 수 있음. 해당 포트를 열어두어야만 접근이 가능함.

리눅스 명령 확인

//id 조회 및 
id
cat/ect passwd  //ubuntu접속 확인 가능? 
리눅스를 깔아서 사용하는게 아니라면 우분투는 일반사용자로 로그인됨. 

//유저생성
sudo useradd user1
sudo passwd user1 

//유저변경
su - user1  
비번 입력하면 유저변경됨 

//경로 이동 및 파일목록 자세히 보기
$ cd /home/ubuntu
$ ls
__MACOSX  guestbook  guestbook.zip  ljy_keypair.pem
$ ls -l  //자세히 보기(사용자 권한 확인 가능0명령어 확인)
total 248
drwxrwxr-x 2 ubuntu ubuntu   4096 Jan  9 03:53 __MACOSX
drwxr-xr-x 5 ubuntu ubuntu   4096 Jan 10 06:10 guestbook
-rw-r--r-- 1 ubuntu ubuntu 237681 Jan  9 01:52 guestbook.zip
-r-------- 1 ubuntu ubuntu   1678 Jan  9 07:54 ljy_keypair.pem

//user1의 경우 권한이 없음.아래처럼 키파일을 읽을 수 있는 권한이 없음 

//도커 사용자로 추가 & 확인 
$ sudo usermod -aGG docker user1
ubuntu@was-server:~$ id user1
uid=1001(user1) gid=1001(user1) groups=1001(user1),998(docker)

//루트로 이동하기
ubuntu@was-server:~$ sudo -i
root@was-server:~#  //# : root

//파일복사하기(파일이 있는 경로에서) 
cp guestbook.zip /tmp    //root에 tmp 폴더 만들어서 복사하기
cp guestbook.zip tmp     //현위치에 tmp 이름으로 복사됨 

//현 위치에서 다른 경로의 목록 확인할 때
ls /tmp            //검색하고자 하는 경로넣기(절대)
ls ../../tmp       //(상대)

//옮기기 
mv guestbook /tmp/gb    
//mv 파일명/옮길 디렉토리/변경파일명

//다시 옮겨오기
mv /tmp/gb ./guestbook
// 경로및파일명 현위치/변경파일명
  • 오늘 실습 결과

1개의 댓글

comment-user-thumbnail
2024년 1월 12일

안녕하세요 구디아카데미를 수강할까 고민중인 학생인데 혹시 구디아카데미 수업방식이나 환경은 어떤편인지 바로 취업활동을 할 수 있을정도의 실력을 키울수있는지가 궁금합니다

답글 달기