AWS Fargate의 Amazon ECS - Amazon Elastic Container Service

AWS Fargate의 Amazon ECS

AWS Fargate는 Amazon EC2 인스턴스의 서버나 클러스터를 관리할 필요 없이 컨테이너를 실행하기 위해 Amazon ECS에 사용할 수 있는 기술입니다. AWS Fargate를 사용하면 더 이상 컨테이너를 실행하기 위해 가상 머신의 클러스터를 프로비저닝, 구성 또는 조정할 필요가 없습니다. 따라서 서버 유형을 선택하거나, 클러스터를 조정할 시점을 결정하거나, 클러스터 패킹을 최적화할 필요가 없습니다.

Fargate 시작 유형을 사용하여 태스크와 서비스를 실행할 때는 애플리케이션을 컨테이너에 패키징하고, CPU 및 메모리 요구 사항을 지정한 다음, 네트워킹 및 IAM 정책을 정의하고, 애플리케이션을 시작합니다. 각 Fargate 태스크에는 자체 격리 경계가 있으며 다른 태스크와 기본 커널, CPU 리소스, 메모리 리소스 또는 탄력적 네트워크 인터페이스를 공유하지 않습니다.

이 주제에서는 Fargate 태스크와 서비스의 다양한 구성 요소를 설명하고 Amazon ECS에 Fargate를 사용하기 위한 특수한 고려 사항을 살펴봅니다.

AWS Fargate의 Amazon ECS는 다음 리전에서 지원됩니다. 지원되는 가용 영역 ID는 해당되는 경우 명시되어 있습니다.

리전 이름 리전

미국 동부(오하이오)

us-east-2

미국 동부(버지니아 북부)

us-east-1

미국 서부(캘리포니아 북부)

us-west-1 (usw1-az1 & usw1-az3 only)

미국 서부(오레곤)

us-west-2

아프리카(케이프타운)

af-south-1

아시아 태평양(홍콩)

ap-east-1

아시아 태평양(뭄바이)

ap-south-1

아시아 태평양(오사카)

ap-northeast-3

아시아 태평양(서울)

ap-northeast-2

아시아 태평양(싱가포르)

ap-southeast-1

아시아 태평양(시드니)

ap-southeast-2

아시아 태평양(도쿄)

ap-northeast-1(apne1-az1, apne1-az2, apne1-az4만 해당)

캐나다(중부)

ca-central-1(cac1-az1cac1-az2만 해당)

중국(베이징)

cn-north-1(cnn1-az1cnn1-az2만 해당)

중국(닝샤)

cn-northwest-1

유럽(프랑크푸르트)

eu-central-1

유럽(아일랜드)

eu-west-1

유럽(런던)

eu-west-2

유럽(파리)

eu-west-3

유럽(밀라노)

eu-south-1

유럽(스톡홀름)

eu-north-1

남아메리카(상파울루)

sa-east-1

중동(바레인)

me-south-1

AWS GovCloud(미국 동부)

us-gov-east-1

AWS GovCloud(미국 서부)

us-gov-west-1

Amazon ECS로 AWS Fargate를 사용하기 시작하려면 AWS Fargate을 사용하여 Amazon ECS 콘솔 시작하기를 참조하세요.

태스크 정의

Fargate에서 Amazon ECS 태스크는 사용 가능한 모든 태스크 정의 파라미터를 지원하지는 않습니다. 전혀 지원되지 않는 파라미터도 있고 Fargate 태스크에 다르게 작동하는 파라미터도 있습니다.

다음 태스크 정의 파라미터는 Fargate 태스크에서 유효하지 않습니다.

  • disableNetworking

  • dnsSearchDomains

  • dnsServers

  • dockerSecurityOptions

  • extraHosts

  • gpu

  • ipcMode

  • links

  • pidMode

  • placementConstraints

  • privileged

  • systemControls

다음 태스크 정의 파라미터는 Fargate 태스크에서 유효하지만 유의해야 할 제한이 있습니다.

  • linuxParameters – 컨테이너에 적용되는 Linux 전용 옵션을 지정할 때 capabilitiesadd 파라미터는 지원되지 않습니다. devices, sharedMemorySizetmpfs 파라미터는 지원되지 않습니다. 자세한 내용은 Linux 파라미터 섹션을 참조하세요

  • volumes – Fargate 태스크는 바인드 탑재 호스트 볼륨만 지원하므로 dockerVolumeConfiguration 파라미터는 지원되지 않습니다. 자세한 내용은 Volumes 섹션을 참조하세요

태스크 정의가 Fargate으로 사용하는 데 유효한지 확인하려면 태스크 정의를 등록할 때 다음을 지정할 수 있습니다.

  • AWS Management Console에서 기능 필요 필드에 FARGATE를 지정합니다.

  • AWS CLI에서 --requires-compatibilities 옵션을 지정합니다.

  • Amazon ECS API에서 requiresCompatibilities 플래그를 지정합니다.

네트워크 모드

Fargate에 대한 Amazon ECS 태스크 정의를 사용하려면 네트워크 모드를 awsvpc로 설정해야 합니다. awsvpc 네트워크 모드는 각 태스크에 고유의 탄력적 네트워크 인터페이스를 제공합니다 자세한 내용은 AWS Fargate에 대한 Amazon Elastic Container Service 사용 설명서Fargate 태스크 네트워킹을 참조하세요.

서비스를 생성하거나 태스크를 수동으로 실행할 때 네트워크 구성도 필요합니다. 자세한 내용은 AWS Fargate에 대한 Amazon Elastic Container Service 사용 설명서Fargate 태스크 네트워킹을 참조하세요.

태스크 CPU 및 메모리

Fargate에 대한 Amazon ECS 태스크 정의를 사용하려면 태스크 레벨에서 CPU와 메모리를 지정해야 합니다. Fargate 태스크에 대해 컨테이너 레벨에서 CPU와 메모리를 지정할 수도 있지만, 이 방법은 선택 사항입니다. 대부분의 사용 사례에서는 태스크 레벨에서 이러한 리소스를 지정해야 합니다. 유효한 태스크 레벨 CPU 및 메모리 조합은 아래 표와 같습니다.

CPU 값

메모리 값

256(.25 vCPU)

0.5GB, 1GB, 2GB

512(.5 vCPU)

1GB, 2GB, 3GB, 4GB

1024(1 vCPU)

2GB, 3GB, 4GB, 5GB, 6GB, 7GB, 8GB

2048(2 vCPU)

4~16GB(1GB 증분)

4096(4 vCPU)

8~30GB(1GB 증분)

태스크 리소스 제한

Fargate에 대한 Amazon ECS 태스크 정의는 컨테이너에 설정할 리소스 제한을 정의하는 ulimits 파라미터를 지원합니다.

Fargate에 호스팅되는 Amazon ECS 태스크는 Fargate가 재정의하는 nofile 리소스 제한 파라미터를 제외하고 운영 체제에서 설정한 기본 리소스 제한 값을 사용합니다. nofile 리소스 제한은 컨테이너가 사용할 수 있는 열린 파일 수에 대한 제한을 설정합니다. 기본 nofile 소프트 제한은 1024이고 하드 제한은 4096입니다.

두 배로 늘어난 사용자 지정 nofile 제한을 정의하는 방법을 나타내는 예제 태스크 정의 코드 조각은 다음과 같습니다.

"ulimits": [ { "name": "nofile", "softLimit": 2048, "hardLimit": 8192 } ]

조정할 수 있는 다른 리소스 제한에 대한 자세한 내용은 리소스 제한 섹션을 참조하세요.

Logging

Fargate에 대한 Amazon ECS 태스크 정의는 로그 구성에 awslogs, splunk, firelens 로그 드라이버를 지원합니다.

awslogs 로그 드라이버는 Amazon CloudWatch Logs로 로그 정보를 보낼 Fargate 태스크를 구성합니다. 다음은 awslogs 로그 드라이버가 구성되는 태스크 정의 조각을 보여줍니다.

"logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }

태스크 정의에서 awslogs 로그 드라이버를 사용하여 컨테이너 로그를 CloudWatch Logs로 보내는 방법에 대한 자세한 내용은 awslogs 로그 드라이버 사용 섹션을 참조하세요.

태스크 정의의 firelens 로그 드라이버에 대한 자세한 내용은 사용자 지정 로그 라우팅 섹션을 참조하세요.

태스크 정의에서 splunk 로그 드라이버를 사용하는 방법에 대한 자세한 내용은 예: splunk 로그 드라이버 섹션을 참조하세요.

Amazon ECS 태스크 실행 IAM 역할

Fargate를 사용하여 Fargate 태스크가 Amazon ECR로 API 호출을 보내도록 허용할 수 있는 태스크 실행 IAM 역할 옵션이 있습니다. API 호출은 컨테이너 이미지를 풀링하고 CloudWatch를 호출하여 컨테이너 애플리케이션 로그를 저장합니다. 자세한 내용은 Amazon ECS 태스크 실행 IAM 역할 섹션을 참조하세요

예제 태스크 정의

다음은 Fargate 시작 유형을 사용하여 웹 서버를 설정하는 예제 태스크 정의입니다.

{ "containerDefinitions": [ { "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "entryPoint": [ "sh", "-c" ], "essential": true, "image": "httpd:2.4", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "name": "sample-fargate-app", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ] } ], "cpu": "256", "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "family": "fargate-task-definition", "memory": "512", "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ] }

태스크 스토리지

Fargate에서 호스팅되는 Amazon ECS 태스크의 경우 다음과 같은 스토리지 유형이 지원됩니다.

  • 영구 스토리지용 Amazon EFS 볼륨. 자세한 내용은 Amazon EFS 볼륨 섹션을 참조하세요

  • 휘발성 스토리지용 바인드 마운트. 자세한 내용은 바인드 탑재 섹션을 참조하세요

태스크 및 서비스

Fargate에 대한 Amazon ECS 태스크 정의를 준비한 후 서비스를 생성할 때 결정을 내려야 할 몇 가지 사항이 있습니다.

태스크 네트워킹

Fargate에 대한 Amazon ECS 태스크에는 awsvpc 네트워크 모드가 필요합니다. 이 모드는 각 작업에 탄력적 네트워크 인터페이스를 제공합니다. 이 네트워크 모드를 사용하여 태스크를 실행하거나 서비스를 생성할 때는 네트워크 인터페이스를 연결할 하나 이상의 서브넷과 네트워크 인터페이스에 적용할 하나 이상의 보안 그룹을 지정해야 합니다.

퍼블릭 서브넷을 사용하는 경우에는 네트워크 인터페이스에 퍼블릭 IP 주소를 제공할지를 결정합니다. 퍼블릭 서브넷의 Fargate 태스크가 컨테이너 이미지를 풀링하려면 인터넷에 대한 경로 또는 인터넷으로 요청을 라우팅할 수 있는 NAT 게이트웨이를 사용하여 태스크의 탄력적 네트워크 인터페이스에 퍼블릭 IP 주소를 할당해야 합니다. 프라이빗 서브넷의 Fargate 태스크가 컨테이너 이미지를 풀링하려면 인터넷으로 요청을 라우팅할 수 있는 NAT 게이트웨이가 서브넷에 있어야 합니다. Amazon ECR에서 컨테이너 이미지를 호스팅하면 인터페이스 VPC 엔드포인트를 사용하도록 Amazon ECR을 구성할 수 있습니다. 이 경우 태스크의 프라이빗 IPv4 주소는 이미지 풀링에 사용됩니다. Amazon ECR 인터페이스 엔드포인트에 대한 자세한 내용은 Amazon Elastic Container Registry 사용자 설명서Amazon ECR 인터페이스 VPC 엔드포인트( AWS PrivateLink )를 참조하세요.

다음은 Fargate 서비스에 대한 networkConfiguration 섹션의 예입니다.

"networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-12345678" ], "subnets": [ "subnet-12345678" ] } }

서비스 로드 밸런싱

필요하다면 Elastic Load Balancing을 사용하여 서비스의 태스크에 트래픽을 균등하게 분산하도록 Fargate의 Amazon ECS 서비스를 구성할 수 있습니다.

Fargate의 Amazon ECS 서비스는 Application Load Balancer와 Network Load Balancer 로드 밸런서 유형을 지원합니다. Application Load Balancer는 HTTP/HTTPS(또는 계층 7) 트래픽을 라우팅하는 데 사용합니다. Network Load Balancer는 TCP 또는 UDP(또는 계층 4) 트래픽을 라우팅하는 데 사용합니다. 자세한 내용은 로드 밸런서 유형 섹션을 참조하세요

이러한 서비스에 대한 대상 그룹을 생성할 때 대상 유형을 instance가 아닌 ip로 선택해야 합니다. 이는 awsvpc 네트워크 모드를 사용하는 작업이 Amazon EC2 인스턴스가 아닌 탄력적 네트워크 인터페이스와 연결되기 때문입니다. 자세한 내용은 서비스 로드 밸런싱 섹션을 참조하세요.

Network Load Balancer를 사용하여 Fargate의 Amazon ECS 태스크로 UDP 트래픽을 라우팅하는 태스크는 플랫폼 버전 1.4를 사용할 때 다음의 리전에서 시작된 태스크에 대해서만 지원됩니다.

  • 미국 동부(버지니아 북부) - us-east-1

  • 미국 서부(오레곤) - us-west-2

  • EU(아일랜드) - eu-west-1

  • 아시아 태평양(도쿄) - ap-northeast-1

프라이빗 레지스트리 인증

Fargate에 대한 Amazon ECS 태스크는 기본 인증을 사용하여 Docker Hub를 비롯한 프라이빗 이미지 레지스트리에 대해 인증할 수 있습니다. 프라이빗 레지스트리 인증을 활성화하면 태스크 정의에서 프라이빗 Docker 이미지를 사용할 수 있습니다.

프라이빗 레지스트리 인증을 사용하려면 프라이빗 레지스트리용 자격 증명이 있는 AWS Secrets Manager로 암호를 생성합니다. 그런 다음 컨테이너 정의에서 자신이 생성한 보안 암호의 전체 ARN과 함께 repositoryCredentials를 지정합니다. 다음은 태스크 정의 예제 조각에는 필요한 파라미터가 표시되어 있습니다.

"containerDefinitions": [ { "image": "private-repo/private-image", "repositoryCredentials": { "credentialsParameter: "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name" } } ]

자세한 내용은 태스크에 대한 프라이빗 레지스트리 인증 섹션을 참조하세요.

Clusters

클러스터에는 Fargate 및 EC2 시작 유형을 모두 사용하는 태스크가 포함될 수 있습니다. AWS Management Console에서 클러스터를 보면 Fargate 및 EC2 태스크 수가 개별적으로 표시됩니다.

클러스터 생성 연습을 포함하여 Amazon ECS 클러스터에 대한 자세한 내용은 Amazon ECS 클러스터 섹션을 참조하세요.

Fargate 스팟

Amazon ECS 용량 공급자를 사용하면 Fargate와 Fargate 스팟 용량 모두를 Amazon ECS 태스크와 함께 사용할 수 있습니다.

Fargate 스팟을 사용하면 Fargate 가격 대비 할인된 요금으로 중단 방지 Amazon ECS 태스크를 실행할 수 있습니다. Fargate 스팟은 여분의 컴퓨팅 용량에 대한 태스크를 실행합니다. AWS에 용량이 다시 필요한 경우 2분간 경고한 후에 태스크가 중단됩니다. 자세한 내용은 AWS Fargate 용량 공급자 섹션을 참조하세요.

사용량 지표

CloudWatch 사용량 지표를 사용하여 계정의 리소스 사용량을 확인할 수 있습니다. 이러한 지표를 사용하여 CloudWatch 그래프 및 대시보드에서 현재 서비스 사용량을 시각화합니다.

AWS Fargate 사용량 지표는 AWS 서비스 할당량에 해당합니다. 사용량이 서비스 할당량에 가까워지면 경고하는 경보를 구성할 수 있습니다. Fargate 서비스 할당량에 대한 자세한 내용은 AWS Fargate 서비스 할당량 섹션을 참조하세요.

AWS Fargate 사용량 지표에 대한 자세한 내용은 AWS Fargate에 대한 Amazon Elastic Container Service 사용 설명서Fargate 사용량 지표를 참조하세요.

태스크 유지관리

AWS에서 AWS Fargate에서 호스팅되는 Amazon ECS 태스크에 보안 또는 인프라 업데이트가 필요하다고 판단한 경우, 태스크를 중단하고 이를 대체할 새 태스크를 시작해야 합니다. 자세한 내용은 AWS Fargate에 대한 Amazon Elastic Container Service 사용 설명서태스크 유지관리를 참조하세요.

다음 표는 이러한 시나리오에 대해 설명합니다.

태스크 유형 문제 조치

독립적 태스크

호스트 문제

태스크 사용 중단 안내가 AWS Personal Health Dashboard과 이메일을 사용하여 전송됩니다. 태스크 사용 중단 날짜까지 아무런 조치를 취하지 않을 경우 AWS가 태스크를 중지합니다.

보안 취약성

태스크 사용 중단 안내가 AWS Personal Health Dashboard과 이메일을 사용하여 전송됩니다. 태스크 사용 중단 날짜까지 아무런 조치를 취하지 않을 경우 AWS가 태스크를 중지합니다.

서비스 태스크

호스트 문제

태스크는 AWS에서 중단하고 서비스 스케줄러가 적정 서비스 개수를 유지하기 위해 새 태스크를 시작합니다. 알림을 전송하지 않습니다.

보안 취약성

태스크 사용 중단 안내가 AWS Personal Health Dashboard과 이메일을 사용하여 전송됩니다. 태스크 사용 중단 날짜까지 아무런 조치를 취하지 않을 경우 AWS에서 태스크를 중단하고 서비스 스케줄러가 적정 서비스 개수를 유지하기 위해 새 태스크를 시작합니다.

Savings Plans

Savings Plans는 AWS 사용량에 대해 상당한 비용 절감을 제공하는 요금 모델입니다. 1년 또는 3년 동안 일관된 사용량(시간당 USD)을 약정하면 해당 사용량에 대해 더 낮은 가격을 적용 받게 됩니다. 자세한 내용은 Savings Plans 사용 설명서를 참조하세요.

Fargate 사용량에 대한 Savings Plan을 생성하려면 Compute Savings Plans 유형을 사용하세요. 시작하려면 Savings Plans 사용 안내서Savings Plans 시작하기를 참조하세요.