O blog da AWS

Maximizando a economia de custos – AWS Spot Instances e .NET

por Kevin Lira – Arquiteto de Soluções Sênior – FSI
 

As instâncias spot da AWS fornecem uma maneira econômica de executar suas cargas de trabalho na Nuvem AWS. Ao usar instâncias spot, você pode definir uma taxa máxima por hora (Spot Price) que está disposto a pagar pela instância. Esse é um recurso útil para garantir o controle de custos, pois pode impedir a execução de instâncias se a taxa de mercado atual exceder o preço à vista definido.No entanto, é importante observar que especificar um preço à vista também pode aumentar a probabilidade de suas instâncias serem interrompidas, pois a taxa de mercado pode flutuar acima do preço à vista que você definiu. Se você não especificar um preço à vista, será cobrada a taxa de mercado atual para o tipo de instância e a zona de disponibilidade.

Além disso, muitos desenvolvedores podem não estar cientes dos benefícios de usar Instâncias Spot com a linguagem de programação .NET, mas é uma ferramenta poderosa para otimizar custos e garantir a disponibilidade de recursos.

Um dos principais benefícios do uso de Instâncias Spot, é a capacidade de seus custos de execução de processamento em lote, big data e outras cargas de trabalho que não são sensíveis ao tempo. Isso pode ser particularmente útil para aplicativos executados em um agendamento, como tarefas de processamento de dados diárias ou semanais. E também é possível misturar spot com Graviton , aproveitando seus aplicativos tanto no ARM quanto no Spot. Por favor, visite a página Graviton para saber mais

Outro benefício de usar instâncias spot com .NET é a capacidade de escalar automaticamente seus recursos com base na demanda. O AWS SDK for .NET fornece uma interface fácil de usar para interagir com o mercado de instâncias spot da AWS, permitindo que você crie e encerre instâncias conforme necessário. Isso pode ajudar você a economizar custos ao executar instâncias apenas quando elas são necessárias e evitar a necessidade de pagar por recursos ociosos.

Além disso, o uso de instâncias spot com .NET permite que você aproveite recursos como tratamento automático de interrupções. Esse recurso salva automaticamente o estado de sua instância e a encerra quando o Spot não consegue atender às restrições de solicitação da Instância Spot. Quando o preço spot cair abaixo do preço de oferta novamente, a instância será retomada automaticamente, garantindo que suas cargas de trabalho não sejam afetadas por interrupções.

Em resumo, se você é um desenvolvedor .NET que deseja economizar custos ao executar suas cargas de trabalho na AWS, definitivamente vale a pena considerar as instâncias spot. Com a combinação do AWS SDK para .NET e o recurso de tratamento automático de interrupções, é fácil aproveitar a economia de custos e a flexibilidade oferecidas pelas instâncias spot.

Existem várias abordagens para utilizar instâncias spot com aplicativos .NET. Um desses métodos é por meio da utilização do AWS SDK for .NET. Este SDK fornece uma interface conveniente e fácil de usar para interagir com o mercado de instâncias spot da AWS. Ao utilizar o AWS SDK para .NET, é possível executar o gerenciamento, a criação e o encerramento de instâncias spot diretamente de um aplicativo .NET, agilizando o processo e simplificando a funcionalidade geral.

Por exemplo:

using Amazon;
using Amazon.EC2;
using Amazon.EC2.Model;

// Create an Amazon EC2 client
AmazonEC2Client ec2Client = new AmazonEC2Client(RegionEndpoint.USWest2);

// Create a request to launch a Spot Instance
RequestSpotInstancesRequest request = new RequestSpotInstancesRequest();
request.SpotPrice = "0.01";
request.InstanceCount = 1;
request.LaunchSpecification = new LaunchSpecification();
request.LaunchSpecification.ImageId = "ami-0x0x00x0x0x0x0x0";
request.LaunchSpecification.InstanceType = "t2.micro";

// Send the request to launch the Spot Instance
RequestSpotInstancesResponse response = ec2Client.RequestSpotInstances(request);

// Get the Spot Instance request ID
string spotInstanceRequestId = response.SpotInstanceRequests[0].SpotInstanceRequestId;

Você pode definir vários tipos de instância para uma solicitação de instância spot criando uma lista de objetos InstanceType e adicionando-os ao LaunchSpecification.

// Create a list of instance types
List<string> instanceTypes = new List<string>() { "t2.micro", "m5.large", "r5.xlarge" };
request.LaunchSpecification.InstanceType = instanceTypes;

Na especificação de execução, definimos o ImageId (ID da AMI) e os InstanceTypes, que podem ser uma lista de tipos de instância que queremos usar ou um único tipo de instância. A AWS escolherá um da lista com base na disponibilidade e no preço.

Neste exemplo, primeiro criamos um AmazonEC2Client objeto e defina a região onde queremos lançar a Instância Spot. Em seguida, criamos um RequestSpotInstancesRequest objeto e defina o preço Spot, o número de instâncias e a especificação de execução. Na especificação de lançamento, definimos o ImageId (ID da AMI) e o InstanceType da instância spot.

Por fim, enviamos a solicitação para iniciar a instância spot e obter o ID da solicitação da instância spot. Esse ID de solicitação pode ser usado posteriormente para verificar o status da solicitação, encerrar a instância ou recuperar as informações da instância.
Além disso, é importante observar que você terá que lidar com a interrupção de instâncias spot, se  o preço ficar acima do seu preço de oferta e as instâncias forem encerradas. Você pode usar o recurso de aviso de interrupção para obter o aviso de interrupção e salvar os dados da instância antes que ela seja encerrada. Lidar com a interrupção automática de instâncias spot usando o AWS SDK para .NET envolve duas etapas:

  1. Configurar um aviso de interrupção, que notificará seu aplicativo quando a Instância Spot estiver prestes a ser interrompida.
  2. Lidando com a interrupção tomando as medidas apropriadas para salvar o estado de seu aplicativo e encerrar a instância.

Para configurar um aviso de interrupção, você pode usar o InstanceInterruptionBehavior propriedade do LaunchSpecification objeto ao solicitar uma Instância Spot. O InstanceInterruptionBehavior A propriedade  pode ser definida para parar ou hibernar .

Se você defini-la para parar, a instância será interrompida e poderá ser reiniciada posteriormente. Se você defini-la para encerrar, a instância será encerrada e você não poderá reiniciá-la .

using Amazon;
using Amazon.EC2;
using Amazon.EC2.Model;
using System;

// Create an Amazon EC2 client
AmazonEC2Client ec2Client = new AmazonEC2Client(RegionEndpoint.USWest2);

// Create a request to launch a Spot Instance
RequestSpotInstancesRequest request = new RequestSpotInstancesRequest();


Set the interruption behavior to terminate
request.LaunchSpecification.InstanceInterruptionBehavior = "terminate";


Send the request to launch the Spot Instance
RequestSpotInstancesResponse response = ec2Client.RequestSpotInstances(request);

Depois que o aviso de interrupção estiver configurado, você poderá lidar com a interrupção registrando um manipulador de eventos para o aviso de interrupção e tomando as medidas apropriadas para salvar o estado de seu aplicativo e encerrar a instância.

Aqui está um exemplo de tratamento da interrupção usando um manipulador de eventos:

// Get the Spot Instance request ID
string spotInstanceRequestId = response.SpotInstanceRequests[0].SpotInstanceRequestId;

// Register an event handler for the interruption notice
ec2Client.SpotInstanceRequestInterrupted += new EventHandler<SpotInstanceRequestInterruptedEventArgs>(HandleInterruption);

// Function to handle the interruption
private static void HandleInterruption(object sender, SpotInstanceRequestInterruptedEventArgs e)
{
Console.WriteLine(“Spot instance request ” + e.SpotInstanceRequestId + ” has been interrupted.”);
// Save the state of your application
// Terminate the instance
// Perform any other necessary cleanup
}

Conclusão, o SDK da AWS para .NET oferece uma maneira fácil e conveniente de iniciar e gerenciar instâncias spot para seus aplicativos .NET, permitindo que você economize até 90% em seus custos de computação. O SDK fornece uma API fácil de usar que permite que você interaja com o mercado de instâncias spot da AWS e gerencie suas instâncias spot diretamente de seu código .NET. Com o SDK, você pode solicitar e iniciar instâncias spot, verificar o status de suas solicitações de instância spot e encerrá-las ou cancelá-las, se necessário. Você também pode recuperar informações sobre suas instâncias spot em execução e fazer alterações em suas configurações.

 


Sobre o autor

Kevin Lira é arquiteto de soluções sênior na AWS, trabalhando no setor de serviços financeiros. Ele já trabalhou como desenvolvedor de software, líder de tecnologia e arquiteto em vários outros setores por mais de 15 anos . É bacharel em Sistemas de Informação, especialista em tecnologias Microsoft e computação flexível.

 

 

 

 

Revisores

Bruno Lopes é Arquiteto de Soluções Sênior na equipe AWS LATAM. Trabalha com soluções de TI há mais de 14 anos, tendo em seu portfólio inúmeras experiências em cargas de trabalho Microsoft, ambientes híbridos e treinamentos técnicos para clientes como Technical Trainer e Evangelist. Agora ele atua como Arquiteto de Soluções, reunindo todos os recursos para desburocratizar a adoção das melhores tecnologias para ajudar os clientes em seus desafios diários.

 

 

 

 

Kevin McKinney é um Engenheiro de Aceleração de Soluções que trabalha no Setor Público Mundial. Ele passou a maior parte de sua carreira de mais de 20 anos trabalhando com a Microsoft Technologies para o Governo Federal e o Departamento de Defesa dos EUA. Ele tem mestrado em Ciência da Computação e possui várias certificações Microsoft e AWS.

 

 

 

 

Fernando Morelli é Arquiteto Sênior de Soluções no time da AWS Public Sector. Trabalhando com soluções de TI há mais de 25 anos, tendo em seu portifólio, experiências de migração de ambiente Microsoft para grandes empresas privadas e públicas. Atualmente atua como arquiteto de soluções para o setor público, focando no governo Federal, provendo soluções AWS e apoiando os órgãos Federais na jornada de implementação da nuvem AWS.