๐ณ AWS Container Services
Docker ยท ECS ยท ECR ยท EKS ยท App Runner ยท App2Container
์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ์ ์ ์ฒด ์คํ
๋ชฉ์ฐจ
- Docker ๊ธฐ์ด
- AWS์์์ Container ๊ด๋ฆฌ ์๋น์ค
- Amazon ECS (Elastic Container Service)
- Amazon ECR (Elastic Container Registry)
- Amazon EKS (Elastic Kubernetes Service)
- AWS App Runner
- AWS App2Container (A2C)
- Container ์๋น์ค ์ ํ ๊ฐ์ด๋
- ๐ ์ํ ์์ฃผ ์ถ์ ํฌ์ธํธ ์ด์ ๋ฆฌ
- ๐ ์ฐธ๊ณ ์๋ฃ
Docker ๊ธฐ์ด
๊ฐ๋
- ์ ํ๋ฆฌ์ผ์ด์ ์ Container๋ก ํจํค์งํ์ฌ ์ด๋ค OS, ์ด๋ค ํ๊ฒฝ์์๋ ๋์ผํ๊ฒ ์คํ
- โWorks on my machineโ ๋ฌธ์ ํด๊ฒฐ: ๊ฐ๋ฐ/ํ ์คํธ/์ด์ ํ๊ฒฝ ๋ถ์ผ์น ์ ๊ฑฐ
- Use Cases: ๋ง์ดํฌ๋ก์๋น์ค(Microservices), ์จํ๋ ๋ฏธ์ค ์ฑ์ AWS Lift-and-Shift
Docker Image ์ ์ฅ์
| ์ ์ฅ์ | ์ค๋ช |
|---|---|
| Docker Hub | Public ์ ์ฅ์, OS/๊ธฐ์ ๋ณ Base Image ์ ๊ณต |
| Amazon ECR (Private) | AWS ๊ด๋ฆฌํ Private ์ ์ฅ์ |
| Amazon ECR Public Gallery | Public Image ์ ์ฅ์ |
Docker vs. Virtual Machine
Virtual Machine: [Hardware] โ [Hypervisor] โ [Guest OS 1] โ [App A] โ [Guest OS 2] โ [App B]
Docker: [Hardware] โ [Host OS] โ [Docker Engine] โ [Container A: App A] โ [Container B: App B]- Docker: Host OS ์ปค๋ ๊ณต์ โ ๊ฐ๋ณ๊ณ ๋น ๋ฆ
- VM: ๊ฐ๊ฐ ์์ ํ OS ํฌํจ โ ๋ฌด๊ฒ์ง๋ง ๊ฐํ ๊ฒฉ๋ฆฌ
AWS์์์ Container ๊ด๋ฆฌ ์๋น์ค
| ์๋น์ค | ์ญํ | ์ธํ๋ผ ๊ด๋ฆฌ |
|---|---|---|
| Amazon ECS | AWS ์์ฒด ์ปจํ ์ด๋ ํ๋ซํผ | EC2(์ง์ ) ๋๋ Fargate(๊ด๋ฆฌํ) |
| Amazon EKS | ๊ด๋ฆฌํ Kubernetes | EC2(์ง์ ) ๋๋ Fargate(๊ด๋ฆฌํ) |
| AWS Fargate | Serverless ์ปจํ ์ด๋ ํ๋ซํผ | ์ธํ๋ผ ๋ถํ์ |
| Amazon ECR | Container Image ์ ์ฅ์ | - |
| AWS App Runner | ์์ ๊ด๋ฆฌํ ์น์ฑ/API ๋ฐฐํฌ | ์์ ์๋ |
Amazon ECS (Elastic Container Service)
EC2 Launch Type
- ECS Cluster ์์ ์ง์ EC2 Instance๋ฅผ ํ๋ก๋น์ ๋/๊ด๋ฆฌ
- ๊ฐ EC2 Instance์ ECS Agent ์ค์น ํ์ โ ECS Cluster์ ๋ฑ๋ก
- AWS๋ Container์ ์์/์ค์ง๋ง ๋ด๋น
[ECS Cluster] โโโ EC2 Instance 1 (ECS Agent ์คํ) โ โโโ Container A โ โโโ Container B โโโ EC2 Instance 2 (ECS Agent ์คํ) โโโ Container CFargate Launch Type
- EC2 Instance ์์ด ์์ Serverless๋ก ์ปจํ ์ด๋ ์คํ
- Task Definition๋ง ์์ฑํ๋ฉด AWS๊ฐ ์์์ ์ปจํ ์ด๋ ์คํ
- ์ค์ผ์ผ๋ง: Task ์๋ง ๋๋ฆฌ๋ฉด ๋จ โ EC2 Instance ๊ด๋ฆฌ ๋ถํ์
[ECS Cluster] โโโ Fargate Task A โ AWS๊ฐ ์ธํ๋ผ ์๋ ๊ด๋ฆฌ โโโ Fargate Task B โโโ Fargate Task CEC2 Launch Type vs. Fargate ๋น๊ต
| ํญ๋ชฉ | EC2 Launch Type | Fargate |
|---|---|---|
| ์ธํ๋ผ ๊ด๋ฆฌ | ์ง์ EC2 ํ๋ก๋น์ ๋/ํจ์น | โ ๋ถํ์ |
| ๋น์ฉ | EC2 ๋น์ฉ (์ฅ๊ธฐ ์ฌ์ฉ ์ ์ ๋ฆฌ) | Task๋ณ CPU/RAM ์ฌ์ฉ๋ ๊ณผ๊ธ |
| ์ค์ผ์ผ๋ง ๋ณต์ก๋ | EC2 + Task ๋ ๋ ๋ฒจ ๊ด๋ฆฌ | Task๋ง ๊ด๋ฆฌ |
| Spot Instance ํ์ฉ | โ ๊ฐ๋ฅ | โ Fargate Spot ๊ฐ๋ฅ |
| ๋ง์ถค ์ค์ | ๋์ (EC2 ์ง์ ์ ์ด) | ๋ฎ์ |
ECS IAM Roles
๋ ๊ฐ์ง Role์ ๋ช ํํ ๊ตฌ๋ถ โ ์ํ ๋น์ถ
| Role | ์ฌ์ฉ ์ฃผ์ฒด | ๋ชฉ์ |
|---|---|---|
| EC2 Instance Profile | ECS Agent (EC2 Launch Type๋ง ํด๋น) | ECS ์๋น์ค API ํธ์ถ, CloudWatch ๋ก๊ทธ ์ ์ก, ECR ์ด๋ฏธ์ง Pull, Secrets Manager/SSM ์ ๊ทผ |
| ECS Task Role | ๊ฐ ECS Task | Task๋ณ๋ก ๋ค๋ฅธ AWS ์๋น์ค ์ ๊ทผ ๊ถํ ๋ถ์ฌ |
EC2 Instance โโโ ECS Agent (EC2 Instance Profile ์ฌ์ฉ) โโโ ECS Task A (Task Role A: S3 Read ๊ถํ) โโโ ECS Task B (Task Role B: DynamoDB Write ๊ถํ)TIPTask Role์ Task Definition์์ ์ ์. EC2 Instance Profile๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ๋์.
ECS Load Balancer ํตํฉ
| Load Balancer | ์ง์ ์ฌ๋ถ | ๊ถ์ฅ ์ํฉ |
|---|---|---|
| ALB | โ | ๋๋ถ๋ถ์ Use Case (๊ถ์ฅ) |
| NLB | โ | ๊ณ ์ฒ๋ฆฌ๋/๊ณ ์ฑ๋ฅ, AWS Private Link ์ฐ๊ณ |
| CLB | โ (๋น๊ถ์ฅ) | ๊ณ ๊ธ ๊ธฐ๋ฅ ์์, Fargate ๋ฏธ์ง์ |
ECS - Data Volumes (EFS ์ฐ๋)
- ECS Task์ EFS ํ์ผ ์์คํ ๋ง์ดํธ ๊ฐ๋ฅ
- EC2 ๋ฐ Fargate Launch Type ๋ชจ๋ ์ง์
- ์ด๋ค AZ์์ ์คํ๋๋ ๋์ผํ EFS ๋ฐ์ดํฐ ๊ณต์
Fargate + EFS = ์์ Serverless ์๊ตฌ ์คํ ๋ฆฌ์งIMPORTANTAmazon S3๋ ECS Task์ ํ์ผ ์์คํ ์ผ๋ก ๋ง์ดํธ ๋ถ๊ฐ (S3๋ Object Storage).
ECS Service Auto Scaling
ECS Service(Task ๋ ๋ฒจ) Auto Scaling๊ณผ EC2 Instance Auto Scaling์ ๋ณ๊ฐ์.
ECS Service Auto Scaling ์ ์ฑ :
| ์ ์ฑ | ์ค๋ช |
|---|---|
| Target Tracking | ํน์ CloudWatch ์งํ์ ๋ชฉํ๊ฐ ์ ์ง |
| Step Scaling | CloudWatch Alarm ๊ธฐ๋ฐ ๋จ๊ณ๋ณ ์กฐ์ |
| Scheduled Scaling | ํน์ ์ผ์์ ๋ฏธ๋ฆฌ ์ค์ผ์ผ๋ง |
์ค์ผ์ผ๋ง ์งํ:
- ECS Service Average CPU Utilization
- ECS Service Average Memory Utilization
- ALB Request Count Per Target
EC2 Launch Type โ Auto Scaling EC2 Instances
ECS Service๊ฐ ์ค์ผ์ผ ์์๋๋ฉด EC2 ์ธ์คํด์ค๋ ํจ๊ป ๋์ด์ผ ํจ.
| ๋ฐฉ๋ฒ | ์ค๋ช |
|---|---|
| Auto Scaling Group | CPU Utilization ๊ธฐ๋ฐ EC2 Scale Out |
| ECS Cluster Capacity Provider | Task ์คํ์ ํ์ํ ์ฉ๋ ๋ถ์กฑ ์ ์๋์ผ๋ก EC2 ์ถ๊ฐ (ASG์ ์ฐ๋) |
TIPCapacity Provider๊ฐ ๊ถ์ฅ๋จ: Task ์์์ ๋ฐ๋ผ EC2๋ฅผ ์๋ ํ๋ก๋น์ ๋.
ECS ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ
Pattern 1: S3 โ EventBridge โ ECS Task (On-demand)
[์ฌ์ฉ์] โ S3 Upload โ โผ EventBridge Rule [ECS Task ์คํ] โ S3์์ ํ์ผ ๊ฐ์ ธ์ค๊ธฐ โ DynamoDB ์ ์ฅ (ECS Task Role: S3 + DynamoDB ๊ถํ)Pattern 2: EventBridge Schedule โ ECS Task (Batch)
[EventBridge: ๋งค 1์๊ฐ] โ ECS Task ์คํ โ S3 Batch ProcessingAmazon ECR (Elastic Container Registry)
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ์ ์ฅ์ ์ ํ | Private Repository / Public Repository (ECR Public Gallery) |
| ํตํฉ | ECS์ ์์ ํตํฉ, ๋ฐฑ์๋๋ Amazon S3 |
| ์ ๊ทผ ์ ์ด | IAM ๊ธฐ๋ฐ (๊ถํ ์ค๋ฅ โ IAM Policy ํ์ธ) |
| ๋ถ๊ฐ ๊ธฐ๋ฅ | ์ด๋ฏธ์ง ์ทจ์ฝ์ ์ค์บ(Vulnerability Scanning), ๋ฒ์ ๋, Image Tags, Lifecycle ์ ์ฑ |
[Docker Build] โ [docker push] โ [ECR] โ [ECS Pull] โ [Container ์คํ] โ IAM ๊ถํ ํ์ (Pull ์ ECR์ ๋ํ ์ฝ๊ธฐ ๊ถํ)Amazon EKS (Elastic Kubernetes Service)
๊ฐ์
- ์์ ๊ด๋ฆฌํ Kubernetes Cluster ์๋น์ค
- Kubernetes: ์ปจํ ์ด๋ ์๋ ๋ฐฐํฌ, ์ค์ผ์ผ๋ง, ๊ด๋ฆฌ๋ฅผ ์ํ ์คํ์์ค ์์คํ
- ECS์ ์ ์ฌํ ๋ชฉ์ ์ด์ง๋ง ๋ค๋ฅธ API (Kubernetes API)
- Cloud-agnostic โ ๋ค๋ฅธ ํด๋ผ์ฐ๋/์จํ๋ ๋ฏธ์ค์ Kubernetes์ ํธํ
TIP
- ์ ํ ๊ธฐ์ค:
- ์ด๋ฏธ Kubernetes๋ฅผ ์ฌ์ฉ ์ค์ด๊ฑฐ๋ ๋ฉํฐ ํด๋ผ์ฐ๋ ์ ๋ต โ EKS.
- AWS์์ ์๋ก ์์ โ ECS๊ฐ ๋ ๋จ์.
EKS Node Types
| ์ ํ | ์ค๋ช | ๊ด๋ฆฌ ์ฃผ์ฒด |
|---|---|---|
| Managed Node Groups | EKS๊ฐ EC2 Node ์์ฑ ๋ฐ ๊ด๋ฆฌ, ASG ์๋ ๊ด๋ฆฌ | AWS |
| Self-Managed Nodes | ์ฌ์ฉ์๊ฐ EC2 ์์ฑ ํ EKS Cluster์ ๋ฑ๋ก | ์ฌ์ฉ์ |
| AWS Fargate | Serverless, Node ๊ด๋ฆฌ ๋ถํ์ | AWS |
Managed/Self-Managed: On-Demand ๋๋ Spot Instance ๋ชจ๋ ์ง์
EKS Data Volumes
- EKS Cluster์ StorageClass Manifest ์ง์ ํ์
- CSI (Container Storage Interface) ๋๋ผ์ด๋ฒ ์ฌ์ฉ
| ์คํ ๋ฆฌ์ง | Fargate ์ง์ |
|---|---|
| Amazon EBS | โ |
| Amazon EFS | โ |
| FSx for Lustre | โ |
| FSx for NetApp ONTAP | โ |
AWS App Runner
- ์์ค ์ฝ๋ ๋๋ Container Image๋ก๋ถํฐ ์น์ฑ/API๋ฅผ ์์ ์๋์ผ๋ก ๋ฐฐํฌ
- ์ธํ๋ผ ๊ฒฝํ ๋ถํ์ โ ๋น๋, ๋ฐฐํฌ, ์ค์ผ์ผ๋ง, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๋ชจ๋ ์๋
- VPC ์ ๊ทผ ์ง์ โ DB, Cache, ๋ฉ์์ง ํ ์ฐ๊ฒฐ ๊ฐ๋ฅ
[Source Code ๋๋ Container Image] โ โผ [App Runner] โโโ ์๋ ๋น๋ โโโ ์๋ ๋ฐฐํฌ โโโ ์๋ ์ค์ผ์ผ๋ง โโโ ๋ก๋ ๋ฐธ๋ฐ์ โโโ HTTPS ์๋ ์ค์ Use Cases: ์น์ฑ, API, ๋ง์ดํฌ๋ก์๋น์ค, ๋น ๋ฅธ ํ๋ก๋์ ๋ฐฐํฌ
AWS App2Container (A2C)
- Java / .NET ์น ์ ํ๋ฆฌ์ผ์ด์ ์ Docker Container๋ก ๋ณํํ๋ CLI ๋๊ตฌ
- ์จํ๋ ๋ฏธ์ค(๋ฒ ์ด ๋ฉํ, VM) ๋๋ ๋ค๋ฅธ ํด๋ผ์ฐ๋์์ ์คํ ์ค์ธ ์ฑ์ AWS๋ก Lift-and-Shift
- ์ฝ๋ ๋ณ๊ฒฝ ์์ด ๋ ๊ฑฐ์ ์ฑ ํ๋ํ(Modernization) ๊ฐ์
A2C ํ๋ก์ธ์ค
1. Discover & Analyze ์ฑ ์ธ๋ฒคํ ๋ฆฌ ์์ฑ + ๋ฐํ์ ์์กด์ฑ ๋ถ์
2. Extract & Containerize ์ฑ + ์์กด์ฑ ์ถ์ถ โ Docker Image ์์ฑ
3. Create Deployment Artifacts ECS Task Definition / EKS Pod Definition ์์ฑ CloudFormation Template (์ธํ๋ผ: ์ปดํจํ
, ๋คํธ์ํฌ) ์์ฑ CI/CD Pipeline ์์ฑ
4. Deploy to AWS Docker Image โ ECR ๋ฑ๋ก โ ECS / EKS / App Runner ๋ฐฐํฌContainer ์๋น์ค ์ ํ ๊ฐ์ด๋
์ปจํ
์ด๋ ์ด๋ฏธ์ง ์ ์ฅ์ด ํ์ํ๊ฐ?โโโ ์ โ Amazon ECR
์ด๋ค ์ปจํ
์ด๋ ์ค์ผ์คํธ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ?โโโ AWS Native, ๊ฐ๋จํ ์ค์ ์ํจ โ Amazon ECSโ โโโ ์๋ฒ ๊ด๋ฆฌ ์ง์ ํ๊ณ ์ถ์ โ EC2 Launch Typeโ โโโ Serverless ์ํจ โ Fargate Launch Typeโโโโ Kubernetes ์ฌ์ฉ ์ค or ๋ฉํฐ ํด๋ผ์ฐ๋ โ Amazon EKS โโโ ์๋ฒ ๊ด๋ฆฌ ์ง์ ํ๊ณ ์ถ์ โ Managed/Self-Managed Nodes โโโ Serverless ์ํจ โ Fargate
์ฝ๋๋ง ์๊ณ ์ธํ๋ผ๋ ์ ํ ์ ๊ฒฝ ์ฐ๊ธฐ ์ซ์ โ App Runner
๊ธฐ์กด Java/.NET ์ฑ์ ์ปจํ
์ด๋๋ก ์ด์ โ App2Container๐ ์ํ ์์ฃผ ์ถ์ ํฌ์ธํธ ์ด์ ๋ฆฌ
| ํฌ์ธํธ | ๋ด์ฉ |
|---|---|
| EC2 Instance Profile vs Task Role | Instance Profile: ECS Agent์ฉ / Task Role: ๊ฐ Task์ฉ, Task Definition์์ ์ ์ |
| ECS + EFS | ๋ฉํฐ AZ ๊ณต์ ์๊ตฌ ์คํ ๋ฆฌ์ง, Fargate์ ํจ๊ป Serverless ์๊ตฌ ์คํ ๋ฆฌ์ง |
| S3 ECS Task ๋ง์ดํธ | ๋ถ๊ฐ (Object Storage๋ ํ์ผ ์์คํ ๋ง์ดํธ ๋ถ๊ฐ) |
| ECS Capacity Provider | Task ์์์ ๋ฐ๋ผ EC2 ์๋ ํ๋ก๋น์ ๋ |
| ECR ๊ถํ ์ค๋ฅ | IAM Policy ํ์ธ |
| ECR ๋ฐฑ์๋ | Amazon S3 |
| EKS Kubernetes ํน์ง | Cloud-agnostic, ์คํ์์ค |
| EKS Fargate EFS ์ง์ | โ (EBS๋ Fargate์์ ๋ฏธ์ง์) |
| App Runner | ์์ค์ฝ๋/Container Image โ ์ธํ๋ผ ์์ด ์๋ ๋ฐฐํฌ |
| App2Container ๋์ | Java, .NET ์ฑ |
| App2Container ๊ฒฐ๊ณผ๋ฌผ | Docker Image(ECR) + Task/Pod Definition + CloudFormation Template + CI/CD Pipeline |
| Fargate Auto Scaling | EC2 ๊ด๋ฆฌ ๋ถํ์, Task ์๋ง ์กฐ์ |
| ALB vs NLB (ECS) | ๋๋ถ๋ถ ALB / ์ด๊ณ ์ฑ๋ฅ ๋๋ Private Link โ NLB |
| CLB + Fargate | ๋ฏธ์ง์ |
| EKS Spot Instance | Managed/Self-Managed Node์์ ์ง์ |