Amazon ECS Express Mode 서비스가 만드는 리소스

Amazon ECS Express Mode 서비스가 만드는 리소스

Express Mode 서비스가 컨테이너화된 애플리케이션 배포를 어떻게 간소화하고, 어떤 AWS 리소스를 자동으로 생성하는지, 그리고 각 구성 요소의 기본값(defaults)을 알아봐요.

출처: 문서

본문

Express Mode 서비스는 합리적인 기본값을 제공하고 지원 AWS 서비스의 구성을 자동화함으로써 컨테이너화된 애플리케이션 배포의 복잡성을 줄여줘요. 여러 서비스에서 수백 개의 구성 파라미터를 관리하는 대신, Express Mode 서비스는 시작하기 위해 컨테이너 이미지, 태스크 실행 역할, 인프라 역할만 필요해요.

Express Mode 서비스는 프로덕션 웹 애플리케이션을 실행하기 위한 선호 인프라를 묶어 주는 Amazon ECS Service를 프로비저닝·구성하는 간소화된 절차를 제공해요. Express Mode 서비스는 운영 및 구성 모범 사례를 자동으로 통합해요. 다음 리소스가 생성돼요:

  • Fargate capacity provider가 있는 ECS 기본 클러스터(아직 없을 경우)
  • 컨테이너, 로깅, 네트워킹 구성이 있는 태스크 정의
  • canary 배포와 자동 확장을 갖춘 서비스
  • HTTPS 리스너, 리스너 규칙, 대상 그룹이 있는 Application Load Balancer
  • 최소 필수 인그레스를 가진 보안 그룹
  • 자동 확장과 로드 밸런싱을 위한 Service Linked Roles
  • Application Auto Scaling 확장 가능 대상(scalable target)과 대상 추적 확장 정책. 확장 정책은 지표를 지정된 목표 값에 가깝게 유지하는 데 필요한 만큼 서비스 태스크를 추가·제거해요. 대상 추적 확장 정책은 지표를 목표 값에 가깝게 유지하는 것 외에도 변동하는 로드 패턴에 따른 지표 변동에 맞춰 조정하고, 서비스에서 실행되는 태스크 수의 급격한 변동을 최소화해요.
  • 서비스 전용 로그 그룹
  • 잘못된 배포를 감지하기 위한 지표 알람
  • ACM 인증서

Express Mode 서비스는 기본값을 사용해 시작하거나, 최소한의 파라미터 세트로 애플리케이션을 구성할 수 있어요.

클러스터 기본값 (Cluster defaults)

클러스터에 대해 Express Mode 내에서 구성 가능한 기본값:

  • clusterName - 기본 클러스터를 사용해요. 이 옵션은 콘솔의 Additional configurations 옵션을 사용하거나 create-express-gateway-service --cluster를 지정해 맞춤 구성할 수 있어요.

Express Mode가 설정하지만 클러스터에서 직접 업데이트할 수 있는 기본값:

  • capacityProviders: ["FARGATE"] - Fargate를 사용해요.

태스크 정의 기본값 (Task definition defaults)

태스크 정의에 대해 Express Mode 내에서 구성 가능한 기본값:

  • cpu: 1024 - 태스크에 1 vCPU 단위 할당. 콘솔의 Additional configurations 옵션 또는 create-express-gateway-service --cpu로 맞춤 구성 가능.
  • memory: 2048 - 태스크에 2 GB 메모리 할당. 콘솔의 Additional configurations 옵션 또는 create-express-gateway-service --memory로 맞춤 구성 가능.
  • cpuArchitecture: "X86_64" - 기본 x86_64 프로세서 아키텍처. 64비트 ARM 아키텍처를 사용하려면 ARM64를 선택하며, 이는 AWS Graviton 기반 컴퓨팅에서 실행돼요.

Express Mode가 설정하지만 태스크 정의에서 직접 업데이트할 수 있는 기본값:

  • networkMode: "awsvpc" - awsvpc 네트워킹 모드 사용
  • operatingSystemFamily: "LINUX" - Linux 운영 체제에서 실행
  • requiresCompatibilities: ["FARGATE"] - Fargate launch type과 호환
  • platformVersion: "LATEST" - 최신 Fargate 플랫폼 버전 사용

taskDefinitionArn 파라미터를 사용해 사용자 지정 태스크 정의를 제공할 수도 있어요. Express Mode는 CPU, 메모리, 컨테이너 정의, 추가 컨테이너나 설정을 포함해 사용자가 정의한 태스크 정의를 그대로 사용해요.

컨테이너 정의 기본값 (Container definition defaults)

컨테이너에 대해 Express Mode 내에서 구성 가능한 기본값:

  • port: 80 - 컨테이너 트래픽의 기본 포트

Express Mode가 설정하지만 태스크 정의 - 컨테이너 정의에서 직접 업데이트할 수 있는 기본값:

  • essential: true - 태스크 상태를 위해 컨테이너가 essential로 표시됨
  • protocol: "tcp" - 로드 밸런서 통신을 위한 기본 프로토콜
  • name: "Main" - 기본 컨테이너의 기본 이름. 기본 컨테이너 이름을 바꾸면 Express Mode가 이후에 서비스를 업데이트하는 능력에 영향을 미칠 수 있어요. Express Mode 콘솔이나 API를 계속 사용할 예정이라면 권장하지 않아요.
  • versionConsistency: enabled - 일관된 배포를 위해 이미지 태그를 다이제스트 ID로 해석
  • initProcessEnabled: true - Docker init 프로세스 지원 활성화
  • stopTimeout: 30 seconds - SIGTERM과 SIGKILL 신호 사이의 시간

로깅 기본값 (Logging defaults)

CloudWatch Logs에 대해 Express Mode 내에서 구성 가능한 기본값:

  • awslogs-group: "/aws/ecs//-####" - 클러스터와 서비스 이름에서 파생된 로그 그룹 이름. 콘솔의 Additional configurations 옵션 또는 create-express-gateway-service --primary-container "awsLogsConfiguration"=[{ "logGroup"="/my/logGroup/"}]로 맞춤 구성 가능.
  • awslogs-stream-prefix: "ecs" - 로그 스트림 이름 접두사. 콘솔의 Additional configurations 옵션 또는 create-express-gateway-service --primary-container "awsLogsConfiguration"=[{ "logStreamPrefix"="myprefix"}]로 맞춤 구성 가능.

Express Mode가 설정하지만 태스크 정의 - 로그 구성에서 직접 업데이트할 수 있는 기본값:

  • logDriver: "awslogs" - CloudWatch Logs 사용
  • awslogs-region: current Region - Express Mode 서비스와 같은 리전 사용
  • mode: "non-blocking" - 로깅 모드를 non-blocking으로 설정
  • max-buffer-size: "25m" - 로그 쓰기를 위한 최대 버퍼 크기

taskDefinitionArn 파라미터로 사용자 지정 태스크 정의를 제공할 때는 태스크 정의 내에서 로깅을 구성해요.

서비스 기본값 (Service defaults)

Amazon ECS Service에 대해 Express Mode 내에서 구성 가능한 기본값:

  • serviceName - Express Mode 서비스의 이름 (고객 제공 또는 이미지 이름에서 파생). 이름은 생성 시에만 구성할 수 있고 업데이트에서는 사용할 수 없어요.
  • cluster - 이 서비스의 ECS 클러스터 (고객 제공 또는 기본값). 클러스터는 생성 시에만 구성할 수 있어요.
  • desiredCount - 서비스의 원하는 수 (기본값 1). 콘솔의 Additional configurations 옵션 또는 create-express-gateway-service --scaling-target '{ "minTaskCount"=3}'로 맞춤 구성 가능.
  • tags - Express Mode 서비스용 AWS 태깅 태그 (고객 제공). 콘솔의 Additional configurations 옵션 또는 create-express-gateway-service --tags로 맞춤 구성 가능. 태그는 새 리소스 생성 시에만 추가할 수 있어요.

Express Mode가 설정하지만 Amazon ECS Service에서 직접 업데이트할 수 있는 기본값:

  • availabilityZoneRebalancing: true - 자동 AZ 리밸런싱 활성화
  • CapacityProviderStrategy: { "base": 1, "capacityProvider": "FARGATE", "weight": 1} - 컴퓨팅 용량에 Fargate 사용
  • deploymentConfiguration: Canary by default - Express Mode 서비스는 Canary 배포 사용. 배포 전략은 Express Mode 서비스에서 업데이트할 수 없어요.
  • enableECSManagedTags: true - ECS 관리 리소스 태깅 활성화
  • healthCheckGracePeriodSeconds: 300 - Scheduler가 ELB 또는 Lattice 상태 검사를 보기 전 유예 기간 (ELB 상태 검사 유예 기간 기본값과 일치)
  • launchType: - capacity provider 사용
  • loadBalancers - 로드 밸런서 구성은 ECS가 처리. 로드 밸런서 구성은 Express Mode 서비스에서 업데이트할 수 없어요.
  • placementStrategy: Not set - 시작 시 Fargate 사용 (항상 AZ Spread여야 함)
  • platformVersion: LATEST - Fargate 플랫폼 버전 (LATEST로 하드코딩)
  • propagateTags: "SERVICE" - 서비스에서 태스크로 태그 전파
  • schedulingStrategy: "REPLICA" - Express Mode 서비스는 REPLICA 서비스
  • taskDefinition: Express Mode service created - 사용할 태스크 정의 (Express Mode 서비스가 제공)

네트워크 구성 기본값 (Network configuration defaults)

Amazon ECS Service - 네트워크 구성에 대해 Express Mode 내에서 구성 가능한 기본값:

  • networkConfiguration.Subnets - 제공하지 않으면 Express Mode는 기본 VPC의 기본 퍼블릭 서브넷을 사용해요. 기본 VPC는 할당된 CIDR 블록당·서브넷당 최소 8개의 사용 가능한(빈) IP가 있는, 최소 2개의 가용 영역에 최소 2개의 퍼블릭 서브넷이 있어야 해요.
    • 사용자 지정 퍼블릭 서브넷을 제공하면 Express Mode는 인터넷 연결 ALB를 프로비저닝하고 태스크에 assignPublicIP을 켜요.
    • 프라이빗 서브넷(라우트 테이블에 인터넷 게이트웨이가 없는 서브넷)을 제공하면 Express Mode는 내부 ALB를 프로비저닝해요.
    • 서브넷을 지정하면 VPC에서 첫 번째 Express Mode 서비스가 해당 VPC의 인터넷 연결 또는 내부 로드 밸런서와 연결된 서브넷을 정의해요. 같은 VPC에서 시작하는 이후 Express Mode 서비스는 로드 밸런서가 지원하는 가용 영역과 일치하는 서브넷을 가져야 해요. 따라서 모든 가용 영역의 서브넷으로 Express Mode 서비스를 만들 것을 권장해요.
  • networkConfiguration.SecurityGroups - 제공하지 않으면 Express Mode는 Service Security Group과 Load Balancer Security Group을 모두 만들어요.
    • Service Security Group은 퍼블릭 인터넷으로의 아웃바운드 트래픽을 허용하지만, 서브넷 구성 같은 네트워킹의 다른 측면에 따라 제한될 수 있어요.
    • Load Balancer Security Group은 HTTPS 해석을 위한 인바운드 트래픽과 지정한 컨테이너 포트(기본 80)에서 Service Security Group으로의 아웃바운드 트래픽을 허용해요. 그리고 Express Mode Create 또는 Update 호출에서 제공한 컨테이너 포트와 일치하도록 자동으로 업데이트돼요.
    • 콘솔의 Additional configurations 옵션 또는 create-express-gateway-service --network-configuration '{ "securityGroup": ["sg-xxxxxxx"]}'로 맞춤 구성 가능. 보안 그룹을 제공하면 서비스에 추가 인그레스 경로를 제공하는 것이에요.

Express Mode가 설정하지만 Amazon ECS Service - 네트워크 구성에서 직접 업데이트할 수 있는 기본값:

  • assignPublicIp: Based on subnet type - 퍼블릭 서브넷에 대해 활성화. 기본 VPC 사용자가 퍼블릭 인터넷에 접근할 수 있도록 각 태스크에 기본적으로 퍼블릭 IP를 활성화해요. 프라이빗 서브넷을 제공하면 비활성화되며, 태스크가 인터넷에 접근해야 하면 사용자가 NAT gateway를 구성해야 해요.

IAM 역할 기본값 (IAM role defaults)

Express Mode Service에 대해 구성 가능한 IAM 역할(적절한 경우 service-linked role 자동 생성 포함):

  • executionRoleArn - Task Execution Role (필수 파라미터). 필요한 권한은 관리형 정책에 있지만, 추가 정책과 권한을 연결할 수 있어요. 추가 내용은 AWS Managed Policy Reference Guide의 AmazonECSTaskExecutionRolePolicy 참고.
  • infrastructureRoleArn - Express Gateway Services용 Infrastructure Role (필수 파라미터). 필요한 권한은 관리형 정책에 있지만, 추가 정책과 권한을 연결할 수 있어요. 추가 내용은 AWS Managed Policy Reference Guide의 AmazonECSInfrastructureRoleforExpressGatewayServices Managed Policy 참고.
  • taskRoleArn - 컨테이너 애플리케이션 코드의 호출을 위한 Task Role (선택 사항). 콘솔의 Additional configurations 옵션 또는 create-express-gateway-service --task-role-arn으로 맞춤 구성 가능. Express Mode 서비스를 만들거나 업데이트하기 전에 새 IAM 역할을 만들어야 해요.

Express Mode가 자동으로 구성하는 IAM 역할:

  • ecsServiceRoleForECS - Amazon ECS가 클러스터를 관리할 수 있게 함
  • AWSServiceRoleForElasticLoadBalancing - 사용자를 대신해 다른 AWS 서비스를 호출 (Elastic Load Balancing이 자동 생성)
  • AWSServiceRoleForApplicationAutoScaling_ECSService - 사용자를 대신해 다른 AWS 서비스를 호출 (Application Auto Scaling이 자동 생성)

taskDefinitionArn 파라미터로 사용자 지정 태스크 정의를 제공할 때는 태스크 실행 역할과 태스크 역할이 태스크 정의에서 읽혀요.

Application Auto Scaling 기본값

Express Mode에서 다음 Application Auto Scaling 설정을 구성할 수 있어요:

  • autoScalingTargetValue: 60 - 확장을 위한 대상 CPU 사용률 백분율
  • autoScalingMetric: "CPUUtilization" - 자동 확장 결정에 사용되는 지표
  • desiredMinTaskCount: 1 - 유지할 최소 태스크 수
  • desiredMaxTaskCount: 20 - 확장할 최대 태스크 수 (늘리거나 줄일 수 있음)

Application Auto Scaling에서 직접 구성할 수 있는 설정:

  • policyType: "TargetTrackingScaling" - 대상 추적 확장 정책 사용
  • disableScaleIn: false - 수요가 감소할 때 축소(scaling down) 허용

애플리케이션 확장 대상 기본값 (Application scaling target defaults)

Application Auto Scaling 대상은 자동 확장 작업을 위한 확장 가능한 리소스와 용량 한도를 정의해요. Express Mode에서 수정할 수 있는 항목:

  • MaxCapacity - 서비스가 확장할 최대 태스크 수 (CreateLoadBalancedService에서 기본 제공 또는 고객 제공)
  • MinCapacity - 서비스가 축소할 최소 태스크 수 (CreateLoadBalancedService에서 기본 제공 또는 고객 제공)
  • ScalableDimension: ecs:service:DesiredCount - 확장할 속성
  • Tags - CreateLoadBalancedService에서 전달된 태그에서 파생 - 이 리소스의 리소스 태그

Application Auto Scaling 확장 가능 대상에서 수정할 수 있는 기본값:

  • DynamicScalingInSuspended: false - 축소(scaling in) 일시 중지 여부
  • DynamicScalingOutSuspended: false - 확장(scaling out) 일시 중지 여부
  • ScheduledScalingSuspended: false - 예약 확장 일시 중지 여부

애플리케이션 확장 정책 기본값 (Application scaling policy defaults)

확장 정책은 CPU 사용률을 모니터링하고 최적 성능을 유지하도록 태스크 수를 조정하는 대상 추적 알고리즘을 구현해요. Express Mode에서 수정할 수 있는 항목:

  • TargetValue: 60% - 추적 정책의 목표 값 (Express Mode 서비스 → scaling-target-value)
  • PredefinedMetricType: ECSServiceAverageCPUUtilization - 추적 중인 지표의 이름 유형 (Express Mode 서비스 → scaling-metric)

Express Mode는 평균 CPU 사용률, 평균 메모리 사용률, 대상당 요청 수(Request Count per Target)에 대한 확장 지표를 제공해요. Request Count per Target은 Application Load Balancer에서 오며, Application Load Balancer 대상 그룹에서의 Amazon ECS Service인 대상당 초당 최대 65536 요청까지 설정할 수 있어요.

Express Mode가 설정하지만 Application Auto Scaling 정책에서 변경할 수 있는 기본값:

  • PolicyName - 이 확장 정책의 이름 (ECS 서비스 이름과 Target Metric에서 파생)
  • PolicyType: TargetTrackingScaling - 수행되는 확장 유형 (미리 정의된 기본값)
  • ScalableDimension: "ecs:service:DesiredCount" - 확장될 속성 (미리 정의된 기본값)
  • DisableScaleIn: false - 축소(scaling in) 비활성화 여부

Application Load Balancer 기본값

Express Mode에서 다음 Application Load Balancer 기본값을 구성할 수 있어요:

  • scheme: depends on subnets - 퍼블릭 서브넷이 제공되면 퍼블릭 IP 주소가 있는 인터넷 연결 로드 밸런서를 만들고, 프라이빗 서브넷이 제공되면 프라이빗 IP 주소가 있는 내부 로드 밸런서를 만들어요.
  • ip-address-type: depends on subnets - 주소가 IPv4일 때 IPv4 전용 Application Load Balancer를 만들어요. IPv6 지원 서브넷이 있으면 dual-stack Application Load Balancer가 생성돼요. IPv6 지원 서브넷이 있으면 VPC의 첫 번째 Express Mode 서비스가 해당 VPC의 내부 또는 인터넷 연결 로드 밸런서를 정의한다는 점에 유의하세요. 때문에 IPv6 전용 서브넷을 먼저 만들거나 새 VPC에서 만드는 것을 권장해요.

Express Mode에서 설정하고 Application Load Balancer에서 구성할 수 있는 기본값:

  • desync-mitigation-mode: Off - HTTP desync 완화 비활성화
  • access-logs.enabled: false - 접근 로깅 비활성화
  • listener-configurations.protocol: https - 보안 통신에 HTTPS 프로토콜 사용
  • listener-configurations.port: 443 - 표준 HTTPS 포트에서 수신
  • listener-configurations.rule-type: host-header - 호스트 헤더 규칙을 기반으로 트래픽 라우팅

대상 그룹 기본값 (Target group defaults)

Express Mode에서 다음 Amazon EC2 Target Group 기본값을 구성할 수 있어요:

  • health-check-path: (default "/") - Express Mode 서비스 상태 검사 경로 - 상태 검사 요청의 URL 경로
  • port: (default 80) - 대상이 트래픽을 받는 포트
  • health-check-port: (default 80) - 상태 검사 요청 포트

Express Mode에서 설정하고 Amazon EC2 Target Groups에서 구성할 수 있는 기본값:

  • protocol: HTTP - 대상으로 트래픽을 라우팅하는 프로토콜
  • protocol-version: HTTP1 - 통신을 위한 HTTP 프로토콜 버전
  • vpc-id: default is the default VPC - 대상 그룹의 Virtual Private Cloud 식별자 (제공된 서브넷에서 파생)
  • health-check-protocol: Same as Protocol - 상태 검사 요청 프로토콜
  • health-check-enabled: Always enabled - 상태 검사 자동 활성화
  • health-check-interval-seconds: 30 - 개별 대상 상태 검사 사이 시간
  • health-check-timeout-seconds: 5 - 상태 검사 응답 시간 초과 지속 시간
  • healthy-threshold-count: 5 - healthy 상태에 필요한 연속 성공 상태 검사 수
  • unhealthy-threshold-count: 2 - unhealthy 상태에 필요한 연속 실패 상태 검사 수
  • target-type: ip - 대상이 IP 주소로 등록됨
  • ip-address-type: ipv4 - 대상 등록에 IPv4 주소 사용

리소스 공유와 비용 최적화 (Resource sharing and cost optimization)

Express Mode 서비스는 비용을 최적화하기 위해 가능할 때 리소스를 자동으로 공유해요:

  • 로드 밸런서 공유 - 같은 VPC에서 최대 25개의 Express Mode 서비스가 하나의 Application Load Balancer를 공유할 수 있어요. Express Mode는 프로비저닝된 Express Mode 서비스 수에 따라 필요에 따라 추가 Application Load Balancer를 프로비저닝해요. 그리고 VPC에서 Express Mode 서비스 수를 줄이면 사용하지 않는 Application Load Balancer도 프로비저닝 해제해요. 이 공유는 더 많은 Express Mode 서비스를 배포할수록 애플리케이션당 실효 비용을 줄여줘요.
  • 클러스터 공유 - Express Mode 서비스는 Amazon ECS 클러스터에서 함께 그룹화할 수 있어요. Express Mode 서비스는 또한 Express Mode가 관리하지 않는 Amazon ECS Services와 Amazon ECS 클러스터를 공유할 수 있어요.

더 알아보기 (Learn more)