O blog da AWS
Maximizando a economia de custos – AWS Spot Instances e .NET
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:
- Configurar um aviso de interrupção, que notificará seu aplicativo quando a Instância Spot estiver prestes a ser interrompida.
- 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.