Tutorial: Configuración de la flota de EC2 para lanzar instancias bajo demanda con reservas de capacidad específicas
En este tutorial se explican todos los pasos que debe realizar para que su flota de EC2 lance instancias bajo demanda en reservas de capacidad targeted
.
Aprenderá a configurar una flota para utilizar primero las reservas de capacidad bajo demanda targeted
al iniciar instancias bajo demanda. También aprenderá a configurar la flota para que, cuando la capacidad total de destino bajo demanda supere el número de reservas de capacidad sin utilizar disponibles, la flota utilice la estrategia de asignación especificada a fin de seleccionar los grupos de instancias en los que iniciará la capacidad de destino restante.
Configuración de la flota de EC2
En este tutorial, la flota está configurada de la siguiente manera:
-
Capacidad de destino: 10 instancias bajo demanda
-
Total de reservas de capacidad
targeted
sin utilizar: 6 (menos que la capacidad de destino bajo demanda de 10 instancias bajo demanda de la flota) -
Número de grupos de reservas de capacidad: 2 (
us-east-1a
yus-east-1b
) -
Número de reservas de capacidad por grupo: 3
-
Estrategia de asignación bajo demanda:
lowest-price
(cuando el número de reservas de capacidad sin utilizar es menor que la capacidad de destino bajo demanda, la flota determina los grupos en los que iniciará la capacidad bajo demanda restante en función de la estrategia de asignación bajo demanda).Tenga en cuenta que también puede utilizar la estrategia de asignación
prioritized
en lugar de lalowest-price
.
Para iniciar instancias bajo demanda en reservas de capacidad targeted, debe realizar una serie de pasos, como se indica a continuación:
- Paso 1: crear reservas de capacidad
- Paso 2: crear un grupo de recursos de reserva de capacidad
- Paso 3: agregar las reservas de capacidad al grupo de recursos de reserva de capacidad
- (Opcional) Paso 4: ver las reservas de capacidad en el grupo de recursos
- Paso 5: crear una plantilla de inicialización que especifique que la reserva de capacidad se dirige a un grupo de recursos específico
- (Opcional) Paso 6: describir la plantilla de inicialización
- Paso 7: crear una flota de EC2
- (Opcional) Paso 8: ver el número de reservas de capacidad sin utilizar restantes
Paso 1: crear reservas de capacidad
Utilice el comando create-capacity-reservation a fin de crear las reservas de capacidad, tres para us-east-1a
y otras tres para us-east-1b
. Excepto por la zona de disponibilidad, los demás atributos de las reservas de capacidad son idénticos.
3 reservas de capacidad en us-east-1a
aws ec2 create-capacity-reservation \ --availability-zone us-east-1a \ --instance-type c5.xlarge \ --instance-platform Linux/UNIX \ --instance-count 3 \ --instance-match-criteria targeted
Ejemplo del ID de reserva de capacidad resultante
cr-1234567890abcdef1
3 reservas de capacidad en us-east-1b
aws ec2 create-capacity-reservation \ --availability-zone us-east-1b \ --instance-type c5.xlarge \ --instance-platform Linux/UNIX \ --instance-count 3 \ --instance-match-criteria targeted
Ejemplo del ID de reserva de capacidad resultante
cr-54321abcdef567890
Paso 2: crear un grupo de recursos de reserva de capacidad
Utilice el servicio resource-groups
y el comando create-group para crear un grupo de recursos de reserva de capacidad. En este ejemplo, el grupo de recursos se llama my-cr-group
. Para obtener información sobre por qué debe crear un grupo de recursos, consulte Utilice las reservas de capacidad para reservar capacidad bajo demanda en la flota de EC2.
aws resource-groups create-group \ --name
my-cr-group
\ --configuration '{"Type":"AWS::EC2::CapacityReservationPool"}' '{"Type":"AWS::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["AWS::EC2::CapacityReservation"]}]}'
Paso 3: agregar las reservas de capacidad al grupo de recursos de reserva de capacidad
Utilice el servicio resource-groups
y el comando group-resources para agregar las reservas de capacidad que creó en el paso 1 al grupo de recursos de reserva de capacidad. Tenga en cuenta que debe hacer referencia a las reservas de capacidad bajo demanda por sus ARN.
aws resource-groups group-resources \ --group
my-cr-group
\ --resource-arns \ arn:aws:ec2:us-east-1
:123456789012
:capacity-reservation/cr-1234567890abcdef1
\ arn:aws:ec2:us-east-1
:123456789012
:capacity-reservation/cr-54321abcdef567890
Ejemplo de resultado
{
"Failed": [],
"Succeeded": [
"arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1",
"arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890"
]
}
(Opcional) Paso 4: ver las reservas de capacidad en el grupo de recursos
Utilice el servicio resource-groups
y el comando list-group-resources para describir opcionalmente el grupo de recursos y ver sus reservas de capacidad.
aws resource-groups list-group-resources --group
my-cr-group
Ejemplo de resultado
{
"ResourceIdentifiers": [
{
"ResourceType": "AWS::EC2::CapacityReservation",
"ResourceArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1"
},
{
"ResourceType": "AWS::EC2::CapacityReservation",
"ResourceArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890"
}
]
}
Paso 5: crear una plantilla de inicialización que especifique que la reserva de capacidad se dirige a un grupo de recursos específico
Utilice el comando create-launch-template para crear una plantilla de inicialización en la que se especificarán las reservas de capacidad que se utilizarán. En este ejemplo, la flota utilizará reservas de capacidad targeted
, que se han agregado a un grupo de recursos. Por lo tanto, los datos de la plantilla de inicialización especifican que la reserva de capacidad se dirige a un grupo de recursos específico. En este ejemplo, la plantilla de inicialización se llama my-launch-template
.
aws ec2 create-launch-template \ --launch-template-name
my-launch-template
\ --launch-template-data \ '{"ImageId": "ami-0123456789example
", "CapacityReservationSpecification": {"CapacityReservationTarget": { "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1
:123456789012
:group/my-cr-group
" } } }'
(Opcional) Paso 6: describir la plantilla de inicialización
Utilice el comando describe-launch-template-versions para describir opcionalmente la plantilla de inicialización y ver su configuración.
aws ec2 describe-launch-template-versions --launch-template-name
my-launch-template
Ejemplo de resultado
{
"LaunchTemplateVersions": [
{
"LaunchTemplateId": "lt-01234567890example",
"LaunchTemplateName": "my-launch-template",
"VersionNumber": 1,
"CreateTime": "2021-01-19T20:50:19.000Z",
"CreatedBy": "arn:aws:iam::123456789012:user/Admin",
"DefaultVersion": true,
"LaunchTemplateData": {
"ImageId": "ami-0947d2ba12ee1ff75",
"CapacityReservationSpecification": {
"CapacityReservationTarget": {
"CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-group"
}
}
}
}
]
}
Paso 7: crear una flota de EC2
Cree una flota de EC2 que especifique la información de configuración de las instancias que iniciará. La siguiente configuración de flota de EC2 solo muestra las configuraciones pertinentes para este ejemplo. La plantilla de inicialización my-launch-template
es la plantilla de inicialización que creó en el paso 5. Hay dos grupos de instancias, cada uno con el mismo tipo de instancias (c5.xlarge
), pero con diferentes zonas de disponibilidad (us-east-1a
y us-east-1b
). El precio de los grupos de instancias es el mismo porque los precios se definen para la región, no por zona de disponibilidad. La capacidad total de destino es de 10 y el tipo de capacidad de destino predeterminado es on-demand
. La estrategia de asignación bajo demanda es lowest-price
. La estrategia de uso para las reservas de capacidad es use-capacity-reservations-first
.
nota
El tipo de flota debe ser instant
. Otros tipos de flotas no admiten use-capacity-reservations-first
.
{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "
my-launch-template
", "Version": "1" }, "Overrides": [ { "InstanceType": "c5.xlarge
", "AvailabilityZone": "us-east-1a
" }, { "InstanceType": "c5.xlarge
", "AvailabilityZone": "us-east-1b
" } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity":10
, "DefaultTargetCapacityType": "on-demand
" }, "OnDemandOptions": { "AllocationStrategy": "lowest-price
", "CapacityReservationOptions": { "UsageStrategy": "use-capacity-reservations-first" } }, "Type": "instant" }
Después de crear la flota instant
con la configuración anterior, se inician las siguientes 10 instancias para cumplir con la capacidad de destino:
-
Las reservas de capacidad se utilizan en primer lugar para iniciar 6 instancias bajo demanda de la siguiente manera:
-
3 instancias bajo demanda se lanzan en las 3 reservas de capacidad
targeted
c5.xlarge
enus-east-1a
-
3 instancias bajo demanda se lanzan en las 3 reservas de capacidad
targeted
c5.xlarge
enus-east-1b
-
-
Para alcanzar la capacidad de destino, se inician 4 instancias bajo demanda adicionales en la capacidad bajo demanda normal de acuerdo con la estrategia de asignación bajo demanda, que es
lowest-price
en este ejemplo. Sin embargo, dado que los grupos tienen el mismo precio (porque el precio es por región y no por zona de disponibilidad), la flota inicia las 4 instancias bajo demanda restantes en cualquiera de los grupos.
(Opcional) Paso 8: ver el número de reservas de capacidad sin utilizar restantes
Después de iniciar la flota, opcionalmente puede ejecutar describe-capacity-reservations para ver cuántas reservas de capacidad sin utilizar quedan. En este ejemplo, debería ver la siguiente respuesta, que muestra que se utilizaron todas las reservas de capacidad de todos los grupos.
{ "CapacityReservationId": "cr-111",
"InstanceType": "c5.xlarge",
"AvailableInstanceCount": 0
}
{ "CapacityReservationId": "cr-222",
"InstanceType": "c5.xlarge",
"AvailableInstanceCount": 0
}