Crie uma instância spot pelo console do ECS, SDK ou Terraform para executar cargas de trabalho tolerantes a falhas, como análise de dados, com custo inferior ao pagamento conforme o uso.
Antes de começar
Siga estas recomendações ao criar uma instância spot:
-
Defina uma estratégia de lance adequada: Considere a volatilidade do preço de mercado. Um lance bem calculado aumenta a probabilidade de inicialização bem-sucedida e reduz o risco de liberação. Certifique-se de que o lance esteja alinhado às suas expectativas orçamentárias.
NotaSe não tiver certeza sobre o valor do lance, utilize o lance automático, que aceita o preço de mercado em tempo real como taxa de faturamento.
Garanta a persistência dos dados: Armazene dados críticos em mídias de armazenamento não afetadas pela liberação da instância spot, como discos independentes (não liberados junto com a instância), OSS ou NAS.
Monitore o status da instância: Utilize o CloudMonitor ou os metadados da instância para acompanhar o status da sua instância spot. Consulte Detectar e responder a eventos de interrupção de instância spot.
Lide com interrupções: Instâncias spot podem ser liberadas quando o preço de mercado excede seu lance máximo ou quando o estoque se esgota. Teste sua aplicação para garantir que ela trate liberações inesperadas adequadamente.
Criar uma instância spot
Criar pelo console do ECS
Acesse a página de criação de instância e selecione a aba Custom Launch.
-
Configure os recursos do ECS conforme suas necessidades e as instruções na tela.
Observe os parâmetros a seguir. Para outras configurações, consulte Inicialização personalizada de instâncias.
Billing Method: Selecione Spot Instance.
-
Instance Usage Duration:
1 Hour: A instância executa sem interrupção por uma hora. Após esse período, o sistema monitora o estoque e as alterações de preço para determinar se você pode continuar usando-a.
None: Sem duração fixa. Esta opção geralmente oferece preços melhores.
-
Maximum hourly price per instance:
Use Automatic Bid: Aceita o preço atual de mercado como taxa de faturamento.
Set a maximum price: Defina o preço horário máximo que você está disposto a pagar.
-
Instance Interruption Mode:
-
Release: A instância e seus recursos de computação (vCPU, GPU, memória), IP público estático, largura de banda fixa e discos são liberados.
AvisoInstâncias spot não são adequadas para armazenar dados críticos. Escolher Instance Interruption Mode como Release pode causar perda de dados. Desative a liberação de disco no encerramento da instância ou crie snapshots de disco regularmente para proteger seus dados.
-
Stop in Economical Mode: Recursos de computação (vCPU, GPU, memória), IP público estático e largura de banda fixa são recuperados. Discos, Endereços IP Elásticos e snapshots são mantidos e continuam a gerar cobranças.
NotaUma instância spot em modo econômico pode falhar ao reiniciar devido a estoque insuficiente ou preço de mercado acima do seu lance.
-
Revise sua configuração no lado direito da página, defina as opções de uso e clique em Confirm Order.
Criar via SDK
Pré-requisitos
-
Criar um AccessKey
Uma conta Alibaba Cloud (conta primária) tem permissões totais sobre todos os recursos; portanto, o vazamento de seu AccessKey representa riscos graves. Utilize um AccessKey de usuário RAM com as permissões mínimas necessárias. Consulte Criar um AccessKey.
-
Conceder permissões do ECS ao usuário RAM
Conceda permissões de gerenciamento do ECS ao usuário RAM. O código de exemplo requer privilégios de criação de instância. Permissão recomendada:
Produtos de nuvem
Permissão
Elastic Compute Service
AliyunECSFullAccess
-
Configurar credenciais de acesso
O código de exemplo lê o AccessKey das variáveis de ambiente do sistema. Para etapas de configuração, consulte Configurar variáveis de ambiente no Linux, macOS e Windows.
-
Instalar o SDK do ECS
Obtenha o SDK do ECS. Este exemplo utiliza Maven. Para outros métodos, consulte Instalar o ECS Java SDK.
Inicializar o cliente
O SDK da Alibaba Cloud suporta múltiplos tipos de credenciais para inicialização do cliente, como AccessKey e token do Security Token Service. Consulte Gerenciar credenciais de acesso. Este exemplo utiliza um AccessKey.
import com.aliyun.ecs20140526.Client;
import com.aliyun.teaopenapi.models.Config;
public class Sample {
private static Client createClient() throws Exception {
Config config = new Config()
// Required. Ensure the environment variable ALIBABA_CLOUD_ACCESS_KEY_ID is set.
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// Required. Ensure the environment variable ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
// For Endpoint, see https://api.aliyun.com/product/Ecs
.setEndpoint("ecs.cn-hangzhou.aliyuncs.com");
return new Client(config);
}
}
Construir o objeto de requisição da API
Verifique os detalhes dos parâmetros na documentação da API antes de construir o objeto de requisição.
// Build the request object
RunInstancesRequest request = new RunInstancesRequest()
// Set the region
.setRegionId("cn-hangzhou")
// Set billing method to pay-as-you-go
.setInstanceChargeType("PostPaid")
// Set bidding strategy to automatic
.setSpotStrategy("SpotAsPriceGo")
// Set 1-hour usage duration: guarantees the instance runs for 1 hour without release
.setSpotDuration(1)
// Set instance type
.setInstanceType("instanceType")
// Set image
.setImageId("imageId")
// Set security group ID
.setSecurityGroupId("securityGroupId")
// Set virtual switch ID
.setVSwitchId("vSwitchId");
Fazer a chamada
Configure opções de tempo de execução, como timeout e configurações de proxy, ao chamar a OpenAPI. Consulte Configuração avançada.
// Set runtime options
RuntimeOptions runtime = new RuntimeOptions();
// Call the RunInstances API
RunInstancesResponse response = client.runInstancesWithOptions(request, runtime);
System.out.println(response.body.toMap());
Tratar exceções
O SDK Java categoriza exceções em TeaUnretryableException e TeaException.
TeaUnretryableException: Problemas de rede após atingir o número máximo de tentativas.
TeaException: Erros relacionados a negócios.
Trate as exceções adequadamente para garantir a robustez do sistema, por exemplo, propagando-as, registrando detalhes ou tentando recuperação.
Exemplo completo
import com.aliyun.ecs20140526.Client;
import com.aliyun.ecs20140526.models.RunInstancesRequest;
import com.aliyun.ecs20140526.models.RunInstancesResponse;
import com.aliyun.ecs20140526.models.RunInstancesResponseBody;
import com.aliyun.tea.TeaException;
import com.aliyun.tea.TeaUnretryableException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import com.alibaba.fastjson.JSONArray;
import java.util.Arrays;
public class Sample {
private static Client createClient() throws Exception {
Config config = new Config()
// Required. Ensure the environment variable ALIBABA_CLOUD_ACCESS_KEY_ID is set.
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// Required. Ensure the environment variable ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
// For Endpoint, see https://api.aliyun.com/product/Ecs
.setEndpoint("ecs.cn-hangzhou.aliyuncs.com");
return new Client(config);
}
public static void main(String[] args) {
try {
Client client = Sample.createClient();
// Build the request object
RunInstancesRequest request = new RunInstancesRequest()
// Set the region
.setRegionId("cn-hangzhou")
// Set billing method to pay-as-you-go
.setInstanceChargeType("PostPaid")
// Set bidding strategy to automatic
.setSpotStrategy("SpotAsPriceGo")
// Set 1-hour usage duration: guarantees the instance runs for 1 hour without release
.setSpotDuration(1)
// Set instance type
.setInstanceType("instanceType")
// Set image
.setImageId("imageId")
// Set security group ID
.setSecurityGroupId("securityGroupId")
// Set virtual switch ID
.setVSwitchId("vSwitchId");
// Set runtime options
RuntimeOptions runtime = new RuntimeOptions();
// Call the RunInstances API
RunInstancesResponse response = client.runInstancesWithOptions(request, runtime);
System.out.println(response.body.toMap());
} catch (TeaUnretryableException ue) {
// This example only prints exceptions. Handle exceptions carefully in production code—never ignore them.
ue.printStackTrace();
// Print error message
System.out.println(ue.getMessage());
// Print request details for debugging
System.out.println(ue.getLastRequest());
} catch (TeaException e) {
// This example only prints exceptions. Handle exceptions carefully in production code—never ignore them.
e.printStackTrace();
// Print error code
System.out.println(e.getCode());
// Print error message (includes RequestId)
System.out.println(e.getMessage());
// Print detailed server-side error
System.out.println(e.getData());
} catch (Exception e) {
// This example only prints exceptions. Handle exceptions carefully in production code—never ignore them.
e.printStackTrace();
}
}
}
Criar via Terraform
As etapas a seguir incluem código de exemplo pronto para execução. Executar agora
Pré-requisitos
-
Criar um AccessKey
Uma conta Alibaba Cloud (conta primária) tem permissões totais sobre todos os recursos. Para evitar uso não autorizado caso o AccessKey vaze, utilize um AccessKey de usuário RAM com as permissões mínimas necessárias. Consulte Criar um usuário RAM e Criar um AccessKey.
-
Criar uma política personalizada
Crie uma política personalizada para permitir a inicialização de instâncias ECS, visualização de detalhes da instância e verificação do histórico de preços spot. Consulte Criar uma política personalizada.
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:RunInstances", "ecs:DescribeInstances", "ecs:DescribeSpotPriceHistory" ], "Resource": "*" } ] }
Recursos utilizados
alicloud_vpc: Cria uma VPC.
alicloud_vswitch: Cria um vSwitch na VPC para segmentação de sub-rede.
alicloud_security_group: Cria um grupo de segurança chamado default e o associa à VPC.
alicloud_instance: Cria uma instância ECS.
alicloud_security_group_rule: Define regras de grupo de segurança.
Procedimento
-
Abra https://shell.aliyun.com e faça login no Cloud Shell.
Para outras formas de usar o Cloud Shell, consulte Usar o Cloud Shell.
-
Crie uma pasta de projeto chamada terraform e entre no diretório.
mkdir terraform cd terraform -
Crie um arquivo de configuração chamado main.tf com o seguinte conteúdo:
-
Execute
terraform initpara inicializar a configuração.
-
Execute
terraform apply. Quando solicitado, insirayese pressione Enter. Se a mensagem a seguir aparecer, sua instância spot foi criada.
-
Execute
terraform showpara visualizar detalhes dos recursos criados.
Limpar recursos
Para liberar recursos criados pelo Terraform, execute o comando a seguir. Consulte Comandos comuns.
terraform destroy
Referências
Para uma introdução ao Terraform, consulte Visão geral do Terraform.
Outros métodos
A Alibaba Cloud também oferece Auto Scaling, ACK e grupos de provisionamento automático para criação de instâncias spot em cenários mais complexos.
Auto Scaling (ESS)
Mistura dinamicamente instâncias de pagamento conforme o uso e spot para responder a flutuações de carga, substituindo automaticamente instâncias liberadas. Consulte Usar instâncias spot em grupos de dimensionamento para reduzir custos.
ACK
Cria pools de nós Kubernetes de baixo custo para aplicações stateless e tolerantes a falhas. Consulte Melhores práticas para pools de nós de instância spot.
Grupo de provisionamento automático
Provisiona clusters de instâncias em várias zonas e métodos de faturamento (pagamento conforme o uso e spot) com uma única configuração. Consulte Exemplo de configuração de grupo de provisionamento automático.