Criar uma Frota do EC2.
Para criar uma frota do EC2, defina a configuração da frota em um arquivo JSON e referencie esse arquivo com o comando create-fleet da AWS CLI. No arquivo JSON, você deve especificar a capacidade total de destino da frota, as capacidades de destino separadas para instâncias spot e instâncias sob demanda e um modelo de inicialização que defina a configuração das instâncias na frota, como uma AMI, um tipo de instância, uma sub-rede ou uma zona de disponibilidade e um ou mais grupos de segurança. Como alternativa, você pode especificar configurações adicionais, como parâmetros para substituir a configuração do modelo de inicialização, estratégias de alocação para selecionar instâncias spot e instâncias sob demanda dos grupos de capacidade do EC2 e o valor máximo que você deseja pagar pela frota. Para ter mais informações, consulte Opções de configuração para frota do EC2 ou frota spot.
A frota do EC2 inicializa instâncias sob demanda quando há capacidade disponível e inicializa instâncias spot quando o preço máximo excede o preço spot e há capacidade disponível.
Se a frota incluir a instâncias spot e for do tipo maintain
, o Amazon EC2 tentará manter a capacidade de destino da frota quando as instâncias spot forem interrompidas.
Limitações da Frota do EC2
As limitações a seguir se aplicam à Frota do EC2:
-
A criação de uma frota do EC2 só está disponível por meio da API do Amazon EC2, da AWS CLI, dos AWS SDKs e do AWS CloudFormation.
-
Uma solicitação de EC2 Fleet não pode abranger regiões da AWS. Você precisa criar uma Frota do EC2 separada para cada região.
-
Uma solicitação de Frota do EC2 não pode abranger sub-redes diferentes na mesma zona de disponibilidade.
Pré-requisitos da Frota do EC2
Para criar uma Frota do EC2, observe os seguintes pré-requisitos:
Modelo de execução
Um modelo de inicialização especifica as informações de configuração sobre as instâncias a serem inicializadas, como o tipo de instância e a zona de disponibilidade. Para obter mais informações sobre modelos de inicialização, consulte Armazenar os parâmetros de execução de instâncias nos modelos de execução do Amazon EC2.
Função vinculada ao serviço para Frota do EC2
O AWSServiceRoleForEC2Fleet
concede à frota do EC2 permissão para solicitar, executar, encerrar e marcar instâncias em seu nome. O Amazon EC2 usa essa função vinculada ao serviço para concluir as seguintes ações:
-
ec2:RunInstances
– Executar instâncias -
ec2:RequestSpotInstances
– Solicitação Instâncias spot. -
ec2:TerminateInstances
– Encerrar instâncias -
ec2:DescribeImages
: descrever imagens de máquina da Amazon (AMIs) para as instâncias. -
ec2:DescribeInstanceStatus
: descrever o status das instâncias. -
ec2:DescribeSubnets
: descrever as sub-redes das instâncias. -
ec2:CreateTags
– Adicionar tags a Frota do EC2, instâncias e volumes.
Verifique se essa função está disponível antes de usar a AWS CLI ou uma API para criar uma frota do EC2.
nota
Uma Frota do EC2 instant
não requer essa função.
Para criar a função, use o console do IAM da seguinte forma.
Para criar a função AWSServiceRoleForEC2Fleet para Frota do EC2
Abra o console do IAM em https://console.aws.amazon.com/iam/
. -
No painel de navegação, selecione Roles.
-
Escolha Criar Perfil.
-
Na página Select trusted entity (Selecionar entidade confiável), faça o seguinte:
-
Em Tipo de entidade confiável, escolha Serviços da AWS.
-
Em Caso de uso, para Serviço ou caso de uso, escolha EC2 - Frota.
dica
Certifique-se de escolher EC2 - Frota. Se você escolher EC2, o caso de uso EC2 - Frota não aparecerá na lista de Casos de uso. O caso de uso EC2 - Frota criará automaticamente uma política com as permissões necessárias do IAM e sugerirá AWSServiceRoleForEC2Fleet como nome do perfil.
-
Escolha Próximo.
-
-
Na página Adicionar permissões, escolha Próximo.
-
Na página Nomear, revisar e criar, escolha Criar função.
Se você não precisar mais usar Frota do EC2, é recomendável excluir a função AWSServiceRoleForEC2Fleet. Depois que essa função for excluída na sua conta, você poderá criar a função novamente se criar outra frota.
Para obter mais informações, consulte Perfis vinculados ao serviço no Guia do usuário do IAM.
Conceder acesso às chaves gerenciadas pelo cliente para uso com AMIs criptografadas e snapshots do EBS
Se você especificar uma AMI criptografada ou um snapshot criptografado do Amazon EBS na frota do EC2 e usar uma chave do AWS KMS para criptografia, será necessário conceder ao perfil AWSServiceRoleForEC2Fleet permissão para usar a chave gerenciada pelo cliente para que o Amazon EC2 possa iniciar instâncias em seu nome. Para isso, adicione uma concessão à chave gerenciada pelo cliente, conforme exibido no procedimento a seguir.
Durante a definição de permissões, as concessões são uma alternativa às políticas de chave. Para obter mais informações, consulte Usar concessões e Usar políticas de chave no AWS KMS, no Guia do desenvolvedor do AWS Key Management Service.
Para conceder as permissões para a função AWSServiceRoleForEC2Fleet para usar a chave gerenciada pelo cliente
-
Use o comando create-grant para adicionar uma concessão à chave gerenciada pelo cliente e especificar a entidade principal (a função vinculada ao serviço AWSServiceRoleForEC2Fleet) que recebe permissão para executar as operações permitidas pela concessão. A chave gerenciada pelo cliente é especificada pelo parâmetro
key-id
e o ARN da chave gerenciada pelo cliente. O principal é especificado pelo parâmetrograntee-principal
e o ARN da função vinculada ao serviço AWSServiceRoleForEC2Fleet.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"
Permissões para usuários da Frota do EC2
Se os usuários pretenderem criar ou gerenciar uma Frota do EC2, certifique-se de conceder a eles as permissões necessárias.
Para criar uma frota do EC2
Abra o console do IAM, em https://console.aws.amazon.com/iam/
. -
No painel de navegação, escolha Policies.
-
Escolha Create policy.
-
Na página Create policy (Criar política), escolha a guia JSON, substitua texto pelo seguinte e escolha Review policy (Revisar política).
{ "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*" } ] }
O
ec2:*
concede a um usuário permissão para chamar todas as ações de API do Amazon EC2. Para limitar o usuário a ações de API do Amazon EC2, especifique essas ações.O usuário deve ter permissão para chamar a ação
iam:ListRoles
para enumerar os perfis do IAM existentes, a açãoiam:PassRole
para especificar o perfil da frota do EC2 e a açãoiam:ListInstanceProfiles
para enumerar os perfis de instância existentes.(Opcional) Para permitir que um usuário crie perfis ou perfis de instância usando o console do IAM, também é necessário adicionar as ações a seguir à política:
-
iam:AddRoleToInstanceProfile
-
iam:AttachRolePolicy
-
iam:CreateInstanceProfile
-
iam:CreateRole
-
iam:GetRole
-
iam:ListPolicies
-
-
Na página Review policy (Revisar política), digite um nome e uma descrição para a política e escolha Create policy (Criar política).
-
Para conceder acesso, adicione as permissões aos seus usuários, grupos ou perfis:
-
Usuários e grupos no AWS IAM Identity Center:
Crie um conjunto de permissões. Siga as instruções em Criação de um conjunto de permissões no Guia do usuário do AWS IAM Identity Center.
-
Usuários gerenciados no IAM com provedor de identidades:
Crie um perfil para a federação de identidades. Siga as instruções em Criar um perfil para um provedor de identidade de terceiros (federação) no Guia do usuário do IAM.
-
Usuários do IAM:
-
Crie um perfil que seu usuário possa assumir. Siga as instruções em Criar de um perfil para um usuário do IAM no Guia do usuário do IAM.
-
(Não recomendado) Vincule uma política diretamente a um usuário ou adicione um usuário a um grupo de usuários. Siga as instruções em Adição de permissões a um usuário (console) no Guia do usuário do IAM.
-
-
Criar uma Frota do EC2.
Para inicializar uma frota de instâncias usando a frota do EC2, você só precisa especificar os seguintes parâmetros na solicitação de frota para que a frota use os valores padrão para os outros parâmetros:
-
LaunchTemplateId
ouLaunchTemplateName
: especifica o modelo de inicialização a ser usado (que contém os parâmetros das instâncias a serem inicializadas, como o tipo de instância e a zona de disponibilidade) -
TotalTargetCapacity
: especifica a capacidade-alvo total para a frota -
DefaultTargetCapacityType
: especifica se a opção de compra padrão é sob demanda ou spot
Para substituir os parâmetros especificados no modelo de inicialização, você pode especificar uma ou mais substituições. As especificações de execução podem variar por tipo de instância, zona de disponibilidade, sub-rede e preço máximo e podem incluir uma capacidade ponderada diferente. Como alternativa à especificação de um tipo de instância, você pode especificar os atributos que uma instância deve ter e o Amazon EC2 identificará todos os tipos de instância com esses atributos. Para obter mais informações, consulte Especificar atributos para seleção de tipo de instância para frota do EC2 ou frota spot.
Em frotas do EC2 do tipo instant
, você pode especificar um parâmetro do Systems Manager em vez do ID da AMI. Você pode especificar o parâmetro do Systems Manager na substituição ou no modelo de inicialização. Para ter mais informações, consulte Use um parâmetro de Systems Manager em vez de um ID de AMI.
Você pode especificar os parâmetros da frota em um arquivo JSON. Para obter informações sobre todos os parâmetros possíveis que você pode especificar, consulte Visualizar todas as opções de configuração de frotas do EC2.
Para ver exemplos de configuração da frota, consulte Exemplo de configurações da CLI para frotas do EC2.
No momento, não há suporte de console para a criação de uma frota do EC2.
Criar uma frota do EC2
-
Use o comando create-fleet (AWS CLI) para criar a frota e especifique o arquivo JSON que contém os parâmetros de configuração da frota.
aws ec2 create-fleet --cli-input-json file://
file_name.json
A seguir está um exemplo de saída de uma frota do tipo request
ou maintain
.
{
"FleetId": "fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE"
}
A seguir está um exemplo de saída de uma frota do tipo instant
que executou a capacidade de destino.
{
"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"
]
]
}
A seguir está um exemplo de saída de uma frota do tipo instant
que executou parte da capacidade de destino com erros em instâncias que não foram executadas.
{
"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"
]
]
}
A seguir está um exemplo de saída de uma frota do tipo instant
que não executou nenhuma instância.
{
"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": []
}
Criar uma frota do EC2 que substitua instâncias spot não íntegras
A Frota do EC2 verifica o status de integridade das instâncias na frota a cada dois minutos. O status de integridade de uma instância é healthy
ou unhealthy
.
A Frota do EC2 determina o status de integridade de uma instância usando as verificações de status fornecidas pelo Amazon EC2. Uma instância é determinada como unhealthy
quando o status da verificação de status da instância ou da verificação de status do sistema for impaired
para três verificações de status de integridade consecutivas. Para ter mais informações, consulte Verificações do status das instâncias do Amazon EC2.
Você pode configurar a sua frota para substituir Instâncias spot não íntegras. Depois de configurar ReplaceUnhealthyInstances
para true
, uma instância spot é substituída ao ser reportada como unhealthy
. A frota poderá ficar abaixo de sua capacidade de destino por alguns minutos enquanto uma instância spot não íntegra estiver sendo substituída.
Requisitos
-
A substituição da verificação de integridade é compatível apenas para Frotas do EC2 que mantenham uma capacidade de destino (frotas do tipo
maintain
) e não para as frotas únicas do tiporequest
ouinstant
. -
A substituição da verificação de integridade é compatível apenas para Instâncias spot. Este recurso não é compatível para Instâncias on-demand.
-
Você pode configurar a Frota do EC2 para substituir instâncias não íntegras somente durante sua criação.
-
Os usuários só poderão usar a substituição de verificação de integridade se tiverem permissão para chamar a ação
ec2:DescribeInstanceStatus
.
Para configurar um Frota do EC2 para substituir uma Instâncias spot não íntegra
-
Use as informações para criar uma frota do EC2 em Criar uma Frota do EC2..
-
Para configurar a frota para substituir instâncias spot não íntegras no arquivo JSON, em
ReplaceUnhealthyInstances
, especifiquetrue
.
Visualizar todas as opções de configuração de frotas do EC2
Para visualizar a lista completa de parâmetros de configuração de frota do EC2, você pode gerar um arquivo JSON. Para obter uma descrição de cada parâmetro, consulte create-fleet na Referência de comandos da AWS CLI.
Gerar um arquivo JSON com todos os parâmetros de frotas do EC2 possíveis
Use o comando create-fleet (AWS CLI) e o parâmetro --generate-cli-skeleton
para gerar um arquivo JSON da Frota do EC2 e direcione a saída a um arquivo para salvá-la.
aws ec2 create-fleet \ --generate-cli-skeleton input >
ec2createfleet.json
Exemplo de saída
{
"DryRun": true,
"ClientToken": "",
"SpotOptions": {
"AllocationStrategy": "price-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": ""
}