---
# System prepended metadata

title: AWS

---

# AWS
단일 서브넷만 구성해도 서비스할 수 있습니다.

## IAM 권한 관리
일반적으로 리소스 사용 할 때 필요한 권한은 AWS docs에 나와있음. 개발 할 때 귀찮아서 어드민 권한 놓긴하는데, 리소스별로 세세하게 조절해야합니당

## 단일 서브넷을 사용한 구성
VPC + Subnet + EC2만 있어도 서비스 하나 띄울 수 있음.
(기본적으로 서브넷은 priave이기 때문에 IGW를 통해 외부와 연결. 각 서버 인스턴스들은 ENI가 있는데, 이건 VMware에서 머신에 IP 할당하는 개념인 것 같슴니다.)
방화벽은 Security group에서 인바운드, 아웃바운드 설정하시면 됩니다.
DB 필요하면 RDS, Elasticache, DynamoDB 사용하시면 됩니다.

이 때, RDS나 Elasticache는 인스턴스가 만들어지는데 보안상 Private으로 관리하기 때문에, 로컬에서 접속하려면 Tunneling을 알아야 함.(퍼블릭도 가능하긴 합니다)

로그는 CloudWatch로 수집하시면 됩니다. (이 부분은 제가 안만들어봄)

도메인을 할당하고 싶으면 Route53으로 DNS 서버 만들어서 외부 호스팅 업체에 DNS 서버 주소 매핑하면 됩니다.
매핑은 EC2나 ELB(로드밸런서), CloudFront(CDN)랑 가능합니다.

## 다중 서브넷 사용한 구성
장애가 나도 유저에게 안정적인 서비스를 하려면 고가용성 설계를 해야하는데, 서브넷을 다중으로 만들면 됨니다(다중 AZ라고도 합니다. 여기서 Avaliablity zone은 물리적인 개념(e.g. 데이터 센터)이고, 서브넷은 VPC에서 할당한 네트웍을 개념적으로 쪼개서 분리하는 것) 그래서 한개의 EC2 인스턴스를 여러 서브넷에 할당할 수 있슴니다.

이렇게 되면 사용할 수 있는게 ELB 입니다. ssl이나 트래픽 분산, 오토스케일링 등 할 수 있게 해줍니다.  ELB를 만들어 서브넷 2개에 연결하고, 그 ELB IP로 사용하면 됩니다. 도메인은 ELB IP주소로 매핑시킬 수 있슴니다.

## 서버리스
서버 인스턴스를 사용하지 않고, Lambda로만 서비스를 제공하는 경우가 있습니다. 이 때 필요한건 API gateway 입니당. API gateway가 http 요청을 받아 람다로 연결 시켜 주는 기능을 합니다.(소켓도 가능하고 여러 기능이 있다고 하는데 http만 사용했음)

API gateway 도메인 연결하고싶으시면, `Custom Domain names`에서 도메인 적고 API gateway 연결해서 생성하면 Cloudfront 주소 나오는데, 그걸 Route53에 매핑하면 됩니다.

보통 람다랑 연결할 때, 콘솔로 안만들고 SAM하고 aws cli로 배포했던 것 같슴니다. 그럼 CloudFormation에서 yaml 읽고 자동으로 생성해줘서 편합니다.

## SSL
Certificate Manager에서 SSL 인증서 발급 받으면 된다고 하는데, 발급하는 과정은 잘 모르겠슴돠.
적용은 EC2의 경우 ELB 생성할 때 타겟그룹하고 연결할 때 인증서 연결하는 부분이 있슴니다.

서버리스는 `custom domain names` 생성할 때 연결할 수 있슴니다.

## 정적 리소스
이부분은 제가 구성 안해서 잘 모르지만 S3에 저장하고, CloudFront(이게 핵심)으로 CDN 서버 쓴다고 합니다.

## CI/CD
이 부분이 제일 고생한 부분인데.. CodeStar, CodePipeline, Codebuild 처럼 Code로 시작하는 애들이 그 역할을 합니다. 저는 서버리스 배포할 때 사용했는데, buildspec.yaml에 정의한 순서대로 명령 실행해서 빌드하고, CloudFormation로 template.yaml에 정의한 리소스 생성해서 연결 시켜주는 식이였습니다. (이건 사용하기 나름 너무 많음 방법이)
