-
TIL 2023.05.04내일배움캠프 2023. 5. 4. 19:17
VPC란?
VPC는 Virtual Private Cloud의 약자로, AWS에서 제공하는 클라우드 컴퓨팅 리소스를 사용할 수 있는 가상의 사설 네트워크입니다. 사용자는 VPC 내에서 IP 주소 범위, 라우팅 테이블, 서브넷 및 보안 그룹을 설정할 수 있습니다. 또한, VPC를 사용하면 사용자는 가상 서버, 스토리지 및 데이터베이스와 같은 다양한 AWS 리소스를 시작하고 관리할 수 있습니다.
서브넷, 게이트웨이, NAT
- 서브넷은 VPC 내에서 IP 주소 범위를 지정하는 가상의 네트워크입니다. 서브넷은 라우팅 테이블에 연결되며, 각 서브넷은 하나의 라우팅 테이블에만 연결될 수 있습니다. 서브넷을 사용하면 VPC 내에서 다른 서브넷과 격리된 가상 네트워크를 생성할 수 있습니다. 이를 통해 다양한 서비스를 실행하는 데 필요한 보안 요구 사항을 충족시킬 수 있습니다.
- 퍼블릭 서브넷은 인터넷 게이트웨이와 연결된 서브넷으로, 인터넷에 직접 연결되어 있는 서브넷입니다. 퍼블릭 서브넷을 사용하면 인터넷에서 직접 액세스할 수 있는 인스턴스를 실행할 수 있습니다. 이러한 인스턴스는 공인 IP 주소를 사용하며, 인터넷 게이트웨이를 통해 인터넷으로 트래픽을 보낼 수 있습니다.
- 프라이빗 서브넷은 인터넷과 직접 연결되지 않는 가상의 네트워크입니다. 이러한 서브넷에서 실행되는 인스턴스는 인터넷에 직접 액세스할 수 없습니다. 대신, NAT 게이트웨이를 사용하여 인터넷을 통해 인스턴스에 연결하거나, VPC 피어링 등을 사용하여 다른 VPC와 연결할 수 있습니다.
- VPC의 라우팅 테이블은 VPC 내에서 트래픽이 전달되는 방법을 제어하는 데 사용됩니다. 라우팅 테이블은 서브넷과 연결되며, 각 서브넷에는 하나의 라우팅 테이블이 있어야 합니다. 라우팅 테이블은 목적지 IP 주소와 대상 게이트웨이 또는 NAT 게이트웨이와 같은 대상을 매핑합니다. 라우팅 테이블은 여러 개의 라우팅 규칙을 포함할 수 있으며, 이를 사용하여 서브넷에서 트래픽을 전달하는 방법을 제어할 수 있습니다.
- IGW (Internet Gateway)
- VPC와 인터넷 간의 통신을 가능하게 하는 게이트웨이입니다.
- 인터넷을 통해 인터넷 게이트웨이를 통해 VPC 내부로 들어오는 트래픽을 받아 해당 VPC에 연결된 서브넷으로 라우팅합니다.
- NAT (Network Address Translation) Gateway
- 프라이빗 서브넷에서 아웃바운드 인터넷 트래픽을 가능하게 하는 서비스입니다.
- NAT 게이트웨이는 프라이빗 서브넷 내 인스턴스가 인터넷으로 나가는 트래픽을 대신하여 공인 IP 주소를 사용하고, 인터넷 게이트웨이로부터 들어오는 트래픽을 프라이빗 서브넷으로 라우팅합니다.
S3 서비스 소개
Amazon Simple Storage Service(Amazon S3)는 인터넷 스토리지 서비스입니다. 이 서비스는 개발자나 IT 운영자가 웹 규모 컴퓨팅 작업을 수행하는 데 필요한 데이터 저장 공간을 제공합니다. Amazon S3는 웹 사이트 호스팅, 온라인 백업, 데이터 아카이브, 기업 애플리케이션, Big Data 분석 등 다양한 용도로 사용됩니다.
S3 서비스의 사용 예
- 웹 사이트 호스팅
- 멀티미디어 파일 저장 및 스트리밍
- 애플리케이션 데이터 저장
- 백업 및 복원
- 아카이브
S3 서비스의 장점
- 높은 내구성, 가용성 및 안정성
- 손쉬운 사용 및 관리
- 보안성
- 높은 확장성
Buckets?
버킷이란 데이터를 저장하는 가장 상위 레벨의 폴더 형태의 컨테이너입니다!
S3에 저장되는 파일들을 ‘객체’ 라고 부르고 모든 객체는 ‘키’(디렉토리)로 식별됩니다.
prefix/delimiter/object-name s3://my-bucket/my_folder/my_file.txt
Amazon S3에서 버킷은 다음과 같은 목적으로 사용됩니다.
- 데이터를 저장하는 컨테이너 역할
- 객체에 대한 공용 또는 개인적인 접근 권한을 설정하기 위한 위치
- 객체에 대한 특별한 이벤트 알림을 설정하기 위한 위치
- AWS 계정에서 버킷 및 객체 사용에 대한 비용 추적 및 모니터링을 위한 위치
버킷 네이밍 컨벤션
- 대문자 금지, 언더스코어 금지
- 버킷 이름은 3자(최소)에서 63자(최대) 사이여야 합니다.
- 버킷 이름은 소문자, 숫자, 점(.) 및 하이픈(-)으로만 구성될 수 있습니다.
- 버킷 이름은 문자 또는 숫자로 시작하고 끝나야 합니다.
- 버킷 이름에 두 마침표를 나란히 붙여 사용하면 안 됩니다.
- 버킷 이름은 IP 주소 형식(예: 192.168.5.4)을 사용하지 않습니다.
버킷 폴리시
버킷폴리시
- IAM과 유사하며 JSON 형식의 문서입니다.
- 버킷의 모든 객체에 대한 액세스를 제어할 수 있습니다.
- 특정 객체 또는 객체 그룹에 대한 액세스를 제어할 수 있습니다.
- 특정 객체 또는 객체 그룹에 대한 액세스를 제어할 수 있습니다.
- 액세스를 허용하는 IP 주소 또는 범위를 지정할 수 있습니다.
- 액세스할 수 있는 리소스의 범위를 제한할 수 있습니다.
- 암호화된 연결을 사용하도록 강제할 수 있습니다.
폴리시 예시
- Resource : 버킷 혹은 오브젝트
- Effect: Allow 혹은 Deny
- Principal : 대상 유저
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUserToGetBucket", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT-ID:user/USERNAME" }, "Action": "s3:GetBucketLocation", "Resource": "arn:aws:s3:::BUCKET-NAME" } ] }
이 정책은 IAM 사용자 "USERNAME"이
GetBucketLocation 작업을 수행할 수 있도록
지정된 버킷 "BUCKET-NAME"에 대한 액세스를 허용합니다.
ARN
- AWS에서 사용하는 고유한 식별자로 AWS의 모든 리소스에 대한 고유한 식별자 역할을 합니다.
arn:partition:service:region:account-id:resource-id arn:partition:service:region:account-id:resource-type/resource-id arn:partition:service:region:account-id:resource-type:resource-id //예시 arn:aws:iam::123456789012:user/johndoe arn:aws:s3:::my_corporate_bucket/ arn:aws:ec2:us-east-1:123456789012:vpc/vpc-0e9801d129EXAMPLE
- ARN은 다음과 같은 형식으로 구성됩니다.
- arn: AWS 리소스 이름을 가리키는 고정 문자열
- aws: 리소스가 AWS에서 호스팅되는 것을 나타내는 고정 문자열
- service: AWS 서비스 이름을 나타내는 문자열 (예: s3, lambda, ec2 등)
- region: AWS 리전 이름을 나타내는 문자열 (예: us-east-1, ap-northeast-2 등)
- account-id: AWS 계정 ID를 나타내는 숫자
- resource-id: 해당 리소스의 고유 식별자 (예: S3 버킷 이름, Lambda 함수 이름 등)
ACL
- Access Control List : 접근 권한을 가진 경우들을 명시합니다.
S3로 정적 웹사이트 배포하기
index.html
<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>프론트엔드</title> </head> <body> <h1>S3에 배포한 내 정적 사이트</h1> <p> Lorem ipsum dolor sit amet consectetur adipisicing elit. Earum culpa temporibus saepe sunt porro fugiat minima, voluptatem similique esse odit officiis possimus aut, enim necessitatibus. Et facere temporibus excepturi quis. </p> </body> </html>
S3로 배포한 정적 웹사이트에 도메인 달아주기
- 반드시 버킷 이름과 도메인 이름이 같아야 합니다
Cloudfront 소개
Content Delivery Network
장점
- 향상된 속도 : 지리적으로 가까운 서버에 캐싱된 데이터를 갖고 오기 때문에 무척 빠르다.
- 안전 : CDN 서비스를 해주는 업체에서 방화벽을 제공할 뿐만 아니라 DDoS 공격이 와도 서버가 분산되어 있고 캐시기능으로 오리진 서버 트래픽은 늘어나지 않는다.
단점
- 캐시 : 최신 동적 컨텐츠를 제공해야하는 경우에 적합하지 않다.
- 비용이 추가 발생한다
탁월한 시청 경험 제공을 위한 넷플릭스(Netflix)와 전 세계 인터넷 서비스 제공업체(ISP)의 협업 현황 - About Netflix
Cloudfront 사용해보기
- Architecture
- Route53 → Cloudfront → S3
- Route53과 Cloudfront가 연결되기 때문에 더이상 버킷이름을 도메인명과 맞출 필요가 없습니다.
- Distribution 생성 시 CNAME과 root를 잊지마세요!
Invalidation 해보기
- 캐싱이 되어있는 cdn을 초기화하는 방법입니다.
- AWS Management Console에 로그인하고 CloudFront 콘솔을 엽니다.
- 무효화를 생성하려는 배포(distribution)를 선택합니다.
- "Invalidations" 탭을 클릭한 다음 "Create Invalidation" 버튼을 클릭합니다.
- "Create Invalidation" 패널에서 무효화하려는 객체의 경로를 입력합니다. 와일드카드(*)를 사용하여 여러 개의 객체를 동시에 무효화할 수 있습니다.
- "Create Invalidation"을 클릭하여 요청을 제출합니다.
Elastic Beanstalk 소개
EBS 등장배경
- Public Subnet: 로드 밸런서
- Private Subnet: 비즈니스 로직을 처리하는 레이어입니다. 보통 웹 애플리케이션 서버
- Data Subnet: 데이터를 저장하는 레이어입니다. 보통 데이터베이스 서버, 파일 서버 등이 사용
3-tier 아키텍처는 애플리케이션의 확장성과 유연성을 향상시키고, 높은 가용성과 성능을 제공합니다. 각 레이어를 독립적으로 확장할 수 있으며, 부하 분산과 장애 극복 기능을 쉽게 추가할 수 있습니다. 또한, 애플리케이션의 유지보수와 업그레이드가 용이하며, 보안성이 높습니다.
대부분의 웹앱은 같은 아키텍처를 가지고 있다.
서비스를 만들때마다 같은 인프라를 만들어야 한다면?
EBS는 개발자 관점으로 AWS를 접근한다.
- DB설정, 로드밸런서 자동 설정
- 그러면서 자동으로 스케일링(확장성)을 지원
기본적인 초기 설정들을 도와주어서 개발자는 코드에 집중할 수 있게 해주지만 세부설정은 여전히 다 건들일 수 있기 때문에 각 서비스들에 알고 있는 것은 필수입니다!
EBS 개념
- Application
- 애플리케이션 코드, 구성 및 관련 파일
- Elastic Beanstalk는 다양한 프로그래밍 언어와 프레임워크를 지원합니다
- Environment
- Amazon EC2 인스턴스, 데이터베이스 인스턴스, 로드 밸런서 등
AWS Elastic Beanstalk란 무엇입니까? - AWS Elastic Beanstalk (amazon.com)
'내일배움캠프' 카테고리의 다른 글
WIL 내일배움캠프 8주차 (0) 2023.05.05 TIL 2023.05.05 (0) 2023.05.05 TIL 2023.05.03 (0) 2023.05.03 TIL 2023.05.02 (2) 2023.05.02 TIL 2023.05.01 (0) 2023.05.01