
AWS 원격강의 - 2주차
CDN : 정적 파일들을 캐싱 해주는 서비스 -> 세계 어디에서든 접속하든 캐싱을 통해 속도를 거의 비슷하게 만들어주는 서비스.
Cloudfront : region 들의 캐싱서버를 하나씩 배치해 놓고 정적파일들을 배치(캐싱) 함.
→ 필요한 곳에 가까운 캐싱 서버 네트워크를 통해 조절해줌.
VPC
: AWS 클라우드내의 네트워크, 사용자가 논리적으로 네트워크를 만들어서 서비스에 적용할 수 있음
: aws 계정을 만들면 기본적으로 default vpc 가 생성됨. 외부 인터넷과 연동이 되어있는 vpc 도 생성.
→ IPV4 CIDR은 IP의 범위를 지정하는 방법.
→ 예를 들어 172.32.0.0/16 이라고 하면 IP의 범위가 172.32.0.0 ~ 172.32.255.255 지정되게 됨.
VPC 를 public, private 두 개를 만들고 각 역할에 맞게 쓰기 위해서는 ip 대역대를 나눠서 쓰면 됨 → CIDR 이용
서브넷 : 연결되는 서버 컴퓨팅 자원들에 내부 ip를 할당
라우팅 테이블 - 라우팅 - igw(인터넷 게이트웨이)
: vpc 는 인터넷 게이트웨이랑 연결, 외부랑 연결됨.
< 중요 >
보안그룹
1) like 방화벽, EC2에 인바운드 할 수 있는 포트를 조절해주는 것
2) 인스턴스에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할
→ VPC - 보안그룹 O
→ S3& 클라우드 : 포트 필요 x, 보안그룹X
인바운드 : 내 리소스로 들어오는 트래픽에 대한 포트 → 소스 : 인바운드의 규칙이 적용될 대상
아웃바운드 : 내가 호출할 때(어떤 api를) 나가는 포트
< 백엔드 구성해보기 : EC2 + ELB >
→ EC2 = Elastic Compute Cloud (인스턴스)
→ 서버에 ram, cpu 등 설정해서 하나의 컴퓨터를 빌린다고 보면 됨.
→ 프로그램들을 설치하고 사용하면 됨.
포트 22 & 소스 0.0.0.0/0
: 0.0.0.0으로 들어오는 모든 대역대를 22번 포트로 들어오는 것을 허용한다.
AWS 에서 기본적으로 SSH에 할당해주는 포트가 22번.
# 방금 받은 내 Keypair의 접근 권한을 바꿔주기
sudo chmod 400 받은키페어를끌어다놓기
# 접속하기
ssh -i 받은키페어를끌어다놓기 ubuntu@퍼블릭 IPv4 주소
# 예시
ssh -i /path/my-key-pair.pem ubuntu@13.125.251.58
ELB : Elastic Load Balancer
1) 서비스중에 EC2의 성능이 부족한 경우 인스턴스를 추가 할 수 있음.
→ Application Load Balancer 는 내부적으로 Nginx 를 이용해서 로드밸런싱 하도록 설계가 되어 있음.
2) 성능이 좋고 빠름
→ mapping(가용영역)은 ac/bd 식으로 크로스형태로 씀. 보통 2zone 이용.
ElasticBeanstalk(EB) : ELB + Auto Scaling + EC2 를 한번에 관리할 수 있는 서비스
→ 로드밸런스를 진행하는데, 계속해서 503, 504 에러가 났다.
원인을 찾아서 보안그룹, 대상그룹, 로드밸런스 모두 지우고 난 후 새로 만들고,
보안그룹의 소스에서
0.0.0.0/0 과 ::/0 을 따로 선택해줬던 것을 사용자지정으로 직접 0.0.0.0/0,::/0 입력해 줬는데 이게 정답인지는 모르겠다!! 해결 돼서 다행 ㅠㅠ
cors = CORS(application, resources={r"/*": {"origins": "*"}}) // 모든 도메인을 허용한다.
→ AWS를 하기전에 공부할 때는 백엔드랑 프론트랑 연결을 localhost 에서 했을 때에는 url이 똑같았다.
왜냐하면 보통 웹에서 웹으로 api 통신하기 때문이다.
그러나 지금은 CloudFront의 url와 EB의 url이 다르기때문에,
백엔드 쪽에서 모든 cors(Cross-Original domain)에 대해 나의 백엔드 api url이 달라도 api요청을 허용하겠다는 뜻.
: EB에서 쓸 환경변수랑 똑같음.
Github Action에서 소스가 업로드 되면 (push), Github Action에서 EB로 배포를 해준다.
배포를 해주려면 EB에 대한 권한이 있어야 하고, 그렇기 때문에 Github Action에 key를 넣어서 권한을 부여함.
aws_access_key_id = os.environ["AWS_ACCESS_KEY_ID"],
aws_secret_access_key = os.environ["AWS_SECRET_ACCESS_KEY"]
위의 코드가 소스에 들어가게 되면 S3와 연동이 가능해짐.
- Github secret에 세팅하는 것과 소스에 세팅하는 건 다른이유 때문이라는 것을 알고 있기!
- cloudfront 도메인 접속할 때, 앞에 https 가 아닌 http 로 접속하기 !
https에서 http로 요청보내는 것이 금지 되어 있어서 에러가 발생함!
개발환경이 Monolithic 에서 MSA 로 변화한 부분을 이해해야 함.
CloudFront를 이용하여 S3 에 저장된 파일들을 지역에 관계없이 빠르게 접근이 가능하도록 할 수 있음.
EC2 는 AWS가 제공하는 서비스 중에 가장 기본적인 컴퓨팅 서비스.
ELB는 기존의 LB기능과 비슷하며 EC2 리소스를 좀 더 효율적으로 사용하게 해줌.
Auto Scaling은 ELB와 EC2의 연결을 좀 더 효율적으로 관리할 수 있게 해줌.
ElasticBeanstalk을 사용하면 인프라 관리의 어려움은 줄이고 좀 더 개발에 집중할 수 있는 환경을 만들수 있음.