EC2 집합 작업 - Amazon Elastic Compute Cloud

EC2 집합 작업

EC2 집합 사용을 시작하려면 총 목표 용량, 온디맨드 용량, 스팟 용량, 인스턴스에 대한 하나 이상의 시작 사양, 지불하려는 최고 가격을 포함하는 요청을 생성합니다. AMI, 인스턴스 유형, 서브넷 또는 가용 영역 및 하나 이상의 보안 그룹과 같이 인스턴스를 시작하기 위해 필릿에 필요한 정보를 정의하는 시작 템플릿을 플릿 요청에 포함해야 합니다. 인스턴스 유형, 서브넷, 가용 영역 및 지불하려는 최고 가격의 시작 사양 재정의를 지정할 수 있으며 가중치가 적용된 용량을 각 시작 사양 재정의에 할당할 수 있습니다.

EC2 집합은 가용 용량이 있을 때 온디맨드 인스턴스를 시작하며, 최고 가격이 스팟 가격을 초과하고 가용 용량이 있을 때 스팟 인스턴스를 시작합니다.

플릿에 스팟 인스턴스가 포함되어 있으면 Amazon EC2에서 스팟 가격의 변화에 따라 플릿 목표 용량을 유지하려고 할 수 있습니다.

maintain 또는 request 유형의 EC2 집합 요청은 요청이 만료되거나 삭제될 때까지 활성 상태로 유지됩니다. maintain 또는 request 유형의 플릿을 삭제할 때 삭제로 인해 해당 플릿의 인스턴스가 종료될지 여부를 지정할 수 있습니다. 그렇지 않으면 온디맨드 인스턴스는 사용자가 종료할 때까지 실행되고 스팟 인스턴스는 중단되거나 사용자가 종료할 때까지 실행됩니다.

EC2 집합 요청 상태

EC2 집합 요청은 다음 상태 중 하나일 수 있습니다.

submitted

EC2 집합 요청을 평가 중이며 Amazon EC2에서 목표 개수의 인스턴스를 시작하기 위해 준비 중입니다. 온디맨드 인스턴스, 스팟 인스턴스 또는 둘 다를 요청에 포함할 수 있습니다. 요청이 플릿 제한을 초과하면 즉시 해당 요청이 삭제됩니다.

active

EC2 집합 요청이 확인되었으며 Amazon EC2가 실행 중인 인스턴스를 목표 개수만큼 유지하려고 시도하고 있습니다. 요청은 수정하거나 삭제할 때까지 이 상태로 유지됩니다.

modifying

EC2 집합 요청을 수정하고 있습니다. 수정이 완전히 처리되거나 요청이 삭제될 때까지 요청이 이 상태로 유지됩니다. maintain 플릿 유형만 수정할 수 있습니다. 이 상태는 다른 요청 유형에는 적용되지 않습니다.

deleted_running

EC2 집합 요청이 삭제되었고 추가 인스턴스를 시작하지 않습니다. 수동으로 중단되거나 종료될 때까지 기존 인스턴스가 계속 실행됩니다. 그 요청은 모든 인스턴스가 중단 또는 종료될 때까지 계속 이 상태로 유지됩니다. EC2 집합 요청이 삭제된 후에는 maintain 또는 request 유형의 EC2 집합에서만 인스턴스를 실행할 수 있습니다. 삭제된 instant 플릿에서 인스턴스를 실행하는 것은 지원되지 않습니다. 이 상태는 instant 플릿에는 적용되지 않습니다.

deleted_terminating

EC2 집합 요청이 삭제되었고 해당 인스턴스를 종료하는 중입니다. 그 요청은 모든 인스턴스가 종료될 때까지 계속 이 상태로 유지됩니다.

deleted

EC2 집합이 삭제되고 실행 중인 인스턴스가 없습니다. 인스턴스가 종료되고 2일 후 요청이 삭제됩니다.

EC2 집합 사전 조건

시작 템플릿

시작 템플릿에는 인스턴스 유형, 가용 영역, 지불하려는 최고 가격 등 시작할 인스턴스에 대한 정보가 포함됩니다. 자세한 내용은 시작 템플릿에서 인스턴스 시작 섹션을 참조하세요.

EC2 집합의 서비스 연결 역할

AWSServiceRoleForEC2Fleet 역할은 EC2 플릿에 사용자 대신 인스턴스를 요청, 시작, 종료 및 태깅할 수 있는 권한을 부여합니다. Amazon EC2는 이 서비스 연결 역할을 사용하여 다음 작업을 완료합니다.

  • ec2:RunInstances – 인스턴스를 시작합니다.

  • ec2:RequestSpotInstances – 스팟 인스턴스 요청.

  • ec2:TerminateInstances – 인스턴스를 종료합니다.

  • ec2:DescribeImages – 스팟 인스턴스용 Amazon Machine Image(AMI)를 설명합니다.

  • ec2:DescribeInstanceStatus – 스팟 인스턴스의 상태를 설명합니다.

  • ec2:DescribeSubnets – 스팟 인스턴스용 서브넷에 대해 설명합니다.

  • ec2:CreateTags – EC2 집합, 인스턴스 및 볼륨에 태그를 추가합니다.

AWS CLI 또는 API를 사용하여 EC2 플릿을 생성하려면 먼저 이 역할이 있어야 합니다.

참고

instant EC2 집합에는 이 역할이 필요하지 않습니다.

역할을 생성하려면 다음과 같이 IAM 콘솔을 사용하세요.

EC2 집합에 대한 AWSServiceRoleForEC2Fleet 역할 생성
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 역할을 선택한 후 역할 생성을 선택합니다.

  3. 신뢰할 수 있는 엔터티 유형 선택(Select type of trusted entity)에서 AWS 서비스(service)를 선택합니다.

  4. 이 역할을 사용할 서비스 선택(Choose the service that will use this role)에서 EC2 - 플릿(EC2 - Fleet)을 선택한 다음 다음: 권한(Next: Permissions), 다음: 태그(Next: Tags), 및 다음: 검토(Next: Review)를 선택합니다.

  5. 검토 페이지에서 역할 만들기를 선택합니다.

EC2 집합이 더 이상 필요 없으면 AWSServiceRoleForEC2Fleet 역할을 삭제하는 것이 좋습니다. 계정에서 이 역할을 삭제한 후 다른 플릿을 생성하면 다시 역할을 만들 수 있습니다.

자세한 내용은 IAM 사용 설명서서비스 연결 역할 사용을 참조하십시오.

암호화된 AMI 및 EBS 스냅샷에 사용할 고객 관리형 키에 대한 액세스 권한 부여

EC2 플릿에 암호화된 AMI 또는 암호화된 Amazon EBS 스냅샷을 지정하고 AWS KMS 키를 암호화에 사용하는 경우, AWSServiceRoleForEC2Fleet 역할에 고객 관리형 키를 사용할 수 있는 권한을 부여해야 Amazon EC2에서 사용자 대신 인스턴스를 시작할 수 있습니다. 이렇게 하려면 다음 절차에 표시된 바와 같이 고객 관리형 키에 대한 권한 부여를 추가해야 합니다.

권한을 제공할 때 권한 부여는 키 정책을 대체합니다. 자세한 내용은 AWS Key Management Service 개발자 안내서에서 권한 부여 사용AWS KMS의 키 정책 사용을 참조하세요.

AWSServiceRoleForEC2Fleet 역할에 고객 관리형 키를 사용할 수 있는 권한을 부여하려면
  • create-grant 명령을 사용하여 고객 관리형 키에 대한 권한 부여를 추가하고 허용된 작업을 수행할 수 있는 권한이 부여된 보안 주체(AWSServiceRoleForEC2Fleet 서비스 연결 역할)를 지정합니다. 고객 관리형 키는 key-id 파라미터와 고객 관리형 키의 ARN으로 지정됩니다. 보안 주체는 AWSServiceRoleForEC2Fleet 서비스 연결 역할의 grantee-principal 파라미터 및 ARN에 의해 지정됩니다.

    aws kms create-grant \ --region us-east-1 \ --key-id arn:aws:kms:us-east-1:444455556666:key/1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:role/AWSServiceRoleForEC2Fleet \ --operations "Decrypt" "Encrypt" "GenerateDataKey" "GenerateDataKeyWithoutPlaintext" "CreateGrant" "DescribeKey" "ReEncryptFrom" "ReEncryptTo"

EC2 플릿 사용자의 권한

EC2 플릿을 생성하거나 관리하는 사용자에게 필요한 권한을 부여해야 합니다.

EC2 플릿에 대한 정책 생성
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 탐색 창에서 정책을 선택합니다.

  3. [Create policy]를 선택합니다.

  4. 정책 생성 페이지에서 JSON 탭을 선택한 다음, 텍스트를 다음과 같이 바꾸고 정책 검토를 선택합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:ListRoles", "iam:PassRole", "iam:ListInstanceProfiles" ], "Resource":"arn:aws:iam::123456789012:role/DevTeam*" } ] }

    ec2:*는 모든 Amazon EC2 API 작업을 호출할 수 있는 사용자 권한을 부여합니다. 사용자를 특정 Amazon EC2 API 작업으로 제한하려면 해당 작업을 대신 지정하세요.

    사용자에는 기존 IAM 역할을 열거하는 iam:ListRoles 작업, EC2 집합 역할을 지정하는 iam:PassRole 작업 및 기존 인스턴스 프로파일을 열거하는 iam:ListInstanceProfiles 작업을 호출할 수 있는 권한이 있어야 합니다.

    (선택 사항) 사용자가 IAM 콘솔을 사용하여 역할 또는 인스턴스 프로파일을 생성할 수 있도록 하려면 정책에 다음 작업도 추가해야 합니다.

    • iam:AddRoleToInstanceProfile

    • iam:AttachRolePolicy

    • iam:CreateInstanceProfile

    • iam:CreateRole

    • iam:GetRole

    • iam:ListPolicies

  5. 정책 검토 페이지에 정책 이름과 설명을 입력한 다음 정책 생성을 선택합니다.

  6. 액세스 권한을 제공하려면 사용자, 그룹 또는 역할에 권한을 추가하세요:

    • AWS IAM Identity Center의 사용자 및 그룹:

      권한 세트를 생성합니다. AWS IAM Identity Center 사용 설명서권한 세트 생성의 지침을 따르세요.

    • ID 공급자를 통해 IAM에서 관리되는 사용자:

      ID 페더레이션을 위한 역할을 생성합니다. IAM 사용 설명서서드 파티 자격 증명 공급자의 역할 만들기(연동)의 지침을 따르세요.

    • IAM 사용자:

      • 사용자가 맡을 수 있는 역할을 생성합니다. IAM 사용 설명서에서 IAM 사용자의 역할 생성의 지침을 따르세요.

      • (권장되지 않음)정책을 사용자에게 직접 연결하거나 사용자를 사용자 그룹에 추가합니다. IAM 사용 설명서에서 사용자(콘솔)에 권한 추가의 지침을 따르세요.

EC2 집합 상태 확인

EC2 집합은 분마다 플릿의 인스턴스 상태를 확인합니다. 인스턴스의 상태는 healthy 또는 unhealthy입니다.

EC2 집합은 Amazon EC2에서 제공하는 상태 확인을 사용하여 인스턴스의 상태를 판단합니다. 세 번의 연속 상태 확인에서 인스턴스 상태 또는 시스템 상태가 unhealthy인 경우, 해당 인스턴스의 상태는 impaired으로 확인됩니다. 자세한 내용은 인스턴스 상태 확인 섹션을 참조하세요.

플릿을 구성하여 비정상 스팟 인스턴스를 교체할 수 있습니다. ReplaceUnhealthyInstancestrue로 설정한 이후 스팟 인스턴스는 unhealthy로 보고될 때 교체됩니다. 플릿은 비정상 스팟 인스턴스가 교체되는 동안 최대 몇 분간 목표 용량을 밑돌 수 있습니다.

요구 사항
  • 상태 확인 교체는 목표 용량을 유지하는 EC2 집합(maintain 유형 플릿)에만 지원되지만 request 또는 instant 유형 플릿에서는 지원되지 않습니다.

  • 상태 확인 교체는 스팟 인스턴스에 대해서만 지원됩니다. 이 기능은 온디맨드 인스턴스에 대해 지원되지 않습니다.

  • 비정상 인스턴스를 생성할 경우에만 이를 교체하도록 EC2 집합을 구성할 수 있습니다.

  • 사용자는 ec2:DescribeInstanceStatus 작업을 호출할 권한이 있는 경우에만 상태 확인 대체를 사용할 수 있습니다.

비정상 스팟 인스턴스를 교체하도록 EC2 집합을 구성하려면
  1. EC2 집합 생성 단계를 따릅니다. 자세한 내용은 EC2 집합 생성 섹션을 참조하세요.

  2. 비정상 스팟 인스턴스를 교체하도록 플릿을 구성하려면 JSON 파일에서 ReplaceUnhealthyInstances에 대해 true를 입력합니다.

EC2 집합 JSON 구성 파일 생성

EC2 플릿 구성 파라미터의 전체 목록을 보려면 JSON 파일을 생성할 수 있습니다. 각 파라미터에 대한 설명은 AWS CLI 명령 레퍼런스의 create-fleet을 참조하세요.

명령줄을 사용하여 가능한 모든 EC2 집합 파라미터가 포함된 JSON 파일을 생성하려면
  • create-fleet(AWS CLI) 명령 및 --generate-cli-skeleton 파라미터를 사용하여 EC2 플릿 JSON 파일을 생성하고 파일에 출력을 향하게 하여 저장합니다.

    aws ec2 create-fleet \ --generate-cli-skeleton input > ec2createfleet.json

    출력 예시

    { "DryRun": true, "ClientToken": "", "SpotOptions": { "AllocationStrategy": "capacity-optimized", "MaintenanceStrategies": { "CapacityRebalance": { "ReplacementStrategy": "launch" } }, "InstanceInterruptionBehavior": "hibernate", "InstancePoolsToUseCount": 0, "SingleInstanceType": true, "SingleAvailabilityZone": true, "MinTargetCapacity": 0, "MaxTotalPrice": "" }, "OnDemandOptions": { "AllocationStrategy": "prioritized", "CapacityReservationOptions": { "UsageStrategy": "use-capacity-reservations-first" }, "SingleInstanceType": true, "SingleAvailabilityZone": true, "MinTargetCapacity": 0, "MaxTotalPrice": "" }, "ExcessCapacityTerminationPolicy": "termination", "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateId": "", "LaunchTemplateName": "", "Version": "" }, "Overrides": [ { "InstanceType": "r5.metal", "MaxPrice": "", "SubnetId": "", "AvailabilityZone": "", "WeightedCapacity": 0.0, "Priority": 0.0, "Placement": { "AvailabilityZone": "", "Affinity": "", "GroupName": "", "PartitionNumber": 0, "HostId": "", "Tenancy": "dedicated", "SpreadDomain": "", "HostResourceGroupArn": "" }, "InstanceRequirements": { "VCpuCount": { "Min": 0, "Max": 0 }, "MemoryMiB": { "Min": 0, "Max": 0 }, "CpuManufacturers": [ "amd" ], "MemoryGiBPerVCpu": { "Min": 0.0, "Max": 0.0 }, "ExcludedInstanceTypes": [ "" ], "InstanceGenerations": [ "previous" ], "SpotMaxPricePercentageOverLowestPrice": 0, "OnDemandMaxPricePercentageOverLowestPrice": 0, "BareMetal": "included", "BurstablePerformance": "required", "RequireHibernateSupport": true, "NetworkInterfaceCount": { "Min": 0, "Max": 0 }, "LocalStorage": "excluded", "LocalStorageTypes": [ "ssd" ], "TotalLocalStorageGB": { "Min": 0.0, "Max": 0.0 }, "BaselineEbsBandwidthMbps": { "Min": 0, "Max": 0 }, "AcceleratorTypes": [ "inference" ], "AcceleratorCount": { "Min": 0, "Max": 0 }, "AcceleratorManufacturers": [ "amd" ], "AcceleratorNames": [ "a100" ], "AcceleratorTotalMemoryMiB": { "Min": 0, "Max": 0 } } } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 0, "OnDemandTargetCapacity": 0, "SpotTargetCapacity": 0, "DefaultTargetCapacityType": "on-demand", "TargetCapacityUnitType": "memory-mib" }, "TerminateInstancesWithExpiration": true, "Type": "instant", "ValidFrom": "1970-01-01T00:00:00", "ValidUntil": "1970-01-01T00:00:00", "ReplaceUnhealthyInstances": true, "TagSpecifications": [ { "ResourceType": "fleet", "Tags": [ { "Key": "", "Value": "" } ] } ], "Context": "" }

EC2 집합 생성

EC2 플릿을 생성하려면 다음 파라미터만 지정하면 됩니다.

  • LaunchTemplateId 또는 LaunchTemplateName - 사용할 시작 템플릿을 지정합니다(인스턴스 유형, 가용 영역, 지불하려는 최고가 등 시작할 인스턴스에 대한 파라미터 포함).

  • TotalTargetCapacity - 플릿의 총 목표 용량을 지정합니다.

  • DefaultTargetCapacityType - 기본 구매 옵션이 온디맨드 또는 스팟인지 여부를 지정합니다.

시작 템플릿을 재정의하는 여러 시작 사양을 지정할 수 있습니다. 시작 사양은 인스턴스 유형, 가용 영역, 서브넷, 최고 가격에 따라 달라질 수 있으며 다른 가중치 용량을 포함할 수 있습니다. 또는 인스턴스에 있어야 하는 속성을 지정하면 Amazon EC2는 해당 속성으로 모든 인스턴스 유형을 식별합니다. 자세한 내용은 EC2 플릿에 대한 속성 기반 인스턴스 유형 선택 섹션을 참조하세요.

파라미터를 지정하지 않으면 플릿은 파라미터에 기본값을 사용됩니다.

JSON 파일의 플릿 파라미터를 지정합니다. 자세한 내용은 EC2 집합 JSON 구성 파일 생성 단원을 참조하십시오.

현재 콘솔에서 EC2 플릿 생성은 지원되지 않습니다.

EC2 플릿 생성(AWS CLI)
  • create-fleet(AWS CLI) 명령을 사용하여 EC2 플릿을 생성하고 플릿 구성 파라미터를 포함하는 JSON 파일을 지정합니다.

aws ec2 create-fleet --cli-input-json file://file_name.json

구성 파일에 대한 예시는 EC2 집합 구성의 예 섹션을 참조하세요.

다음은 request 또는 maintain 유형의 플릿에 대한 예제 출력입니다.

{ "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE" }

다음은 목표 용량을 시작한 instant 유형의 플릿에 대한 예제 출력입니다.

{ "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE", "Errors": [], "Instances": [ { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c5.large", "AvailabilityZone": "us-east-1a" } }, "Lifecycle": "on-demand", "InstanceIds": [ "i-1234567890abcdef0", "i-9876543210abcdef9" ], "InstanceType": "c5.large", "Platform": null }, { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c4.large", "AvailabilityZone": "us-east-1a" } }, "Lifecycle": "on-demand", "InstanceIds": [ "i-5678901234abcdef0", "i-5432109876abcdef9" ] ] }

다음은 시작되지 않은 인스턴스에 대한 오류와 함께 목표 용량의 일부를 시작한 instant 유형의 플릿에 대한 예제 출력입니다.

{ "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE", "Errors": [ { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c4.xlarge", "AvailabilityZone": "us-east-1a", } }, "Lifecycle": "on-demand", "ErrorCode": "InsufficientInstanceCapacity", "ErrorMessage": "" }, ], "Instances": [ { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c5.large", "AvailabilityZone": "us-east-1a" } }, "Lifecycle": "on-demand", "InstanceIds": [ "i-1234567890abcdef0", "i-9876543210abcdef9" ] ] }

어떤 인스턴스도 시작하지 않은 instant 유형의 플릿에 대한 예제 출력입니다.

{ "FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE", "Errors": [ { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c4.xlarge", "AvailabilityZone": "us-east-1a", } }, "Lifecycle": "on-demand", "ErrorCode": "InsufficientCapacity", "ErrorMessage": "" }, { "LaunchTemplateAndOverrides": { "LaunchTemplateSpecification": { "LaunchTemplateId": "lt-01234a567b8910abcEXAMPLE", "Version": "1" }, "Overrides": { "InstanceType": "c5.large", "AvailabilityZone": "us-east-1a", } }, "Lifecycle": "on-demand", "ErrorCode": "InsufficientCapacity", "ErrorMessage": "" }, ], "Instances": [] }

EC2 집합 태깅

EC2 집합 요청을 쉽게 분류하고 관리할 수 있도록 사용자 지정 메타데이터로 이 요청에 태그를 지정할 수 있습니다. EC2 집합 요청을 만들 때 또는 만든 후 요청에 태그를 지정할 수 있습니다.

플릿 요청에 태그를 지정할 때 플릿에서 시작한 인스턴스 및 볼륨에는 태그가 자동으로 지정되지 않습니다. 플릿에서 시작한 인스턴스 및 볼륨에 명시적으로 태그를 지정해야 합니다. 플릿 요청에만, 플릿에서 시작한 인스턴스에만, 플릿에서 시작한 인스턴스에 연결된 볼륨에만, 또는 세 가지 모두에 태그를 할당하도록 선택할 수 있습니다.

참고

instant 플릿 유형의 경우 온디맨드 인스턴스 및 스팟 인스턴스에 연결된 볼륨에 태그를 지정할 수 있습니다. request 또는 maintain 플릿 유형의 경우 온디맨드 인스턴스에 연결된 볼륨에만 태그를 지정할 수 있습니다.

태그 작동 방식에 대한 자세한 내용은 Amazon EC2 리소스 태깅 섹션을 참조하세요.

사전 조건

사용자에게 리소스에 태그를 지정할 수 있는 권한을 부여합니다. 자세한 내용은 예: 태그 리소스 단원을 참조하십시오.

사용자에게 리소스에 태그를 지정할 수 있는 권한 부여

다음을 포함하는 IAM 정책을 만듭니다.

  • ec2:CreateTags 작업 사용자에게 태그 생성 권한이 부여됩니다.

  • ec2:CreateFleet 작업 사용자에게 EC2 플릿 요청 생성 권한이 부여됩니다.

  • Resource의 경우 "*"를 지정하는 것이 좋습니다. 이를 통해 사용자는 모든 리소스 유형에 태그를 지정할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "TagEC2FleetRequest", "Effect": "Allow", "Action": [ "ec2:CreateTags", "ec2:CreateFleet" ], "Resource": "*" }
중요

create-fleet 리소스에 대한 리소스 수준 권한은 현재 지원되지 않습니다. create-fleet을 리소스로 지정하면 플릿에 태그를 지정하려고 할 때 승인되지 않은 예외가 발생합니다. 다음 예에서는 정책을 설정하지 않는 방법을 보여 줍니다.

{ "Effect": "Allow", "Action": [ "ec2:CreateTags", "ec2:CreateFleet" ], "Resource": "arn:aws:ec2:us-east-1:111122223333:create-fleet/*" }

액세스 권한을 제공하려면 사용자, 그룹 또는 역할에 권한을 추가하세요:

  • AWS IAM Identity Center의 사용자 및 그룹:

    권한 세트를 생성합니다. AWS IAM Identity Center 사용 설명서권한 세트 생성의 지침을 따르세요.

  • ID 공급자를 통해 IAM에서 관리되는 사용자:

    ID 페더레이션을 위한 역할을 생성합니다. IAM 사용 설명서서드 파티 자격 증명 공급자의 역할 만들기(연동)의 지침을 따르세요.

  • IAM 사용자:

    • 사용자가 맡을 수 있는 역할을 생성합니다. IAM 사용 설명서에서 IAM 사용자의 역할 생성의 지침을 따르세요.

    • (권장되지 않음)정책을 사용자에게 직접 연결하거나 사용자를 사용자 그룹에 추가합니다. IAM 사용 설명서에서 사용자(콘솔)에 권한 추가의 지침을 따르세요.

새 EC2 집합 요청에 태그를 지정하려면

EC2 집합 요청 생성 시 요청에 태그를 지정하려면 플릿을 생성하는 데 사용되는 JSON 파일에 키-값 페어를 지정하십시오. ResourceType의 값은 fleet이어야 합니다. 다른 값을 지정하면 집합 요청이 실패합니다.

EC2 집합에서 시작한 인스턴스 및 볼륨에 태그를 지정하려면

플릿이 시작하는 해당 인스턴스 및 볼륨에 태그를 지정하려면 EC2 집합 요청에서 참조되는 시작 템플릿에서 태그를 지정하십시오.

참고

request 또는 maintain 플릿 유형에서 시작한 스팟 인스턴스에 연결된 볼륨에는 태그를 지정할 수 없습니다.

기존 EC2 플릿 요청, 인스턴스 및 볼륨에 태깅(AWS CLI)

create-tags 명령을 사용하여 기존 리소스에 태그를 지정합니다.

aws ec2 create-tags \ --resources fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE i-1234567890abcdef0 vol-1234567890EXAMPLE \ --tags Key=purpose,Value=test

EC2 플릿 설명

EC2 플릿 구성, EC2 플릿의 인스턴스 및 EC2 플릿의 이벤트 기록을 설명할 수 있습니다.

EC2 플릿 설명(AWS CLI)

describe-fleets 명령을 사용하여 EC2 집합을 설명합니다.

aws ec2 describe-fleets
중요

플릿이 instant 유형인 경우 플릿 ID를 지정해야 합니다. 그렇지 않으면 플릿이 응답에 나타나지 않습니다. 다음과 같이 --fleet-ids를 포함합니다.

aws ec2 describe-fleets --fleet-ids fleet-8a22eee4-f489-ab02-06b8-832a7EXAMPLE

출력 예시

{ "Fleets": [ { "ActivityStatus": "fulfilled", "CreateTime": "2022-02-09T03:35:52+00:00", "FleetId": "fleet-364457cd-3a7a-4ed9-83d0-7b63e51bb1b7", "FleetState": "active", "ExcessCapacityTerminationPolicy": "termination", "FulfilledCapacity": 2.0, "FulfilledOnDemandCapacity": 0.0, "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Latest" } } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 2, "OnDemandTargetCapacity": 0, "SpotTargetCapacity": 2, "DefaultTargetCapacityType": "spot" }, "TerminateInstancesWithExpiration": false, "Type": "maintain", "ReplaceUnhealthyInstances": false, "SpotOptions": { "AllocationStrategy": "capacity-optimized", "InstanceInterruptionBehavior": "terminate" }, "OnDemandOptions": { "AllocationStrategy": "lowestPrice" } } ] }

describe-fleet-instances 명령을 사용하여 지정한 EC2 집합의 인스턴스를 설명합니다. 반환되는 실행 중 인스턴스 목록은 주기적으로 새로 고쳐지며 최신 상태가 아닐 수도 있습니다.

aws ec2 describe-fleet-instances --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE

출력 예시

{ "ActiveInstances": [ { "InstanceId": "i-09cd595998cb3765e", "InstanceHealth": "healthy", "InstanceType": "m4.large", "SpotInstanceRequestId": "sir-86k84j6p" }, { "InstanceId": "i-09cf95167ca219f17", "InstanceHealth": "healthy", "InstanceType": "m4.large", "SpotInstanceRequestId": "sir-dvxi7fsm" } ], "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" }

describe-fleet-history 명령을 사용하여 지정한 시간 동안 지정한 EC2 집합의 기록을 설명합니다.

aws ec2 describe-fleet-history --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE --start-time 2018-04-10T00:00:00Z

출력 예시

{ "HistoryRecords": [ { "EventInformation": { "EventSubType": "submitted" }, "EventType": "fleetRequestChange", "Timestamp": "2020-09-01T18:26:05.000Z" }, { "EventInformation": { "EventSubType": "active" }, "EventType": "fleetRequestChange", "Timestamp": "2020-09-01T18:26:15.000Z" }, { "EventInformation": { "EventDescription": "t2.small, ami-07c8bc5c1ce9598c3, ...", "EventSubType": "progress" }, "EventType": "fleetRequestChange", "Timestamp": "2020-09-01T18:26:17.000Z" }, { "EventInformation": { "EventDescription": "{\"instanceType\":\"t2.small\", ...}", "EventSubType": "launched", "InstanceId": "i-083a1c446e66085d2" }, "EventType": "instanceChange", "Timestamp": "2020-09-01T18:26:17.000Z" }, { "EventInformation": { "EventDescription": "{\"instanceType\":\"t2.small\", ...}", "EventSubType": "launched", "InstanceId": "i-090db02406cc3c2d6" }, "EventType": "instanceChange", "Timestamp": "2020-09-01T18:26:17.000Z" } ], "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE", "LastEvaluatedTime": "1970-01-01T00:00:00.000Z", "StartTime": "2018-04-09T23:53:20.000Z" }

EC2 집합 수정

submitted 또는 active 상태인 EC2 집합을 수정할 수 있습니다. 플릿을 수정할 때 플릿은 modifying 상태가 됩니다.

유형이 maintain인 EC2 집합만 수정할 수 있습니다. 유형이 request 또는 instant인 EC2 집합은 수정할 수 없습니다.

EC2 집합의 다음 파라미터를 수정할 수 있습니다.

  • target-capacity-specificationTotalTargetCapacity, OnDemandTargetCapacitySpotTargetCapacity의 목표 용량을 늘리거나 줄입니다.

  • excess-capacity-termination-policy – EC2 집합의 총 목표 용량이 플릿의 현재 크기보다 작아지면 실행 중인 인스턴스를 종료할지 여부입니다. 유효 값은 no-terminationtermination입니다.

목표 용량을 늘리면 EC2 집합이 DefaultTargetCapacityType에 지정한 인스턴스 구입 옵션(온디맨드 인스턴스 또는 스팟 인스턴스)에 따라 추가 인스턴스를 시작합니다.

DefaultTargetCapacityTypespot이면 EC2 집합이 할당 전략에 따라 추가 스팟 인스턴스를 시작합니다. 할당 전략이 lowest-price이면 플릿이 요청에 있는 최저 가격의 스팟 용량 풀에서 인스턴스를 시작합니다. 할당 전략이 diversified이면 플릿이 요청에 있는 풀에 인스턴스를 배포합니다.

목표 용량을 줄이면 EC2 집합이 새 목표 용량을 초과하는 모든 열린 요청을 삭제합니다. 플릿 크기가 새 목표 용량에 도달할 때까지 플릿이 인스턴스를 종료하도록 요청할 수 있습니다. 할당 전략이 lowest-price이면 플릿이 단위당 최고 가격의 인스턴스를 종료합니다. 할당 전략이 diversified이면 플릿이 풀 전체의 인스턴스를 종료합니다. 또는 EC2 집합이 플릿을 현재 크기로 유지하되 중단된 스팟 인스턴스나 사용자가 수동으로 종료하는 인스턴스를 교체하지 않도록 요청할 수 있습니다.

목표 용량이 줄어 EC2 플릿이 스팟 인스턴스를 종료하면 해당 인스턴스는 스팟 인스턴스 중단 공지를 받습니다.

EC2 플릿 수정(AWS CLI)

modify-fleet 명령을 사용하여 지정된 EC2 집합의 목표 용량을 업데이트합니다.

aws ec2 modify-fleet \ --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --target-capacity-specification TotalTargetCapacity=20

목표 용량을 줄이고 플릿은 현재 크기로 유지하려는 경우 다음과 같이 이전의 명령을 수정할 수 있습니다.

aws ec2 modify-fleet \ --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --target-capacity-specification TotalTargetCapacity=10 \ --excess-capacity-termination-policy no-termination

EC2 집합 삭제

EC2 집합이 더 이상 필요 없으면 삭제할 수 있습니다. 플릿을 삭제하면 플릿과 연결된 모든 스팟 요청이 취소되어 새 스팟 인스턴스가 시작되지 않습니다.

EC2 플릿을 삭제하는 경우 해당 인스턴스도 모두 종료할지 여부를 지정해야 합니다. 여기에는 온디맨드 인스턴스와 스팟 인스턴스가 모두 포함됩니다.

플릿이 삭제되면 인스턴스가 종료되도록 지정할 경우 플릿이 deleted_terminating 상태가 됩니다. 그렇지 않으면 deleted_running 상태가 되어 인스턴스가 중단되거나 수동으로 종료될 때까지 계속 실행됩니다.

제한 사항
  • 단일 요청으로 최대 25개의 instant 플릿을 삭제할 수 있습니다. 이 수를 초과하면 instant 플릿이 삭제되지 않고 오류가 반환됩니다. 단일 요청으로 삭제할 수 있는 maintain 또는 request 유형 플릿의 수에는 제한이 없습니다.

  • instant 플릿 삭제를 위한 단일 요청으로 최대 1,000개의 인스턴스를 종료할 수 있습니다.

EC2 플릿 삭제 및 해당 인스턴스 종료(AWS CLI)

delete-fleets 명령과 --terminate-instances 파라미터를 사용하여 지정된 EC2 플릿을 삭제하고 연결된 인스턴스를 종료합니다.

aws ec2 delete-fleets \ --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --terminate-instances

출력 예시

{ "UnsuccessfulFleetDeletions": [], "SuccessfulFleetDeletions": [ { "CurrentFleetState": "deleted_terminating", "PreviousFleetState": "active", "FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE" } ] }
인스턴스 종료 없이 EC2 플릿 삭제(AWS CLI)

--no-terminate-instances 파라미터를 사용해 이전의 명령을 수정하여 연결된 인스턴스를 종료하지 않고 지정된 EC2 플릿을 삭제할 수 있습니다.

참고

--no-terminate-instancesinstant 플릿에 대해 지원되지 않습니다.

aws ec2 delete-fleets \ --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \ --no-terminate-instances

출력 예시

{ "UnsuccessfulFleetDeletions": [], "SuccessfulFleetDeletions": [ { "CurrentFleetState": "deleted_running", "PreviousFleetState": "active", "FleetId": "fleet-4b8aaae8-dfb5-436d-a4c6-3dafa4c6b7dcEXAMPLE" } ] }

플릿 삭제 실패 시 문제 해결

EC2 집합가 삭제에 실패하는 경우 출력의 UnsuccessfulFleetDeletions에서 EC2 집합의 ID, 오류 코드 및 오류 메시지를 반환합니다.

오류 코드는 다음과 같습니다.

  • ExceededInstantFleetNumForDeletion

  • fleetIdDoesNotExist

  • fleetIdMalformed

  • fleetNotInDeletableState

  • NoTerminateInstancesNotSupported

  • UnauthorizedOperation

  • unexpectedError

ExceededInstantFleetNumForDeletion 문제 해결

단일 요청에서 25개 이상의 instant 플릿을 삭제하려고 하면 ExceededInstantFleetNumForDeletion 오류가 반환됩니다. 다음은 이 오류의 예제 출력입니다.

{ "UnsuccessfulFleetDeletions": [ { "FleetId": " fleet-5d130460-0c26-bfd9-2c32-0100a098f625", "Error": { "Message": "Can’t delete more than 25 instant fleets in a single request.", "Code": "ExceededInstantFleetNumForDeletion" } }, { "FleetId": "fleet-9a941b23-0286-5bf4-2430-03a029a07e31", "Error": { "Message": "Can’t delete more than 25 instant fleets in a single request.", "Code": "ExceededInstantFleetNumForDeletion" } } . . . ], "SuccessfulFleetDeletions": [] }
NoTerminateInstancesNotSupported 문제 해결

플릿을 삭제할 때 instant 플릿의 인스턴스를 종료하지 않도록 지정하면 NoTerminateInstancesNotSupported 오류가 반환됩니다. --no-terminate-instancesinstant 플릿에 대해 지원되지 않습니다. 다음은 이 오류의 예제 출력입니다.

{ "UnsuccessfulFleetDeletions": [ { "FleetId": "fleet-5d130460-0c26-bfd9-2c32-0100a098f625", "Error": { "Message": "NoTerminateInstances option is not supported for instant fleet", "Code": "NoTerminateInstancesNotSupported" } } ], "SuccessfulFleetDeletions": []
UnauthorizedOperation 문제 해결

인스턴스 종료 권한이 없는 경우 인스턴스를 종료해야 하는 플릿을 삭제할 때 UnauthorizedOperation 오류가 발생합니다. 다음은 오류 응답입니다.

<Response><Errors><Error><Code>UnauthorizedOperation</Code><Message>You are not authorized to perform this operation. Encoded authorization failure message: VvuncIxj7Z_CPGNYXWqnuFV-YjByeAU66Q9752NtQ-I3-qnDLWs6JLFd KnSMMiq5s6cGqjjPtEDpsnGHzzyHasFHOaRYJpaDVravoW25azn6KNkUQQlFwhJyujt2dtNCdduJfrqcFYAjlEiRMkfDHt7N63SKlweKUl BHturzDK6A560Y2nDSUiMmAB1y9UNtqaZJ9SNe5sNxKMqZaqKtjRbk02RZu5V2vn9VMk6fm2aMVHbY9JhLvGypLcMUjtJ76H9ytg2zRlje VPiU5v2s-UgZ7h0p2yth6ysUdhlONg6dBYu8_y_HtEI54invCj4CoK0qawqzMNe6rcmCQHvtCxtXsbkgyaEbcwmrm2m01-EMhekLFZeJLr DtYOpYcEl4_nWFX1wtQDCnNNCmxnJZAoJvb3VMDYpDTsxjQv1PxODZuqWHs23YXWVywzgnLtHeRf2o4lUhGBw17mXsS07k7XAfdPMP_brO PT9vrHtQiILor5VVTsjSPWg7edj__1rsnXhwPSu8gI48ZLRGrPQqFq0RmKO_QIE8N8s6NWzCK4yoX-9gDcheurOGpkprPIC9YPGMLK9tug </Message></Error></Errors><RequestID>89b1215c-7814-40ae-a8db-41761f43f2b0</RequestID></Response>

이 오류를 해결하려면 다음 예제와 같이 IAM 정책에 ec2:TerminateInstances 작업을 추가해야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DeleteFleetsAndTerminateInstances", "Effect": "Allow", "Action": [ "ec2:DeleteFleets" "ec2:TerminateInstances" ], "Resource": "*" } ] }