# scalable architecture

## aws1. 목표

> **Autoscale** 가능한 아키텍쳐

## 2. 환경

기본 환경은 AWS를 이용하고, 관련 있는 주요 서비스들은 다음 표와 같다.

| Item           | Description                 |
| -------------- | --------------------------- |
| VPC            | virtual network environment |
| EC2            | Compute instance(server)    |
| AMI            | Machine Image               |
| Security Group | Network In/Outbound rule    |
| ELB            | Load Balancer               |

### 2.1 샘플 구조

![\[출처\] https://bit.ly/2UwnZcD](https://1882013572-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MJenBA6zemtJcbFowIi%2F-MJfHJvpdR09kdMdHmpF%2F-MJip7KcpCmVnsia7nqE%2Faws-env.jpg?alt=media\&token=997e16f7-d2ef-459f-9c34-3e5c0a84156b)

## 3. 설명

### 3.1 AutoScale

AutoScale의 경우 Scale Out을 통한 서버 대수를 늘려 처리 능력을 향상

> AWS : EC2 Auto Scaling\
> Azure : Virtual Machine Scale Sets

#### 3.1.1 구성요소

1. Groups : 인스턴스 수 지정
2. Configuration templates : AMI, 인스턴스 타입, 키페어, 보안그룹 등
3. Scaling options : 동작 조건 설정

#### 3.1.2 동작

![\[출처\] https://craig.goddenpayne.co.uk/task-autoscaling-fargate/](https://1882013572-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MJenBA6zemtJcbFowIi%2F-MJfHJvpdR09kdMdHmpF%2F-MJip7Kbvb1Vj5N5GSHF%2Fautoscaling-group.png?alt=media\&token=111050b4-1f63-4a54-b426-ebfdc6d9d33d)

### 3.2 AMI

AMI(Amazon Machine Image)는 EC2를 처음 구성할때 지정하는 소프트웨어가 구성된 일종의 템플릿

AMI 종류 1. AWS 기본 이미지 2. AWS Marketplace 이미지 3. **Custom 이미지**

### 3.3 프로비저닝(Provisioning)

사용자의 요구에 맞게 서버를 설정해 두었다가 필요 시 서버를 즉시 사용할 수 있는 상태로 미리 준비해 두는 것 (feat. wikipedia)\
ex) JDK나 MySQL을 미리 설치하거나 설정

#### 3.3.1 도구

**3.3.1.1 Packer**

Build Automated Machine Images 1. Builder : 이미지 생성할 플랫폼 지정 (AWS, Azure, Google, docker, vmware, Hyper-V, Naver...)\
2\. Provisioner : 이미지 생성할 때 사용할 빌드 도구 (Shell, Ansible, Chef, Salt, Puppet..) 3. Template : Builder + Provisioner 설정 파일 (output:json)

**3.3.1.2 Ansible**

**Configuration Management**\
Title Bar : Ansible is Simple IT Automation\
Automation for everyone

Packer에서도 물론 shell script를 통해서 구성 관리가 가능하나, script 대비 ansible에서는 파일관리, 패키지설치, 시스템관리에 대한 모듈 지원

**3.3.1.3 terraform**

**Infarstructure Provisioning**\
Use Infrastructure as Code to provision and manage any cloud, infrastructure, or service

계획을 통해 클라우드에 배포(실제적용)전 리소스의 변경되는 내용을 사전 확인 가능

#### 3.3.2 Pipeline

Stamp Pattern

![\[출처\] https://read.acloud.guru/immutable-ami-with-packer-a71694529d60](https://1882013572-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MJenBA6zemtJcbFowIi%2F-MJfHJvpdR09kdMdHmpF%2F-MJip7KeUi4Y8A1Qaomh%2Fpipeline.png?alt=media\&token=9f578412-4eb9-4fb2-9310-b1088ada5657)

![\[출처\] https://blog.gofynd.com/how-we-rebuilt-fynds-infrastructure-3238ec757281](https://1882013572-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MJenBA6zemtJcbFowIi%2F-MJfHJvpdR09kdMdHmpF%2F-MJip7KfeuTMOpk4qmZo%2Fpipeline2.png?alt=media\&token=538e6fa9-bf4e-4fde-b2f4-a24c2003b5d2)

#### 3.4 추가사항

Blue/Green 배포 활용\
Scale Out Pattern<br>

![\[출처\] https://datacenterrookie.wordpress.com/2017/05/10/bluegreen-deployment-on-aws/](https://1882013572-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MJenBA6zemtJcbFowIi%2F-MJfHJvpdR09kdMdHmpF%2F-MJip7KdxSL7pXBk1jHD%2Fbluegreen.gif?alt=media\&token=94e694a3-60fe-4901-8021-8ab90317910e)

Weight Transition Pattern

![\[출처\] https://aws.amazon.com/blogs/startups/upgrades-without-tears-part-2-bluegreen-deployment-step-by-step-on-aws/](https://1882013572-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MJenBA6zemtJcbFowIi%2F-MJfHJvpdR09kdMdHmpF%2F-MJip7KYsRCeB1BJMBMD%2Froute53_weight.jpg?alt=media\&token=2960ebab-b071-4b59-b179-e62e03ec9ab7)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bobphul.gitbook.io/library/cloud/aws-1/scalable-architecture.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
