# 퍼블릭 서브넷에 인터넷 게이트웨이를 연결하는 라우트 형성
서브넷 -> 인터넷 게이트웨이 -> 퍼블릭 라우트 생성 -> 해당 라우트 서브넷 연결 -> 라우팅 ,라우팅 편집
-> 라우팅추가 -> 0.0.0.0/0 (모든트래픽에 허용) -> 인터넷 게이트웨이 -> 해당 만든것
-> 서브넷 연결(길을 만들엇으니 서브넷으로 연결) -> 위 나랑 연결되 있는것 ,아래 놀고 있는 것 (위가 중요) 서브넷 연결편집(위)
-> 퍼블릭 연결 -> 이제 프라이빗 연결할 라우트 생성 -> 프라이빗 연결 -> vpc 로가서 id 눌러서 리소스맵이 잘 연결되있는지 확인
-> 마우스 올렸을때 맞게 연결되어있으면 된것 -> 아무나 들어오면안된다
-> 방화벽 설정 (security group),(NACL,Network Access Control List),(WAF),(ANF)
# 보안그룹 설정 EC2
-> ec2 인스턴스 생성 -> 퍼블릭 -> 아마존 -> t2.micro -> 키페어 -> 네트워크 편집 -> vpc 선택
-> 서브넷 퍼블릭 선택a -> **퍼블릭 ip 자동할당 enable** -> 보안그룹 생성 -> 이름 -> 일단시작(ssh,http 이런거안건들고)
-> security group -> id -> 인바운드 규칙 편집 -> 소스 내ip -> 규칙 추가 -> http (anywhere) ->save
# 만든 인스턴스가 외부 인터넷과 연결이 되어 있는지 확인
만든 인스턴스 id -> 연결 -> ssh 클라이언트 -> 터미널 열어서 pem파일이 들어있는 곳으로 이동 cd
-> find *.pem (잇으면됨 뜸) ->chmod 400 “be-eight-key.pem” 엔터
-> ssh 클라이언트 예 에 젤밑에 있는 ssh -i 옆에 명령어 복사 ,터미널에 붙여놓고 엔터
-> 여기까지가 내가 만든 퍼블릭 a 서브넷을 인터넷에 연결하게 만든것
-> 터미널에 curl https://google.com 을 치면 html 이 날라오면 연결된것
# 프라이빗 서브넷에 NAT 을 연동시켜서 외부로 나가는 것만 가능하게
인스턴스 로 돌아와서 -> ec2 private 를 만들거임 -> 똑같이 하고 네트워크 편집에서 privat a 선택 -> auto assign 안함
-> 이름 -> 설명 -> type 내 ip -> custom icmp -ipv4 -> 내부에서 잘되는지 보기위해서
-> vpc 내부 주소값 보기위해 소스값 10.0.0.0/16 -> id 클릭 -> NAT gateway를 퍼블릭에 배포를 시켜서
프라이빗 경로에 0.0.0.0/0 즉 인터넷으로 나가는 경로가 존재할시 NAT로 가라 경로르잡아줌 -> 나가는 것만 가능
# 설정해놓으 EC2 만들어주는 템플릿 설정
ec2 -> 런치 템플릿 -> create -> 이름, 설명 -> application and os images -> amzon 선택리눅스
-> 인스턴스 타입 ,t2.micro -> key pair -> subnet,pup a sub -> sercurit group,be-pupseg
-> advanced network configuration -> 2행 3열 auto assign,en able
-> advanced details, 젤밑에 코드 복사 붙여넣기 script.sh 안에 코드 붙여넣기
# 포트 번호 추가를 안해서 잘못 주소로 들어가지 못하는거 해결 사례
템플릿 -> id -> 템플릿 실행 -> 인스턴스에서 똑같이 만들어 졌나 확인
-> 퍼블릭 복사 후 -> http://52.79.156.199:8000 -> 안되면 security group 가서 왜안들어가 지는지 확인 -> edit inbound
-> 코드에 8000 포트를 써서 못들어 오는거엿음 , custom tcp, 8000,anywhere 0.0.0.0/0 추가
-> http://52.79.156.199:8000 다시하니 성공 -> 확인 -> 수정해보자 -> 현재 pulic a 에만 있으니까
# 2번째 버젼
-> 템플릿 -> modify -> version2 -> network setting ->
dont include in launch template(서브넷 골고루 줘야 하기에 변경해줌) -> enable(확인) -> 만들기
# 타겟그룹 만들기 (죽은서버인지 확인하는 로드밸런서)
Load balancers -> target group(카테고리) 먼저 만들어야댐 -> create ->vpc체크-> instance
-> 이름:be-eight-tg -> 포트 우리가설정한 8000 -> 트래픽이 죽어있으면 보내면 안됨 -> 그래서 -> 헬스체크란 코드를 만들어 놓았음
-> 200을 입력값을 넣는데 그값이 되돌아오지 않으면 서버가 정상적이지 않은 서버인것 을 확인
-> advanced health cehck -> 200 대부분 약속으로 200을 보낼텐데 그럼 우리서버는 다 죽어있다고 생각하게됨 -> 약속을 잘 지켜서 하는것이 중요 -> 아직 로드밸런서 만들지 않아서 낫인 유즈
# 로드 밸런서 생성
load balancer(카테고리) -> create -> application load balance create -> be-eight-alb
-> scheme(용도) -> internet-facing -> vpc 선택 -> 서브넷 둘다 선택 퍼블릭 선택 필수 ->
-> security group -> default 끄기 -> 퍼블릭 security group 선택 -> listers and routing -> 들어오는것을 어디로 내보낼 거냐
-> 80번 포트를 be-eight-tg 로 보내는 것 , 다른포트가 필요하면 add listener하면됨 -> Review 로 확인 -> create load balancer
-> 이제 application load balancer 로접근하면 만든 ec2 로 접근이 될거임 -> 밑에 resource map - new 에 보면 경로가 뜸
-> DNS name 복사 -> 새창에 http://붙여넣기
# Auto scaling 생성
autocaling (카테고리) -> 주황색 생성 choose lauch template -> be-eight-asg
-> 만든 템플릿 -> latest(최신버전을 쓰겟다)-> next -> vpc 선택 -> pub a,c 선택 ->next
-> attach to an existing load balancer -> 밑에서 선택 -> Health check, turn on elatsic ~~ 체크 -> next -> Desired capacity, 2 -> min : 2 max : 4
->Target tracking scaling policy 체크, target value :20, instance warmup : 100 ->next * 3 -> 리뷰 -> create auto scaling 클릭
-> 인스턴스 눌려 보면 생기고 잇을거임 -> a 와 c존에 생기고 잇을거임 -> load balancer 선택
-> resource map 보면 3개가 붙어 있고 healthy 상태일 거임
# 큰 EC2 생성
-> instance -> launch instanace -> be-eight-loadgenerator -> m5.8xlarge
-> networksetting vpc선택 -> subnet pup a 선택 -> auto sign 가능 -> select security-> pub - sg 선택
-> advanced details 젤밑 코드 복사 -> be load generator id 접속 -> connect
-> sshcilent, ssh 복사 -> 터미널 -> .pem 이 있는 곳으로 이동 cd -> 복사한 코드 붙여넣기 ,yes
-> sudo yum update -y ->sudo yum install python3 pip -y (파이썬설치) -> pip3 install locust
-> vi locustfile.py0 -> i,아까코드 붙,esc->:->wq -> 로드밸런서 접속 -> dbs 네임 복사후 코드에 교체
-> locust -f locustfile.py --headless --host http://be-eight-alb-923018155.ap-northeast-2.elb.amazonaws.com -u 100000 -r 100 (터미널에 복사)
-> instance -> 스케일링 늘어날거임 -> load balancer -> resourec map 보면 변동사항 나타남
-> 터미널 -> 컨트롤 c 종료 후 exit 입력 -> 맵보면 죽은애도잇고 만들어지고잇는애도잇고 다양하게 나타남
# 삭제 과정
-> 인스턴스 삭제 오토스케일리 삭제 로드밸런서 삭제 타겟그룹 삭제 런치탬플릿 삭제
- vpc 및 두개의 퍼블릿 서버 구축
- ec2 및 efs 에 대한 보안 그룹 생성
- elastic file system 만들기
- 첫 번째 EC2 인스턴스 생성 및 EFS 드라이브 마운트
- instance connect 를 사용하여 ec2 에 연결
- efs 드라이브에 파일 생성
- 두번째 인스턴스의 efs 마운트 시연
- clean up
# 실습1 sotarge가 잘생성됬나, 부족하면 더 만들어 붙이는 실습까지, EC2 -> EBS 연결
EC2 -> 인스턴스 -> be-eight-pup-ec2 -> 키페어 -> vpc,subnet pup a, enable,
-> select, pup sg 선택 -> launch -> id -> connect -> ssh client -> 젤밑 복사후
-> 터미널 -> key.pem 위치 찾아서 이동 후 -> 붙여넣기 -> df -h (스토리지 크기보는 명령)
-> dev/xvda1 ~ -> lsblk -o +SERIAL (어떻게 쓰고있는지도 나옴) -> instance
-> Elastic Block Store, Volumes 접속 -> inuse,attach 확인 -> create volume
-> zone 같은거 유의(같아야 붙일수있음 ) -> create volume -> availabe -> 붙여줘야지
-> 선택, 액션 attach volume -> instance 골라 , 이름 dev/sdb 골라 -> 끝
-> 터미널로 가서 다시 확인 -> df -h, lsblk -o +SERIAL (추가된거 확인)
# 떼기
-> 붙인거 선택(volume) -> actions -> detach -> 다햇으면 delete
# 실습 2 EC2 만들때 volume 늘려서 만들어보는 실습
instance, launch -> be-eight-pub-second-ec2(한라인에 같은 네이밍 컨밴션을 쓰게하자)
-> key pair -> 위와 동일시 생성 -> storge -> add new volume 8,16,32 -> launch
-> id -> 하단 storage -> delete 시 데이터는 삭제 안되게 하기위해 한번에 다삭제 안되는거임
-> connect -> 하단 복사 -> 터미널 -> lsblk -o +SERIAL -> 잘붙어잇나 확인 8,16,32
-> ec2 인스턴스 둘다 삭제 -> 새로고침 누르다보면 available 뜨면 전부 삭제
# 실습 3 S3 생성 및 외부와 연결시키는 실습, role 생성, EC2 -> S3
role : aws 에 권한을 주는것이 role
json 버전이 기본적으로 권한을 설명해줌
S3 -> create bucket -> be-eight-s3-kbh(이름 중복 안됨) -> 막아야 접근이 안됨 저장소에
-> 생성 -> id -> 파일하나 올려보고 -> 클로스 -> 방금 올린 파일 -> copy URL -> 못들어감
-> EC2 검색 -> 인스턴스 생성 -> be-eight-s3access-ec2 -> 위와 같이 생성 -> pub
-> 선택 -> action -> security -> modify IAM role -> create role -> AWS servi
-> use case, EC2 -> Next -> AmazonS3FullAccess 검색 -> Next
-> be-eight-s3FullAccess-ec2 -> modfiy iamrole 에서 추가 -> 연결해서 접속(터미널)
-> aws s3 ls (터미널에 입력 버킷리스트 나옴) -> aws s3 ls s3://be-eight-s3-kbh
-> aws s3 cp s3://be-eight-s3-kbh/{파일명} .png s3.script (복사)(다운)
-> vi s3.script -> exit
-> 삭제 ec2 -> s3 삭제 -> delete 안비어있다고 나옴 empty bucket 누르고 -> 나가서 삭제
EBS = Storage type : Block storage , Attachment Type : DAS
S3 = Storage type : Object storage, Attachment Type : SAN
S3 = Storage type : File storage, Attachment Type : NAS
# 실습 4 File storage 만드는 것 EFS
EC2 storage group -> pub id 클릭 -> inbound 확인 -> create security group
-> be-eight-efs-sg ,Security group for efs during Backend 8th -> vpc
-> inbound edit -> Type: NFS -> create ->ec2 에서 들오게 해줄수 잇는게 없어서(efs)
-> 추가해줘야함 -> inbound edit -> add NFS -> efs 소스 선택 -> 들어온거 확인가능
-> EFS 접속 -> create file system -> be-eight-efs -> 밑 선택 -> customize
-> Archive,None -> transition into standard, on first access
-> Encryption 체크박스 해제 -> perfomance, bursting -> next
-> security group 디폴트 제거, efs-sg 선택 -> 서브넷 둘다 퍼블릭 -> 확인후 create
-> 새창, EC2 -> create -> be-eight-efs1-ec2 -> 동일하게 생성 -> pub a
-> select, pub sg -> 0*File system, edit -> efs -> add shared file
-> 자동으로 찍힘 만든거 하나밖에 없어서 -> 이미 보안그룹 만들어서 첫번째 체크박스 해제
-> launch instance -> instance, 있나 확인 -> 생성 ->be-eight-efs2-ec2
-> 동일 하게 생성 -> pub c -> pub sg -> file system edit -> 아까랑 동일, 생성
-> efs1 체크 들어가기 ssh-client -> 터미널 -> cd /mnt/efs/fs1 (들어온거)
-> sudo vi testfile.txt (만들고) -> i -> hello world ,esc,:,wq
-> cat testfile.txt (파일내용보기) -> exit -> efs 2번 -> connect ->ssh
-> cd /mnt/efs/fs1 -> ls
-> ec2 삭제 efs 삭제
# 실습 5 Database, Serverless app 만들어 보기, DynamoDB
Serverless 쓴만큼 돈나옴 만들고 아무것도 안하면 돈안나옴
Dynamo DB -> creat table -> http-crud-tutorial-items -> parition key,id
-> explore items 확인 -> lambda->createfunction->http-crud-tutorial-function
-> python 3.13 -> change default execution role -> create aws policy temp
-> http-crud-tutorial-role -> simple microservice permissons
-> lambdaPython4DynamoDB.py 파일 열기 -> fucntion 만드거에 id 값타고 들어가서
-> 코드 붙여넣기 있떤거 지우고 -> 왼쪽 deploy(배포) 클릭
-> API(application program interface) gateway 검색 -> http api build
-> http-crud-tutorial-api -> next next next review -> create -> GET 선택
-> /items -> create -> /items/{id},create -> Put -> /items,create
-> Delete, /items/{id} , create -> integrations(카테고리) 선택 -> get
-> create an integration 클릭 -> target,lamda funciton -> lambda fucniton
-> create awslambda 라고 초록색으로 떠야함 -> 나머지 choose 에 눌러서 밑에꺼 고르면됨
-> 그러면 aws lambda 4개 일거임 -> 카테고리 가운데 api : 떠잇는거 클릭 ->invoke url 복
-> 복사후 다른곳에 저장해놈 -> curl -x(어떤명령어로 x 를 넣을거냐) -> 터미널 curl 복붙
-> DynamoDB -> tables -> explore items -> 123 나오는거 확인 -> 써봣으니 불러보기
-> curl #불러보기 -> items 만보려면 /123 -> 빈리스트 나오나 확인 다시 해보기
-> 테이블 삭제 백업본 선택하면 안됨 lambda 삭제 api 삭제 iam role(httpcrud,be) 삭제
https://ez0oorn3va.execute-api.ap-northeast-2.amazonaws.com (invoke url)
# 생성
curl -X "PUT" -H "Content-Type: application/json" -d "{\"id\": \"123\", \"price\": 12345, \"name\": \"myitem\"}" https://ez0oorn3va.execute-api.ap-northeast-2.amazonaws.com/items
# 불러보기
curl https://ez0oorn3va.execute-api.ap-northeast-2.amazonaws.com/items
# 지워보기
curl -X "DELETE" https://ez0oorn3va.execute-api.ap-northeast-2.amazonaws.com/items/123 ( 123 지운거임)
# 실습 윈도우 서버에서 mysql 로 보내기
# 리눅스 서버에서 mysql 로 보내기 파이썬 코드에서 db 변경하는것
# windows 서버에서 mysql 로 보내는 실습
# 1. DB 생성
n.viriginia 서버 -> ec2 -> key pair 생성 -> sql-immersion -> .pem이동
-> cloudformation 검색 -> create stack -> crft.yaml 을 받아서 이걸
복사해 줄 거니 -> upload a template file, choose file, 받은거 올리기
-> next -> sqlimmersion-stack -> 비번 : Amazon1! -> ipaAccess :
203.0.113.1/32 -> latestAmild :/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-SQL_2017_Express
-> key 만든거 선택 -> 젤밑에 체크박스만 클릭 -> submit -> info( 기본 상태 )
-> events, 리소스를 게속 만들고 있는중 -> resources 에서 만들어진거 볼수 있음
# 2. RDS 사용
RDS 검색 -> Databse(카테고리) -> create -> microsoft sql server
-> SQL Server Enterprise Edition 선택 -> SQL Server 2019 15.00.4198.2.v1
-> identifier :sqlserver-rdssql -> Credentials Settings -> self man
-> 비번 : Amazon1! (둘다) -> db.m5.xlarge (젤작은거 선택) -> storag.tpye
-> Provisioned IOPS SSD(io1) -> Additional stoarge configuration
-> Availability & durability, No -> connectivity -> vpc 만든거 선택
-> security group 디폴트 제거 -> stack-SQLSecGroup 선택 -> zone a
-> Certificate authority - optional, default -> create database
-> id 클릭 -> 밑에꺼 후 ->endpoint 뜬거 확인 -> rds 에 접속하기 위한 입구 복사
-> 만든 윈도우 드가서 돋보기 클릭 -> ssms 검색 -> 클릭 -> authentication선택
-> sql server autenticaion 선택 -> 서버네임에 복사한거 붙여넣기 안되면 수기작성
-> -> 로그인 : admin 비번 :Amazon1! -> DB 생성 -> 그전에 탭 connect to in
-> 들어가서 Session manager, connect, powershell ->
# GUI
#
EC2 instances -> windows 확인, AMI name -> connect -> rdp client
-> get password -> .pem 올리기 그리고 확인 -> password 복사
-> 위 -> connect using fleet manger 클릭 -> feelt manager remote클릭
-> 패스워드에 복사한거 붙여 넣기 -> 이름 :Administrator -> connect
-> 노스버지니아 서버의 윈도우스에 원격으로 접속 성공 -> RDS 탭 돌아가서
# 리눅스에서 보는 법 RDS
RDS -> create database -> MySQL 선택 -> Availability and durability, Single DB instance선택
-> identifier :mysql-rds -> self managed체크 -> Amazon1!,(둘다)
-> m5large(젤위 젤산거) -> Availability and durability, Single DB instance선택
-> connectivit -> VPC 선택 -> create new 선택 -> new vpc n:rds-sg
-> create -> 콘솔 새창 -> ec2 -> lanunch instances ->
-> bastion-ubuntu-ec2 ,이름 -> newtrok edit -> Public1(서브넷)
-> select sg -> stack-publicsecgroup 선택 -> launch
-> 탭 RDS -> mysql-rds id 클릭 -> 3306포트 쓰는거 인지 -> instsnce 탭
-> 카테고리 security group 접속 -> 이름중에 pupsecgroup id 클릭
-> edit inboud 룰 3306 포트 들어오게 해야하니까 -> ssh,내 ip
-> secruity group 다시 -> 이름 rds sg id 클릭 -> eidt inbound
-> add -> type: mysql/aurora -> 오른쪽 pupsecgroup 찾아서 선택
-> instances -> bastion id -> connect -> ssh-client
-> 터미널 -> pem 저장경로로 이동 (find *.pem 으로 최종확인)
-> chomd 를 권한 설정해야됨 3번째꺼 복사 터미널에 복붙 -> 젤밑 ssh 복,터미널 붙
-> sudo apt-get update (라이브러리 업데이트)
-> sudo apt-get install mysql-server # 우분투에서 mysql 다운받은것
-> sudo mysql (설치됫나 확인) -> exit
-> RDS 탭 -> 엔드포인트 저장 -> 터미널
-> sudo mysql -u admin -p -h (관리자 권한 실행 유저 어드민 비번 : 호스트 :)
호스트에 엔드포인터 저거 입력 h 엔드포인트 -> 비번 : Amazon1!, mysql로 뜨면 된것
-> SHOW DATABASES; -> CREATE DATABASE be_eight; -> USE be_eight;
-> CREATE TABLE student(
studentId INT PRIMARY KEY,
studentName VARCHAR(20));
-> INSERT INTO student (studentId, studentName)
VALUES (1001, 'Dongyoon');
-> INSERT INTO student (studentId, studentName)
VALUES (1002, 'Byunghak');
-> SELECT * FROM student -> exit
-> 터미널
sudo apt update
sudo apt install python3 python3-pip
sudo apt install python3-mysql.connector
->
python3 --version
python3 -c "import mysql.connector; print(mysql.connector.__version__)" 2줄 잘나오면 잘된거 8.0머시기
-> mysqplpython.py 내용 복사
-> vi mysqlPython.py (파일 생성, 및 입력) -> i , 붙여넣기 -> esc + :wq
-> cat mysqlPython.py (파일 내용 확인)
-> python3 mysqlPython.py -> 밑에 엔드포인트 붙여넣기 -> 연결됨!!
-> 1 -> shinbi -> sudo mysql -u admin -p -h 로 드가서
-> mysql 접속 -> USE be_eight 들어가서 -> SELECT * FROM student
-> 신비 들어가있나 확인 끝! exit
#clean up
-> RDS Databases 둘다 삭제 -> modify 젤밑 체크해제 eanalbe delete pro
-> apply immediately 체크 -> modify db instances -> action -> delete
-> create final snapshot 끄기 밑에꺼도 끄기 -> delete me, delet
-> 동일하게 삭제다른하나 -> bastion-unun만 삭제 terminate
-> cloud formation -> 선택 delete -> stack 드가서 resource 누르면 삭제중
-> 서울 -> vpc -> your vpc -> delete
엔드포인트 : mysql-rds.chu2sgcgegol.us-east-1.rds.amazonaws.com
mysqlPython.py
EFS 보안 자체를 EC2 에걸린 security 그룹으로 걸어버리면 ec2 에 통과한것은 그냥 통과시켜버림
EFS :
VPC Endpoint : VPC내에서 인터넷을 거치지 않고 aws 서비스에 접글 할 수 있게 해줌
Database :체계적으로 구성되어 쉽게 접근,관리,업데이트 할 수 있는 데이터의 집합
serverless : 직접 관리하지않고 아마존이 관리하는 것
가용성 (Availability)
Load Balancer(부하 분산기) : 트래픽을 보낼때 어디에 보낼지 확인하는 곳, 받아야 할 트래픽이 넘치면 스케일링 해야함
Reliable : 서버가 정상이고 나의 서비스가 우리가 기대하는 응답을 할 떄
SLO(Service Level Objective) : 서비스 에대한 기대치 목표치 : EC2의 업타임 99.9%
Error Budget
Refactoring
RTO / RPO
RTO (Recovery Point Objective) : 복구시점 목표 : 데이터를 시점으로 복구할 것인가? == 데이터 유실을 얼마나 용인 할 수 있는가?
Scalability : 시스템 네트워크 도는 프로세스가 증가하는 작업량을 효율적으로 처리할 수 있는 능력
주요 유형
Resiliency : 회복 탄력성
Auto scaling group : ec2 인스턴스 집합을 관리하는 논리적 그룹
GB : 네트워크 속도에서사용 , 십진법
GiB: 주로 운영체제 , 메모리에서 사용 , 이진법
지연시간(latency) : 요청부터 응답까지의 시간(ms)
File Storage : 데이터를 파일 형태로 저장하고, 이를 폴더구조 (디렉토리) 내에서 조직화하는스토리지 시스템 ,우리가 지금 쓰는 구조 (일반적)
Block Sotrage : 데이터를 균일한 크기의 블록으로 분할하여 저장하는 스토리지 시스템 (작음)
-> 주차장 : 모두 균일한 크기의 주차공간 -> 덤프트럭에게 여러공간 할당
Object Storage : 데이터를 객체 형태로 저장하고 관리하는 스토리지 아키텍쳐
클라우드에서의 스토리지 타입간의 공통점
Connection type
application load balance(7계층이고)
network load balance(4계층임)
인프라를 만들때 코드 형태로 내가 어떤 것을 할지 리소스를 만들어 놓으면 누구에게나 동일한 인프라를 형성 할 수 있다. 실수를 줄일 수 있다.