Amazon ECS 서비스 파라미터 업데이트 - Amazon Elastic Container Service

Amazon ECS 서비스 파라미터 업데이트

서비스를 생성한 후 태스크 수 등의 서비스 파라미터를 업데이트해야 하는 경우가 있습니다.

서비스 스케줄러는 새 태스크를 시작할 때 다음 로직을 사용하여 클러스터에 태스크 배치를 결정합니다.

  • 클러스터에서 어떤 컨테이너 인스턴스가 서비스의 태스크 정의를 지원할 수 있는지 결정합니다. 예를 들어, 필요한 CPU, 메모리, 포트 및 컨테이너 인스턴스 속성이 있습니다.

  • 기본적으로 서비스 스케줄러는 다른 배치 전략을 선택할 수 있더라도 이러한 방식으로 가용 영역 전체에 태스크 분배를 시도합니다.

    • 인스턴스와 동일한 가용 영역에서 이 서비스에 대해 실행 중인 태스크 수가 가장 적은 순서로 유효한 컨테이너 인스턴스를 정렬합니다. 예를 들어 영역 A에는 실행 중인 서비스 작업이 1개이고, 영역 B 및 C에는 0개일 경우 영역 B 또는 C가 최적 배치로 간주됩니다.

    • 새 서비스 태스크를 최적 가용 영역(이전 단계에서 결정됨)의 유효한 컨테이너 인스턴스에 배치하되, 이 서비스의 실행 작업 수가 가장 작은 컨테이너 인스턴스를 우선으로 합니다.

서비스 스케줄러는 실행 태스크를 중지할 때 다음 논리를 사용하여 클러스터의 가용 영역 간에 밸런싱을 유지하려고 합니다.

  • 인스턴스와 동일한 가용 영역에서 이 서비스에 대해 실행 중인 태스크 수가 가장 많은 순서로 컨테이너 인스턴스를 정렬합니다. 예를 들어 영역 A에는 실행 중인 서비스 작업이 1개이고, 영역 B 및 C에는 2개일 경우 영역 B 또는 C의 컨테이너 인스턴스가 최적 종료로 간주됩니다.

  • 최적 가용 영역(이전 단계에서 결정됨)의 컨테이너 인스턴스에서 태스크를 중지하되, 이 서비스의 실행 작업 수가 가장 큰 컨테이너 인스턴스를 우선으로 합니다.

목록을 사용하여 서비스 파라미터를 변경할 수 있는지 확인합니다.

가용 영역 재조정

서비스에 가용 영역 재분배를 사용할지 여부를 나타냅니다.

롤링 배포에 대해 이 파라미터를 변경할 수 있습니다.

용량 제공자 전략

용량 공급자 전략의 세부 정보입니다. 클러스터를 생성하거나, 태스크를 실행하거나, 서비스를 업데이트할 때 용량 제공자를 설정할 수 있습니다.

Fargate를 사용하는 경우 용량 제공자는 FARGATE 또는 FARGATE_SPOT입니다.

Amazon EC2를 사용하는 경우 용량 제공자는 Auto Scaling 그룹입니다.

롤링 배포와 블루/그린 배포에 대해 용량 제공자를 변경할 수 있습니다.

다음 목록은 유효한 전환을 제공합니다.

  • Fargate 시작 유형을 Auto Scaling 그룹 용량 제공자로 업데이트합니다.

  • Amazon EC2 시작 유형을 Fargate 용량 제공자로 업데이트합니다.

  • Fargate 용량 제공자를 Auto Scaling 그룹 용량 제공자로 업데이트합니다.

  • Amazon EC2 용량 제공자를 Fargate 용량 제공자로 업데이트합니다.

  • Auto Scaling 그룹 또는 Fargate 용량 제공자를 시작 유형으로 다시 업데이트합니다. CLI나 API를 사용할 때 capacityProviderStrategy 파라미터에 빈 목록을 전달합니다.

클러스터

클러스터 이름은 변경할 수 없습니다.

배포 구성

배포 구성에는 CloudWatch 경보, 장애 감지에 사용되는 회로 차단기 및 필요한 구성이 포함됩니다.

배포 회로 차단기는 서비스가 정상 상태에 도달할 수 없는 경우 서비스 배포가 실패할지 여부를 결정합니다. 배포 회로 차단기를 사용하는 경우 서비스 배포가 실패 상태로 전환되고 새 태스크 시작이 중지됩니다. 롤백 옵션을 사용하는 경우 서비스 배포가 실패하면 성공적으로 완료된 마지막 배포로 서비스가 롤백됩니다.

Amazon ECS 회로 차단기가 사용되는 서비스를 업데이트할 때 Amazon ECS에서는 서비스 배포 및 서비스 개정이 생성됩니다. 이러한 리소스를 통해 서비스 기록에 대한 자세한 내용을 볼 수 있습니다. 자세한 내용은 Amazon ECS 서비스 배포를 사용하여 서비스 기록 보기 섹션을 참조하세요.

서비스 스케줄러는 (서비스에 대한 배포 구성에서) 최소 정상 상태 백분율 및 최대 백분율 파라미터를 사용하여 배포 전략을 결정합니다.

서비스에서 롤링 업데이트(ECS) 배포 유형을 사용하는 경우 최소 정상 백분율은 배포 중에 RUNNING 상태를 유지해야 하는 서비스의 태스크 수에 대한 하한을 나타내며, 원하는 태스크 수(가장 가까운 정수로 반올림됨)의 백분율로 표시됩니다. EC2 시작 유형을 사용하는 작업이 서비스에 포함된 경우, 이 파라미터는 컨테이너 인스턴스가 DRAINING 상태에 있는 동안에도 적용됩니다. 추가 클러스터 용량을 사용하지 않고 배포하려면 이 파라미터를 사용합니다. 예를 들어 서비스에서 원하는 작업 수가 4개이고 최소 정상 상태 백분율이 50%일 경우 스케줄러가 새 작업 2개를 시작하기 전에 기존 작업 2개를 중지하여 클러스터 용량을 확보할 수 있습니다. 로드 밸런서를 사용하지 않는 서비스의 태스크는 RUNNING 상태일 경우에 정상으로 간주됩니다. 로드 밸런서를 사용하는 서비스의 태스크는 RUNNING 상태이고 로드 밸런서에 의해 정상으로 보고되는 경우에 정상으로 간주됩니다. 최소 정상 상태 백분율의 기본값은 100%입니다.

서비스에서 롤링 업데이트(ECS) 배포 유형을 사용하는 경우 최대 백분율 파라미터는 배포 중에 PENDING, RUNNING 또는 STOPPING 상태로 허용되는 서비스의 태스크 수에 대한 상한을 나타내며, 원하는 태스크 수(가장 가까운 정수로 반내림)의 백분율로 표시됩니다. EC2 시작 유형을 사용하는 작업이 서비스에 포함된 경우, 이 파라미터는 컨테이너 인스턴스가 DRAINING 상태에 있는 동안에도 적용됩니다. 이 파라미터를 사용하여 배포 배치 크기를 정의합니다. 예를 들면, 서비스에서 원하는 작업의 수가 4개이고 최대 백분율 값이 200%인 경우, 스케줄러가 기존 작업 4개를 중지하기 전에 새 작업 4개를 시작할 수 있습니다. 단, 이렇게 하는 데 필요한 클러스터 리소스를 사용할 수 있는 경우를 전제로 합니다. 최대 백분율의 기본값은 200%입니다.

서비스 스케줄러가 업데이트 도중 태스크를 교체할 때 서비스는 먼저 로드 밸런서(사용될 경우)에서 태스크를 제거하고 연결이 드레이닝될 때까지 대기합니다. 그런 다음, 태스크를 실행하는 컨테이너에 docker stop과 동등한 명령이 전송됩니다. 그 결과 SIGTERM 신호 및 30초 제한 시간이 발생하고, 이 제한 시간이 경과되면 SIGKILL이 전송되어 컨테이너가 강제로 중지됩니다. 컨테이너가 SIGTERM 신호를 정상적으로 처리하여 신호 수신 후 30초 이내에 종료할 경우 SIGKILL 신호가 전송되지 않습니다. 서비스 스케줄러는 최소 정상 상태 백분율 및 최대 백분율 파라미터 설정에 정의된 대로 태스크를 시작 및 중지합니다.

또한 서비스 스케줄러는 컨테이너 상태 확인 또는 로드 밸런서 대상 그룹 상태 확인이 실패한 후 비정상으로 확인된 작업을 대체합니다. 이러한 대체는 maximumPercentdesiredCount 서비스 정의 파라미터에 따라 달라집니다. 작업이 비정상으로 표시되면 서비스 스케줄러는 먼저 대체 작업을 시작합니다. 그러면 다음과 같이 진행됩니다.

  • 대체 작업의 상태가 HEALTHY인 경우 서비스 스케줄러는 비정상 작업을 중지합니다.

  • 대체 작업의 상태가 UNHEALTHY이면, 스케줄러는 비정상 대체 작업 또는 기존의 비정상 작업을 중지하여 총 작업 수가 desiredCount와 같아지도록 합니다.

maximumPercent 파라미터로 인해 스케줄러가 대체 작업을 먼저 시작하는 것이 제한되는 경우, 스케줄러는 비정상 작업을 한 번에 하나씩 임의로 중지하여 용량을 확보한 다음 대체 작업을 시작합니다. 비정상 작업이 모두 정상 작업으로 대체될 때까지 시작 및 중지 프로세스가 계속됩니다. 비정상 작업이 모두 대체되고 정상 작업만 실행 중인 경우 총 작업 수가 desiredCount를 초과하면 총 작업 수가 desiredCount와 같아질 때까지 정상 작업을 무작위로 중지합니다. maximumPercentdesiredCount에 대한 자세한 정보는 Service definition parameters를 참조하세요.

원하는 태스크 개수

서비스에서 배치하고 계속 실행할 태스크의 인스턴스화 횟수입니다.

서비스를 일시적으로 중지하려면 값을 0으로 설정합니다. 그런 다음, 서비스를 시작할 준비가 되면 원래 값으로 서비스를 업데이트합니다.

롤링 배포와 블루/그린 배포에 대해 이 파라미터를 변경할 수 있습니다.

관리형 태그 활성화

서비스의 태스크에 대해 Amazon ECS 관리형 태그를 켤지 여부를 결정합니다.

업데이트 후 시작된 태스크에만 업데이트가 반영됩니다. 모든 태스크에서 태그를 업데이트하려면 강제 배포 옵션을 사용합니다.

롤링 배포와 블루/그린 배포에 대해 이 파라미터를 변경할 수 있습니다.

ECS Exec 활성화

Amazon ECS Exec 사용 여부를 결정합니다.

서비스가 생성될 때 설정된 값을 재정의하지 않으려면 이 작업을 수행할 때 이를 null로 설정할 수 있습니다.

롤링 배포에 대해 이 파라미터를 변경할 수 있습니다.

상태 확인 유예 기간

이 기간(초) 동안 Amazon ECS 서비스 스케줄러는 태스크가 처음 시작된 후 비정상 Elastic Load Balancing, VPC Lattice, 컨테이너 상태 확인을 무시합니다. 상태 확인 유예 기간 값을 지정하지 않으면 기본값인 0이 사용됩니다. 상태 확인을 사용하지 않으면 healthCheckGracePeriodSeconds는 사용되지 않습니다.

서비스의 태스크가 시작하고 상태 확인에 응답하는 데 시간이 다소 걸린다면 최대 2,147,483,647초(약 69년)의 상태 확인 유예 기간을 지정할 수 있습니다. 이 기간에는 Amazon ECS 서비스 스케줄러가 상태 확인의 상태를 무시합니다. 이 유예 기간은 서비스 스케줄러가 태스크를 비정상으로 표시하여 작업 처리 전에 이를 중단시키는 일이 없도록 해줍니다.

롤링 배포와 블루/그린 배포에 대해 이 파라미터를 변경할 수 있습니다.

로드 밸런서

로드 밸런서를 업데이트할 때 서비스 연결 역할을 사용해야 합니다.

Elastic Load Balancing 로드 밸런서 객체의 목록입니다. 여기에는 로드 밸런서 이름, 컨테이너 이름 및 로드 밸런서에서 액세스할 컨테이너 포트가 포함됩니다. 컨테이너 이름은 컨테이너 정의에 표시되는 이름과 같습니다.

Amazon ECS는 Elastic Load Balancing 로드 밸런서 또는 Amazon ECS 컨테이너 인스턴스에 연결된 보안 그룹을 자동으로 업데이트하지 않습니다.

로드 밸런서 구성을 추가, 업데이트 또는 제거하면 Amazon ECS가 업데이트된 Elastic Load Balancing 구성으로 새 태스크를 시작한 다음 새 태스크가 실행 중일 때 이전 태스크를 중지합니다.

롤링 업데이트를 사용하는 서비스의 경우 Elastic Load Balancing 대상 그룹을 추가, 업데이트 또는 제거할 수 있습니다. 단일 대상 그룹에서 여러 대상 그룹으로 업데이트하고, 여러 대상 그룹에서 단일 대상 그룹으로 업데이트할 수 있습니다.

블루/그린 배포를 사용하는 서비스의 경우 CodeDeploy를 통해 CreateDeployment를 사용하여 Elastic Load Balancing 대상 그룹을 업데이트할 수 있습니다. 블루/그린 배포에는 여러 대상 그룹이 지원되지 않는다는 점에 유의하세요. 자세한 내용은 Amazon ECS 서비스에 여러 대상 그룹 등록을 참조하세요.

외부 배포 컨트롤러를 사용하는 서비스의 경우 CreateTaskSet를 사용하여 로드 밸런서를 추가, 업데이트 또는 제거할 수 있습니다. 외부 배포에는 여러 대상 그룹이 지원되지 않는다는 점에 유의하세요. 자세한 내용은 Amazon ECS 서비스에 여러 대상 그룹 등록을 참조하세요.

로드 밸런서를 제거하려면 빈 목록을 전달합니다.

롤링 배포에 대해 이 파라미터를 변경할 수 있습니다.

네트워크 구성

서비스 네트워크 구성입니다.

롤링 배포에 대해 이 파라미터를 변경할 수 있습니다.

배치 제약 조건

사용할 서비스를 업데이트할 태스크 배치 제약 조건 객체의 배열입니다. 값을 지정하지 않으면 서비스에 대한 기존 배치 제약 조건이 변경되지 않습니다. 이 값을 지정하면 서비스에 대해 정의된 기존 배치 제약 조건이 재정의됩니다. 기존 배치 제약 조건을 모두 제거하려면 빈 배열을 지정합니다.

태스크당 최대 10개의 제약 조건을 지정할 수 있습니다. 이 제한에는 태스크 정의 내의 제약 조건과 런타임 시 지정되는 제약 조건이 포함됩니다.

롤링 배포와 블루/그린 배포에 대해 이 파라미터를 변경할 수 있습니다.

배치 전략

사용할 서비스를 업데이트할 태스크 배치 전략 객체입니다. 값을 지정하지 않으면 서비스에 대한 기존 배치 전략이 변경되지 않습니다. 이 값을 지정하면 서비스에 대해 정의된 기존 배치 전략이 재정의됩니다. 기존 배치 전략을 제거하려면 빈 객체를 지정합니다.

롤링 배포와 블루/그린 배포에 대해 이 파라미터를 변경할 수 있습니다.

플랫폼 버전

서비스가 실행되는 Fargate 플랫폼 버전입니다.

Linux 플랫폼 버전을 사용하는 서비스는 Windows 플랫폼 버전을 사용하도록 업데이트할 수 없으며 그 반대의 경우도 마찬가지입니다.

롤링 배포에 대해 이 파라미터를 변경할 수 있습니다.

태그 전파

태그를 태스크 정의 또는 서비스에서 태스크로 전파할지 여부를 결정합니다. 값을 지정하지 않으면 태그가 전파되지 않습니다.

업데이트 후 시작된 태스크에만 업데이트가 반영됩니다. 모든 태스크의 태그를 업데이트하려면 Amazon ECS가 업데이트된 태그를 사용하여 새 태스크를 시작하도록 forceNewDeploymenttrue로 설정합니다.

롤링 배포와 블루/그린 배포에 대해 이 파라미터를 변경할 수 있습니다.

Service Connect 구성

Amazon ECS Service Connect에 대한 구성입니다. 이 파라미터는 서비스가 애플리케이션 내의 다른 서비스에 연결되는 방법을 결정합니다.

롤링 배포에 대해 이 파라미터를 변경할 수 있습니다.

서비스 레지스트리

서비스 레지스트리를 업데이트할 때 서비스 연결 역할을 사용해야 합니다.

이 서비스에 할당할 서비스 검색 레지스트리의 세부 정보입니다. 자세한 내용은 서비스 검색을 참조하세요.

서비스 레지스트리 구성을 추가, 업데이트 또는 제거하면 Amazon ECS기 업데이트된 서비스 레지스트리 구성으로 새 태스크를 시작한 다음 새 태스크가 실행 중일 때 이전 태스크를 중지합니다.

서비스 레지스트리를 제거하려면 빈 목록을 전달합니다.

롤링 배포에 대해 이 파라미터를 변경할 수 있습니다.

태스크 정의

서비스에 사용할 태스크 정의와 개정입니다.

태스크 정의에서 컨테이너가 사용하는 포트를 변경하는 경우 업데이트된 포트와 함께 작동하도록 컨테이너 인스턴스에 대한 보안 그룹을 업데이트해야 합니다.

서비스에 대한 작업 정의를 업데이트하는 경우, 로드 밸런서 구성에서 지정한 컨테이너 이름 및 컨테이너 포트는 작업 정의에서 그대로 유지해야 합니다.

컨테이너 이미지 가져오기 동작은 시작 유형에 따라 다릅니다. 자세한 내용은 다음 중 하나를 참조하십시오.

롤링 배포에 대해 이 파라미터를 변경할 수 있습니다.

볼륨 구성

configuredAtLaunch였던 볼륨의 세부 정보입니다. true로 설정하면 이 파라미터는 배포 중 Amazon EBS 태스크 연결을 구성합니다. ServiceManagedEBSVolumeConfiguration에서 크기, volumeType, IOPS, 처리량, 스냅샷 및 암호화를 구성할 수 있습니다. 볼륨의 name은 태스크 정의의 name과 일치해야 합니다. null로 설정하면 새 배포가 트리거되지 않습니다. 그렇지 않으면 이 구성이 기존 구성과 다를 경우 새 배포가 트리거됩니다.

롤링 배포에 대해 이 파라미터를 변경할 수 있습니다.

VPC Lattice 구성

서비스에 대한 VPC Lattice 구성입니다. 이는 서비스 간 통신을 위해 서비스가 VPC Lattice와 통합되는 방법을 정의합니다.

롤링 배포에 대해 이 파라미터를 변경할 수 있습니다.

AWS CDK 고려 사항

AWS CDK는 리소스 상태를 추적하지 않습니다. 서비스를 생성하는지, 업데이트하는지는 알 수 없습니다. 고객은 이스케이프 해치를 사용하여 ecs Service L1 구문에 직접 액세스해야 합니다.

이스케이프 해치에 대한 자세한 내용은 AWS 클라우드 개발 키트 (AWS CDK) v2 Developer GuideCustomize constructs from the AWS Construct Library를 참조하세요.

기존 서비스를 ecs.Service 구문으로 마이그레이션하려면 다음을 수행하세요.

  1. 이스케이프 해치를 사용하여 Service L1 구문에 액세스합니다.

  2. Service L1 구문에서 다음 속성을 수동으로 설정합니다.

    서비스에서 Amazon EC2 용량을 사용하는 경우

    • daemon?

    • placementConstraints?

    • placementStrategies?

    • awsvpc 네트워크 모드를 사용하는 경우 vpcSubnets?securityGroups? 구문을 설정해야 합니다.

    서비스에서 Fargate를 사용하는 경우

    • FargatePlatformVersion

    • vpcSubnets?securityGroups? 구문입니다.

  3. 다음과 같이 launchType을 설정합니다.

    const cfnEcsService = service.node.findChild('Service') as ecs.CfnService; cfnEcsService.launchType = "FARGATE";

시작 유형에서 용량 제공자로 마이그레이션하려면 다음을 수행하세요.

  1. 이스케이프 해치를 사용하여 Service L1 구문에 액세스합니다.

  2. capacityProviderStrategies? 구문을 추가합니다.

  3. 서비스를 배포합니다.