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:

  1. 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.

💡
Podemos te ajudar com uma revisão 100% gratuita do seu ambiente cloud.
Share this post