Introdução
Lançado em maio de 2021, o AppRunner é até hoje o jeito mais fácil de rodar uma aplicação web completa na AWS. O ecossistema de containers da AWS reúne várias opções de serviços gerenciados, cada uma voltada para casos de uso específicos. Neste artigo, o foco é a aplicação web: como sair do código e chegar a uma aplicação funcional em poucos minutos com o AppRunner.
O que é o AppRunner
O AppRunner é um serviço totalmente gerenciado para aplicações em containers que permite criar, implantar e executar aplicações web e APIs sem qualquer gestão de infraestrutura. Pense no AppRunner como um ElasticBeanStalk para containers. A proposta é simplificar e agilizar bastante a entrega da sua aplicação e diminuir a dependência de expertise em infraestrutura para cuidar de load balancers, certificados e configurações de monitoramento e logging.
Você provavelmente já ouviu falar do AWS Shared Responsibility Model, que define quais componentes da stack de TI são responsabilidade da AWS e quais ficam a cargo dos clientes (você). Todos os serviços da AWS se posicionam em algum ponto desse espectro de responsabilidade compartilhada, reduzindo a carga de gestão típica das operações de TI tradicionais. No EC2, você cuida do patching e das atualizações do sistema operacional, e a AWS cuida do hardware físico. No RDS, você cuida dos seus dados e do schema, enquanto a AWS gerencia as atualizações do banco e a infraestrutura subjacente. O AppRunner segue essa lógica e desloca ainda mais responsabilidade para o lado da AWS: ao cliente cabe apenas o código e a configuração do serviço, o que libera tempo para focar no desenvolvimento. Aliviar essa carga é o que costumam chamar de reduzir o "undifferentiated heavy lifting", deixando você mais livre para focar nos resultados de negócio.
O grande diferencial do AppRunner é abstrair quase todo o conhecimento técnico necessário para provisionar os recursos que rodam seus workloads em containers, de modo que você só precisa se preocupar em fornecer a imagem do container ou o código da aplicação.
Para uma explicação técnica detalhada sobre como o AppRunner funciona por dentro e como a AWS aproveita outros serviços internamente, recomendo assistir a este keynote da AWS, aqui.
Como mencionei antes, o caso de uso do workload é que define onde uma aplicação deve rodar, e vale destacar que o AppRunner não é adequado para todos os cenários de containers. O AppRunner não orquestra múltiplos workloads em containers como o Kubernetes, não suporta tarefas/jobs finitos como o ECS, nem escala para zero como o Lambda. Onde ele se destaca é em simplificar o caminho da geração do código até a aplicação web rodando, em poucos passos. Se você está se perguntando sobre todas as opções de serviços para workloads em containers na AWS e seus casos de uso, em um próximo post vamos percorrer o processo de decisão para identificar qual deles atende melhor o seu workload em containers.
Implantando código no AppRunner
No AppRunner, a unidade de implantação é o "Service", que pode ser entendido como sua imagem de container ou código da aplicação.
Para implantar um "Service", comece clicando em "Create an AppRunner Service".

Criar um AppRunner Service
Aqui você vai escolher uma origem para a aplicação. Uma "source" é o local de onde você quer puxar o código-fonte — seja um Container Registry, como o ECR, ou um repositório de código-fonte — que, no nosso exemplo, é o Github.

Adicionar repositório de código para usar com o AppRunner
Ao selecionar Source Code Repository e clicar em "Add New", você é orientado a instalar o AWS Connector for Github na sua conta do Github, o que permite à AWS recuperar o código-fonte da aplicação e implantá-lo no AppRunner.

Autorizar a AWS a se conectar ao repositório de código
Ao clicar em "Authorize AWS Connector for Github", você é levado a uma página da AWS onde define um nome para o seu AWS Connector. Este guia parte do princípio de que é a primeira vez que você instala um connector e, nesse caso, clicar em "install another" leva você de volta ao Github para escolher a conta/organização em que o connector será instalado.

Nomear o connector e instalá-lo no repositório

Confirmar instalação
OBSERVAÇÃO: Pode ser preciso passar por etapas extras de autenticação, por exemplo, se você tiver a autenticação de dois fatores ativada…
Depois que o connector for instalado, a janela pop-up se fecha e você volta à página de origem e implantação do AppRunner. Ali você vai ver o nome da sua aplicação no AWS Connector, o repositório de origem e o branch a partir do qual pode implantar a aplicação.

Informações de connector e repositório
Nas configurações de implantação, para fins deste exemplo, vamos manter o gatilho "Manual" padrão.
Na página de configuração do build, selecione as opções que atendem aos requisitos da sua aplicação. Neste exemplo, o runtime é Python. Os valores padrão para build command e start command funcionam bem. Seus requisitos podem variar conforme o runtime.

Configurações do serviço
Na página de configuração do Service, especifique os requisitos de recursos da aplicação e informe as variáveis de ambiente que ela precisa.
Ainda nessa página, dá para configurar vários recursos do serviço, como AutoScaling, health checks, rede (com endpoint público ou privado), WAF e Security/IAM para se conectar a outros serviços da AWS, por exemplo.

Requisitos do serviço
Clicar em next leva você à página de resumo, onde é possível revisar todas as configurações do seu AppRunner Service.

Confirmar configurações do serviço
Se todos os valores estiverem certos para a sua aplicação, é só clicar em Create and deploy para implantar o serviço.
Em seguida, você chega ao AppRunner Service Dashboard. Nesse dashboard, dá para ver o status do serviço, os logs de implantação e outras informações importantes. Depois de alguns minutos, você deve ver o status successfully deployed junto com uma URL HTTPS de domínio padrão que pode ser usada para acessar o serviço.

Serviço implantado com sucesso

URL da aplicação
Pronto: sua aplicação web foi implantada no AppRunner em tempo recorde, com apenas alguns cliques.
O AppRunner deixa o processo de implantar sua aplicação (seja código, seja container) bem mais direto. É preciso pouquíssimo conhecimento sobre containerização, load balancing, geração de certificados, autoscaling e outros temas técnicos para colocar a aplicação no ar. Se você quer implantar uma aplicação web direto do código ou a partir de um container já existente, de forma rápida e segura, vale considerar o AppRunner como uma opção viável.
Por fim, se estiver acompanhando para fins de demonstração, não esqueça de excluir todos os recursos criados durante este post e desvincular as aplicações, por questões de custo e segurança.