Amazon ECS Managed Instances를 위한 설계
Amazon ECS Managed Instances를 위한 설계
Amazon ECS Managed Instances는 AWS가 인프라 관리를 대신 처리해주면서 전체 Amazon EC2 인스턴스 유형에서 컨테이너화된 워크로드를 실행할 수 있게 해주는 Amazon ECS의 완전 관리형 컴퓨팅 옵션이에요.
출처: 문서
본문
Amazon ECS Managed Instances는 Amazon ECS의 완전 관리형 컴퓨팅 옵션으로, 전체 Amazon EC2 인스턴스 유형에서 컨테이너화된 워크로드를 실행하면서 인프라 관리는 AWS에 맡길 수 있게 해줘요. Amazon ECS Managed Instances를 사용하면 GPU 가속, 특정 CPU 아키텍처, 높은 네트워크 성능, 특수 인스턴스 유형 같은 특정 컴퓨팅 기능을 이용할 수 있어요. AWS가 기본 인프라의 프로비저닝, 스케일링, 패치, 유지보수를 처리해줘요. Amazon ECS Managed Instances를 사용할 때는 애플리케이션을 컨테이너로 패키징하고 컴퓨팅 요구 사항을 지정해요. 그러면 AWS가 워크로드 요구 사항에 맞는 가장 비용 최적화된 범용 Amazon EC2 인스턴스 유형을 자동으로 선택하거나, 인스턴스 유형, CPU 제조사, 가속기 등을 포함한 원하는 인스턴스 속성을 직접 지정할 수 있어요.
Amazon ECS Managed Instances는 스케일링, 패치, 비용 최적화를 포함한 인프라의 모든 측면을 완전히 관리해주면서도 AWS 기능과 Amazon EC2 통합에 대한 접근을 포기하지 않아요. Amazon ECS Managed Instances는 플랫폼별 최적화와 보안 구성을 갖춘 Linux 컨테이너를 지원해요. 기본적으로 Amazon ECS Managed Instances는 더 큰 인스턴스에 여러 개의 작은 태스크를 배치하여 인프라 활용도를 최적화하고, 비용을 줄이며 태스크 시작 시간을 개선해요.
이 주제는 Amazon ECS Managed Instances 태스크와 서비스의 서로 다른 구성 요소를 설명하고, Amazon ECS에서 Amazon ECS Managed Instances를 사용할 때의 특별한 고려 사항을 짚어줘요.
시작하기(Getting started)
Amazon ECS Managed Instances를 시작하려면 필요한 IAM 역할을 만들고 AWS 계정에서 Amazon ECS Managed Instances를 활성화해요. 그런 다음 용량 공급자(capacity provider)를 만들고 Amazon ECS Managed Instances 용량 공급자를 사용해 태스크나 서비스를 실행할 수 있어요.
시작에 대한 자세한 지침은 다음을 참조하세요:
- Amazon ECS Managed Instances용 태스크를 만드는 방법 배우기
- AWS CLI로 Amazon ECS Managed Instances용 태스크를 만드는 방법 배우기
용량 공급자(Capacity providers)
Amazon ECS Managed Instances는 용량 공급자를 사용해 워크로드의 컴퓨팅 용량을 관리해요. 용량 공급자를 만들 때 기본 인스턴스 선택을 사용하거나 instanceRequirements로 사용자 지정 인스턴스 요구 사항을 지정할 수 있어요.
다음 용량 공급자 옵션을 사용할 수 있어요:
- 기본 용량 공급자(Default capacity provider) – 워크로드 요구 사항에 가장 비용 최적화된 범용 인스턴스 유형을 자동으로 선택해요.
- 사용자 지정 용량 공급자(Custom capacity providers) – 속성 기반 인스턴스 유형 선택을 사용하여 vCPU 수, 메모리, CPU 제조사, 가속기 유형, 특정 인스턴스 유형 등 인스턴스 속성을 지정할 수 있게 해줘요.
용량 공급자 전략(capacity provider strategy)에는 다음 목록에서 정확히 한 가지 용량 공급자 유형만 포함할 수 있어요:
- Amazon ECS Managed Instances
- Auto Scaling group
- Fargate/Fargate_SPOT
인스턴스 선택 및 최적화
Amazon ECS는 다음 방법 중 하나를 사용해 Amazon ECS Managed Instances 워크로드의 인스턴스 유형을 선택해요:
- 자동 선택(Automatic selection) – 기본 용량 공급자를 사용할 때 Amazon ECS가 태스크 정의에 지정된 CPU와 메모리 요구 사항을 충족하는 가장 비용 최적화된 범용 인스턴스 유형을 자동으로 선택해요.
- 속성 기반 선택(Attribute-based selection) – 사용자 지정 용량 공급자를 사용할 때 vCPU 수, 메모리 크기, CPU 제조사, 가속기 유형, 특정 인스턴스 유형 같은 인스턴스 속성을 지정할 수 있어요. Amazon ECS는 지정한 속성과 일치하는 모든 인스턴스 유형에서 선택해요.
Amazon ECS Managed Instances는 여러 메커니즘을 통해 인프라 활용도와 비용을 최적화해요:
- 다중 태스크 배치(Multi-task placement) – 기본적으로 Amazon ECS는 더 큰 인스턴스에 여러 개의 작은 태스크를 배치하여 활용도를 극대화하고 비용을 줄여요.
- 활성 워크로드 통합(Active workload consolidation) – Amazon ECS는 애플리케이션 가용성이나 배포 성능에 영향을 줄 수 있는 조기 종료를 피하면서 컨테이너 인스턴스가 진정으로 유휴 상태인 때를 식별해요. 이 시스템은 서비스에 설정된 최소/최대 태스크 수, start before stop 동작, 태스크 보호(task protection) 동작을 존중해요.
- 규모 조정(Right-sizing) – 워크로드 요구 사항이 바뀌면 Amazon ECS는 현재 요구 사항에 적절한 크기의 대체 인스턴스를 시작해요.
Amazon ECS는 Amazon EC2 이벤트 창(event windows)을 사용해 선호하는 시간대에 유지보수 활동을 예약해요. 이벤트 창을 사용하면 AWS가 인스턴스에서 유지보수를 수행할 수 있는 반복 시간대를 정의할 수 있어요. 이를 통해 유지보수를 운영 일정과 맞춰 워크로드 중단을 최소화할 수 있어요. 자세한 내용은 Amazon EC2 사용 설명서의 "Scheduled events for your instances"를 참조하세요.
강력한 격리가 필요하다면 Amazon ECS Managed Instances를 VM 수준 보안 격리 경계를 갖춘 별도의 인스턴스에서 각 태스크를 실행하도록 구성할 수 있어요.
태스크 정의(Task definitions)
Amazon ECS Managed Instances를 사용하는 태스크는 대부분의 Amazon ECS 태스크 정의 매개변수를 지원해요. Amazon ECS Managed Instances는 플랫폼 버전 1.4.0을 사용하는 기존 Fargate 태스크 정의와 호환되므로 마이그레이션이 간단해요.
Amazon ECS Managed Instances를 사용하려면 태스크 정의의 requiresCompatibilities 매개변수에 MANAGED_INSTANCES를 포함하도록 설정하세요. 태스크 정의는 배포 옵션의 유연성을 위해 Fargate와 Amazon ECS Managed Instances 호환성을 모두 지정할 수 있어요.
운영 체제 및 CPU 아키텍처
다음 운영 체제가 지원돼요:
- Bottlerocket
Amazon ECS 태스크 정의에는 ARM과 X86_64 두 가지 아키텍처를 사용할 수 있어요. Amazon ECS Managed Instances에서 Linux 컨테이너를 실행할 때 X86_64 CPU 아키텍처를 사용하거나, ARM 기반 애플리케이션에는 ARM64 아키텍처를 사용할 수 있어요.
주요 기능(Key features)
Amazon ECS Managed Instances의 주요 기능은 다음과 같아요:
- 애플리케이션 요구 사항에 맞는 특정 EC2 인스턴스 유형을 선택하여 GPU 가속 컴퓨팅, 특정 CPU 기능, 대용량 메모리 같은 특수 하드웨어 기능에 접근할 수 있게 해줘요.
- Fargate가 각 태스크를 자체 격리 환경에서 실행하는 것과 달리, 기본적으로 단일 인스턴스에 여러 태스크를 배치해 리소스 활용도와 비용을 최적화해요.
- 보안 규정 준수와 정기적인 인스턴스 패치를 보장해요. ECS Managed Instances는 14일 후 인스턴스 드레이닝(draining)을 시작하고 서비스 기반 태스크를 새 인스턴스로 자동 교체해요.
CAP_NET_ADMIN,CAP_SYS_ADMIN,CAP_BPF,CAP_PERFMON을 포함한 특권(privileged) Linux 기능을 사용해 컨테이너 내에서 고급 네트워킹 및 시스템 관리 기능을 활성화해요.
IAM 역할
Amazon ECS Managed Instances에는 두 개의 IAM 역할이 필요해요:
- 인프라 역할(Infrastructure Role) – 이 역할을 통해 AWS가 사용자를 대신해 Amazon ECS Managed Instances를 관리할 수 있어요.
- 인스턴스 프로필(Instance profile) – 인스턴스 프로필은 IAM 역할을 Amazon ECS Managed Instances에 전달하는 방법이에요. 이 프로필은 다음에 사용돼요:
- 컨테이너 워크로드를 실행하는 Amazon ECS Managed Instances의 IAM 권한을 정의.
- AWS가 사용자를 대신해 이러한 인스턴스를 관리할 수 있게 허용.
- 프로필에 정의된 권한에 따라 인스턴스가 AWS 서비스에 접근할 수 있게 활성화.
보안 및 규정 준수
Amazon ECS Managed Instances는 워크로드를 보호하기 위해 여러 계층의 보안을 구현해요:
- 안전한 구성(Secure configuration) – Amazon ECS Managed Instances는 SSH 접근 없음, 변경 불가능한(immutable) 루트 파일시스템, SELinux를 통한 커널 수준 필수 접근 제어 등 AWS 보안 모범 사례를 따르는 구성이에요.
- 자동 패치(Automatic patching) – AWS는 사용자가 구성한 유지보수 창을 존중하면서 최신 보안 패치로 Amazon ECS Managed Instances를 정기적으로 업데이트해요.
- 제한된 인스턴스 수명(Limited instance lifetime) – ECS가 14일 후 자동으로 인스턴스 드레이닝을 시작하여 애플리케이션이 적절히 구성되고 최신 보안 패치가 적용된 인스턴스에서 실행되도록 보장해요.
- 특권 기능(Privileged capabilities) – 네트워크 모니터링 및 관측성 솔루션 같은 워크로드가 필요로 하는 경우 선택적으로 특권 Linux 기능을 활성화할 수 있어요.
Amazon ECS Managed Instances는 PCI-DSS, HIPAA, FedRAMP를 포함해 Amazon ECS와 동일한 규정 준수 프로그램을 지원해요. 지원되는 리전에서는 FedRAMP 규정 준수를 달성하기 위해 용량 공급자 수준에서 FIPS 엔드포인트를 구성할 수 있어요.
네트워킹
Amazon ECS Managed Instances는 awsvpc와 host 네트워크 모드를 지원해요. awsvpc 네트워크 모드는 각 태스크에 VPC 내에서 자체 탄력적 네트워크 인터페이스와 프라이빗 IP 주소를 제공해요. 이를 통해 태스크 수준에서 세밀한 보안 그룹 및 네트워크 ACL 제어가 가능해져요. host 네트워크 모드에서는 태스크가 호스트 Amazon ECS Managed Instance의 네트워크 네임스페이스를 공유해요. Amazon ECS Managed Instances의 태스크 네트워킹에 대한 자세한 내용은 "Amazon ECS task networking for Amazon ECS Managed Instances"를 참조하세요.
인스턴스 스토리지
Amazon ECS Managed Instances는 인스턴스에 연결되는 Amazon EBS 데이터 볼륨의 크기를 구성하는 것을 지원해요. 이 스토리지는 인스턴스에서 실행되는 모든 태스크 사이에서 공유되며 바인드 마운트(bind mount)에 사용할 수 있어요. 볼륨은 태스크 정의의 volumes, mountPoint, volumesFrom 매개변수를 사용하는 컨테이너 사이에서 공유되고 마운트될 수 있어요.
볼륨은 인스턴스 생성 중에 연결돼요. Amazon ECS Managed Instances 용량 공급자를 만들 때 storageConfiguration 매개변수를 사용해 볼륨 크기를 GiB 단위로 지정할 수 있어요.
{
"managedInstancesProvider": {
"infrastructureRoleArn": "arn:aws:iam::123456789012:role/ecsInfrastructureRole",
"instanceLaunchTemplate": {
"ec2InstanceProfileArn": "arn:aws:iam::123456789012:instance-profile/ecsInstanceProfile",
"networkConfiguration": {
"subnets": [
"subnet-abcdef01234567",
"subnet-bcdefa98765432"
],
"securityGroups": [
"sg-0123456789abcdef"
]
},
"storageConfiguration": {
"storageSizeinGiB": 100
}
}
}
}
이 볼륨의 최소 크기는 30 GiB, 최대 크기는 16,384 GiB예요. 기본적으로 이 볼륨의 크기는 80 GiB예요.
태스크의 풀링된(pulled), 압축된, 압축되지 않은 컨테이너 이미지가 볼륨에 저장돼요. 태스크가 바인드 마운트로 사용할 수 있는 총 인스턴스 스토리지 양을 결정하려면 태스크에 할당된 총 인스턴스 스토리지에서 컨테이너 이미지가 사용하는 스토리지 양을 빼야 해요.
Amazon ECS Managed Instances에 연결된 Amazon EBS 볼륨의 성능은 Amazon EC2 사용 설명서의 "Amazon EBS-optimized instances" 문서에 설명된 대로 해당 Amazon EC2 인스턴스의 성능과 일치해요.
보안 이슈에 대한 법의학적(forensic) 분석을 수행하거나 애플리케이션을 디버깅하려면 볼륨의 스냅샷을 만들 수 있어요.