Ola,
Você já precisou hospedar um contêiner na nuvem, mas não queria usar uma máquina virtual e não podia usar App Service, pois precisa de múltiplas portas expostas? Nesse artigo quero te mostrar como podemos usar o Azure Container Instance (ou ACI) para rodar contêineres de forma simples e prática.
Um caso muito comum no dia-a-dia de desenvolvedores é enviar notificações via e-mail dos mais variados assuntos que ocorrem em uma aplicação. Geralmente usamos controles de condição e variáveis de ambiente para forçar e-mails pessoais quando estamos em ambientes de teste ou de homologação. Recentemente em um projeto acabei conhecendo o MailHog um projeto simples, mas que fornece um servidor de SMTP para testes que podemos enviar e-mails e validar os usos sem arriscar mandar e-mails para endereços verdadeiros.
Edit 2023-06-16: Para quem preferir, também fiz um video na prática.
Criando o Container Instance
A criação de um Azure Container Instance é bem simples e irei descrever no passo a passo a seguir:
- Selecione a opção Criar na lista de Container Instance do Azure
2. Preencha as informações de Assinatura e grupo de recurso, as informações mais importantes aqui são o Image Source e o Size.
Para o Image Source selecione a opção "Other Registry" e defina a imagem como "mailhog/mailhog".
Para a opção size como é um contêiner bem leve iremos manter no minimo, com 1 vCpu e 1.5GB de memória.
3. Aqui é a parte mais importante, precisamos definir a rede como pública e expor as portas do nosso contêiner:
1025 - para envio dos e-mails via serviço SMTP
8025 - para acesso a interface web.
4. Não é necessário definir nenhuma variável de ambiente.
5. Após a validação dos parâmetros conclua a criação do contêiner.
Testando nosso servidor SMTP
Após a criação do container, podemos acessar tanto pelo IP publico quando pelo endereço DNS.
Para enviar o email podemos utilizar qualquer código que envie um email via SMTP, no exemplo a seguir estou utilizando c#
using System.Net.Mail;
namespace MailhogSmtp;
internal class Program
{
static async Task Main(string[] args)
{
var smtpHost = "azbrmailhog.ehgfbye4d5gseeck.eastus2.azurecontainer.io";
var smtpPort = 1025;
using var smtpClient = new SmtpClient(smtpHost, smtpPort);
var mailMessage = new MailMessage
{
From = new MailAddress("notificao@azurebrasil.cloud"),
Subject = "Existem novos alertas de redução de custos",
Body = "Foram encontradas oportunidades de redução de custos na sua assinatura. Clique aqui para saber mais.",
To = { new MailAddress("meucliente@meudominio.com.br") }
};
await smtpClient.SendMailAsync(mailMessage);
}
}
Acessando nosso servidor pelo endereço criado pelo azure na porta 8025 podemos confirmar que o e-mail foi enviado.
Conclusão
O Azure Container Instance é uma forma simples e prática de rodarmos contêineres no Azure e como a maioria dos serviços pagamos por hora utilizada. Considerando o uso apenas durante o horário comercial o nosso exemplo custaria ~$10/mês.
Espero que tenham gostado []s e até a próxima.