Trabalhar com Frotas do EC2
Para usar uma Frota do EC2, crie uma solicitação que inclua a capacidade total de destino, a capacidade sob demanda, a capacidade spot, uma ou mais especificações de execução para as instâncias e o preço máximo que você está disposto a pagar. O solicitação de frota deve incluir um modelo de lançamento que defina as informações de que a frota precisa para executar um instância, como uma AMI, um tipo de instância, uma sub-rede ou uma zona de disponibilidade, e um ou mais grupos de segurança. É possível definir sobreposições de especificação de execução para o tipo de instância, a sub-rede, a zona de disponibilidade e o preço máximo que você está disposto a pagar, além de atribuir capacidade ponderada a cada sobreposição de especificação de execução.
A Frota do EC2 executa Instâncias on-demand quando há capacidade disponível e executa 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, o Amazon EC2 poderá tentar manter a capacidade de destino da frota à medida que os preços spot são alterados.
Uma solicitação de tipo de Frota do EC2 maintain
ou request
permanecerá ativa até que expire ou você a exclua. Ao excluir uma frota do tipo maintain
ou request
, você poderá especificar se a exclusão encerrará ou não as instâncias dessa frota. Caso contrário, as instâncias sob demanda são executadas até que você as encerre e as Instâncias spot são executadas até que sejam interrompidas ou encerradas.
Conteúdo
Estados das solicitações da Frota do EC2
Uma solicitação de Frota do EC2 pode estar em um dos seguintes estados:
submitted
-
A solicitação de Frota do EC2 está sendo avaliada, e o Amazon EC2 está se preparando para executar o número de destino de instâncias. A solicitação pode incluir Instâncias on-demand, Instâncias spot, ou ambos. Se uma solicitação for exceder os limites da frota, ela será excluída imediatamente.
active
-
A solicitação de Frota do EC2 foi validada e o Amazon EC2 está tentando manter o número de destino das instâncias em execução. A solicitação permanece nesse estado até que seja alterada ou excluída.
modifying
-
A solicitação de Frota do EC2 está sendo modificada. A solicitação permanece nesse estado até que a modificação seja totalmente processada ou que a solicitação seja excluída. Apenas um tipo
maintain
de frota pode ser modificado. Esse estado não se aplica a outros tipos de solicitação. deleted_running
-
A solicitação de Frota do EC2 foi excluída e não executará instâncias adicionais. Suas instâncias existentes continuam sendo executadas até que sejam interrompidas ou encerradas manualmente. A solicitação permanece nesse estado até que todas as instâncias sejam interrompidas ou encerradas. Apenas uma Frota do EC2 do tipo
maintain
ourequest
pode ter instâncias em execução após a solicitação de Frota do EC2 ser excluída. Não há suporte a uma frotainstant
excluída com instâncias em execução. Este estado não se aplica às frotasinstant
. deleted_terminating
-
A solicitação de Frota do EC2 foi excluída, e as instâncias estão sendo encerradas. A solicitação permanece nesse estado até que todas as instâncias sejam encerradas.
deleted
-
A Frota do EC2 foi excluída, e não há outras instâncias em execução. A solicitação foi excluída dois dias depois que as instâncias foram encerradas.
Pré-requisitos da Frota do EC2
Para criar uma Frota do EC2, observe os seguintes pré-requisitos:
Modelo de execução
Um modelo de execução inclui informações sobre as instâncias a serem executadas, , por exemplo, o tipo de instância, a zona de disponibilidade e o preço máximo que você está disposto a pagar. Para ter mais informações, consulte Executar uma instância a partir de um modelo de execução.
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 Instâncias spot -
ec2:DescribeInstanceStatus
– Descreva o status das Instâncias spot. -
ec2:DescribeSubnets
– Descreva as sub-redes para Instâncias spot. -
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, escolha Roles e Create role.
-
Na página Selecionar tipo da 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 Usar 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 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 identidades 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 Criação 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.
-
-
Verificações de integridade da Frota do EC2
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 de status para as instâncias.
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
-
Siga as etapas para criar um Frota do EC2. Para ter mais informações, consulte Criar uma Frota do EC2..
-
Para configurar a frota para substituir Instâncias spot não íntegras no arquivo JSON para
ReplaceUnhealthyInstances
, insiratrue
.
Gerar um arquivo de configuração JSON da Frota 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.
Para gerar um arquivo JSON com todos os parâmetros de Frota do EC2 possíveis usando a linha de comando
-
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": "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": "" }
Criar uma Frota do EC2.
Para criar uma Frota do EC2, você precisa só especificar os seguintes parâmetros:
-
LaunchTemplateId
ouLaunchTemplateName
: especifica o modelo de lançamento a ser usado (que contém os parâmetros das instâncias a serem iniciadas, por exemplo, o tipo de instância, a zona de disponibilidade e o preço máximo que você está disposto a pagar) -
TotalTargetCapacity
: especifica a capacidade-alvo total para a frota -
DefaultTargetCapacityType
: especifica se a opção de compra padrão é sob demanda ou spot
Você pode definir várias especificações de lançamento que substituem o modelo de lançamento. 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, especifique 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 Seleção de tipo de instância baseada em atributos para frota do EC2.
Se você não especificar um parâmetro, a frota usará o valor padrão para o parâmetro.
Especifique os parâmetros da frota em um arquivo JSON. Para ter mais informações, consulte Gerar um arquivo de configuração JSON da Frota do EC2.
No momento, não há suporte de console para a criação de uma frota do EC2.
Para criar uma frota do EC2 (AWS CLI)
-
Use o comando create-fleet (AWS CLI) para criar uma frota do EC2 e especificar 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
Para obter arquivos de configuração de exemplo, consulte Exemplos de configuração de Frota do EC2.
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": []
}
Marcar uma Frota do EC2
Para categorizar e gerenciar as solicitações de Frota do EC2, você pode marcá-las com metadados personalizados. Você pode atribuir uma tag a uma solicitação de Frota do EC2 ao criá-la ou posteriormente.
Quando você marca uma solicitação de frota, as instâncias e os volumes que são executados pela frota não são marcados automaticamente. É necessário marcar explicitamente as instâncias e os volumes executados pela frota. Você pode optar por atribuir tags somente à solicitação de frota, somente às instâncias executadas pela frota, somente aos volumes anexados às instâncias executadas pela frota ou aos todos os três.
nota
Para tipos de frota instant
, é possível marcar volumes anexados a Instâncias on-demand e Instâncias spot. Para os tipos de frota request
ou maintain
, só é possível marcar volumes anexados a Instâncias on-demand.
Para obter mais informações sobre como as tags funcionam, consulte Marcar com tag os recursos do Amazon EC2.
Pré-requisito
Conceda ao usuário permissão para marcar recursos. Para ter mais informações, consulte Exemplo: marcar recursos.
Para conceder a um usuário permissão para marcar recursos
Crie uma política do IAM que inclua o seguinte:
-
A ação
ec2:CreateTags
. Isso concede ao usuário permissão para criar tags. -
A ação
ec2:CreateFleet
. Isso concede ao usuário permissão para criar uma solicitação de Frota do EC2. -
Para
Resource
, recomendamos que você especifique"*"
. Permite que os usuários marquem todos os tipos de recursos.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "TagEC2FleetRequest", "Effect": "Allow", "Action": [ "ec2:CreateTags", "ec2:CreateFleet" ], "Resource": "*" }
Importante
No momento, não oferecemos suporte para permissões no nível do recurso para o recurso create-fleet
. Se especificar create-fleet
como um recurso, você receberá uma exceção não autorizada quando tentar marcar a frota. O exemplo a seguir ilustra como não definir a política.
{ "Effect": "Allow", "Action": [ "ec2:CreateTags", "ec2:CreateFleet" ], "Resource": "arn:aws:ec2:
us-east-1
:111122223333
:create-fleet/*" }
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 identidades 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 Criação 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.
-
Como marcar uma nova solicitação de Frota do EC2
Para marcar uma solicitação de Frota do EC2 ao criá-la, especifique o par de valor-chave no arquivo JSON usado para criar a frota. O valor de ResourceType
deve ser fleet
. Se você especificar outro valor, ocorrerá falha na frota.
Como marcar instâncias e volumes executado por uma Frota do EC2
Para marcar instâncias e volumes ao serem executados pela frota, especifique as tags no modelo de execução mencionado na solicitação de Frota do EC2.
nota
Não é possível marcar volumes anexados a Instâncias spot que são executados por um tipo de frota request
ou maintain
.
Para marcar uma solicitação da frota do EC2, uma instância e um volume existentes (AWS CLI)
Use o comando create-tags para marcar os recursos existentes.
aws ec2 create-tags \ --resources
fleet-12a34b55-67cd-8ef9-ba9b-9208dEXAMPLE
i-1234567890abcdef0
vol-1234567890EXAMPLE
\ --tags Key=purpose
,Value=test
Descrever a frota do EC2
Você pode descrever a frota do EC2, relacionar as instâncias associadas à frota do EC2 e visualizar o histórico da frota do EC2.
Para descrever suas frotas do EC2 (AWS CLI)
Use o comando describe-fleets para descrever suas Frotas do EC2.
aws ec2 describe-fleets
Importante
Se uma frota é do tipo instant
, você deve especificar o ID da frota, caso contrário, ele não aparece na resposta. Inclua --fleet-ids
da seguinte forma:
aws ec2 describe-fleets --fleet-ids
fleet-8a22eee4-f489-ab02-06b8-832a7EXAMPLE
Exemplo de saída
{
"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"
}
}
]
}
Use o comando describe-fleet-instances para descrever as instâncias da Frota do EC2 especificada. A lista retornada das instâncias em execução é atualizada periodicamente e pode estar desatualizada.
aws ec2 describe-fleet-instances --fleet-id
fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
Exemplo de saída
{
"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"
}
Use o comando describe-fleet-history para descrever o histórico da Frota do EC2 especificada na hora determinada.
aws ec2 describe-fleet-history --fleet-id
fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
--start-time 2018-04-10T00:00:00Z
Exemplo de saída
{
"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"
}
Modificar uma Frota do EC2
Você pode modificar uma Frota do EC2 no estado submitted
ou active
. Quando você modifica uma frota, ela entra no estado modifying
.
Só é possível modificar uma Frota do EC2 do tipo maintain
. Você não pode modificar uma Frota do EC2 do tipo request
nem do tipo instant
.
Você pode modificar os seguintes parâmetros de uma Frota do EC2:
-
target-capacity-specification
– Aumentar ou diminuir a capacidade de destino deTotalTargetCapacity
,OnDemandTargetCapacity
eSpotTargetCapacity
. -
excess-capacity-termination-policy
– Se as instâncias em execução devem ser encerradas caso a capacidade total de destino da Frota do EC2 fique abaixo do tamanho atual da frota. Os valores válidos sãono-termination
etermination
.
Quando você aumenta a capacidade de destino, a Frota do EC2 executa as instâncias adicionais de acordo com a opção de compra da instância especificada para DefaultTargetCapacityType
, ou seja, Instâncias on-demand ou Instâncias spot.
Se DefaultTargetCapacityType
for spot
, a Frota do EC2 executará as Instâncias spot adicionais de acordo com sua respectiva estratégia de alocação. Se a estratégia de alocação for lowest-price
, a frota iniciará as instâncias do grupo de capacidade spot que apresentar o menor preço na solicitação. Se a estratégia de alocação for diversified
, a frota distribuirá as instâncias pelos grupos na solicitação.
Quando você diminui a capacidade de destino, a Frota do EC2 excluirá todas as solicitações abertas que excedem a nova capacidade de destino. Você pode solicitar que a frota encerre instâncias até o tamanho da frota atingir a nova capacidade de destino. Se a estratégia de alocação for lowest-price
, a frota encerrará as instâncias com o preço mais alto por unidade. Se a estratégia de alocação for diversified
, a frota encerrará as instâncias nos grupos. Como alternativa, você pode solicitar que a Frota do EC2 mantenha seu tamanho atual, mas não substitua as Instâncias spot interrompidas ou encerradas manualmente.
Quando uma EC2 Fleet encerra uma instância spot porque a capacidade pretendida foi diminuída, a instância recebe um aviso de interrupção de instância spot.
Para modificar uma frota do EC2 (AWS CLI)
Use o comando modify-fleet para atualizar a capacidade de destino da Frota do EC2 especificada.
aws ec2 modify-fleet \ --fleet-id
fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
\ --target-capacity-specification TotalTargetCapacity=20
Se estiver diminuindo a capacidade de destino, mas quiser manter a frota com o tamanho atual, você poderá modificar o comando anterior da maneira a seguir.
aws ec2 modify-fleet \ --fleet-id
fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
\ --target-capacity-specification TotalTargetCapacity=10
\ --excess-capacity-termination-policy no-termination
Excluir uma Frota do EC2
Caso não precise mais de uma Frota do EC2, você pode excluí-la. Depois que você exclui uma frota, todas as solicitações spot associadas à frota são caneladas, para que nenhuma nova instância spot seja iniciada.
Ao excluir uma Frota do EC2, você deve especificar se deseja encerrar todas as suas instâncias. Isso inclui tanto instâncias sob demanda quanto instâncias spot. Para frotas instant
, a frota do EC2 deve encerrar as instâncias quando a frota for excluída. Não há suporte a uma frota instant
excluída com instâncias em execução.
Se você especificar que as instâncias deverão ser encerradas quando a frota for excluída, a frota entrará no estado deleted_terminating
. Caso contrário, ela entrará no estado deleted_running
e as instâncias continuarão em execução até que sejam interrompidas ou encerradas manualmente.
Restrições
-
Você pode excluir até 25 frotas do tipo
instant
com a mesma solicitação. -
Você pode excluir até 100 frotas do tipo
maintain
ourequest
com a mesma solicitação. -
Você pode excluir até 125 frotas em uma única solicitação, desde que não exceda a cota para cada tipo de frota, conforme especificado acima.
-
Nenhuma frota será excluída se você exceder o número especificado de frotas a serem excluídas.
-
Até 1000 instâncias podem ser encerradas em uma única solicitação para excluir frotas
instant
.
Para excluir uma frota do EC2 e encerrar as instâncias (AWS CLI)
Use o comando delete-fleets e o parâmetro --terminate-instances
para excluir a Frota do EC2 especificada e encerrar as instâncias.
aws ec2 delete-fleets \ --fleet-ids
fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
\ --terminate-instances
Exemplo de saída
{
"UnsuccessfulFleetDeletions": [],
"SuccessfulFleetDeletions": [
{
"CurrentFleetState": "deleted_terminating",
"PreviousFleetState": "active",
"FleetId": "fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE"
}
]
}
Para excluir uma Frota do EC2 sem encerrar as instâncias (AWS CLI)
Você pode modificar o comando anterior usando o parâmetro --no-terminate-instances
para excluir a Frota do EC2 especificada sem encerrar as instâncias.
nota
Não há suporte a --no-terminate-instances
para frotas instant
.
aws ec2 delete-fleets \ --fleet-ids
fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE
\ --no-terminate-instances
Exemplo de saída
{
"UnsuccessfulFleetDeletions": [],
"SuccessfulFleetDeletions": [
{
"CurrentFleetState": "deleted_running",
"PreviousFleetState": "active",
"FleetId": "fleet-4b8aaae8-dfb5-436d-a4c6-3dafa4c6b7dcEXAMPLE"
}
]
}
Solucionar problemas quando houver falha na exclusão da frota
Em caso de falha na exclusão da Frota do EC2, UnsuccessfulFleetDeletions
retornará o ID da Frota do EC2, um código de erro e uma mensagem de erro.
Os códigos de erro são:
-
ExceededInstantFleetNumForDeletion
-
fleetIdDoesNotExist
-
fleetIdMalformed
-
fleetNotInDeletableState
-
NoTerminateInstancesNotSupported
-
UnauthorizedOperation
-
unexpectedError
Solução de problemas de ExceededInstantFleetNumForDeletion
Se você tentar excluir mais de 25 frotas instant
em uma única solicitação, o erro ExceededInstantFleetNumForDeletion
será retornado. Veja a seguir um exemplo de saída deste erro.
{ "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": [] }
Solução de problemas do NoTerminateInstancesNotSupported
Se você especificar que as instâncias em uma frota instant
não devem ser encerradas quando você excluir a frota, o erro NoTerminateInstancesNotSupported
será retornado. Não há suporte a --no-terminate-instances
para frotas instant
. Veja a seguir um exemplo de saída deste erro.
{ "UnsuccessfulFleetDeletions": [ { "FleetId": "fleet-5d130460-0c26-bfd9-2c32-0100a098f625", "Error": { "Message": "NoTerminateInstances option is not supported for instant fleet", "Code": "NoTerminateInstancesNotSupported" } } ], "SuccessfulFleetDeletions": []
Solução de problemas do UnauthorizedOperation
Se você não tiver permissão para encerrar instâncias, você obterá o erro UnauthorizedOperation
ao excluir uma frota que deve encerrar suas instâncias. A seguir está a resposta de erro.
<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>
Para resolver o erro, você deve adicionar a ação ec2:TerminateInstances
à política do IAM, conforme mostrado no exemplo a seguir.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DeleteFleetsAndTerminateInstances", "Effect": "Allow", "Action": [ "ec2:DeleteFleets" "ec2:TerminateInstances" ], "Resource": "*" } ] }