N8N na AWS: instalar na EC2 com Docker Compose e HTTPS
O n8n é uma ferramenta low-code que liga serviços sem programar: Google Sheets, PostgreSQL, Gmail, OpenAI e outros. Aqui eu subo o n8n numa EC2 com Docker Compose, aponto um domínio no Route 53, abro com HTTPS e crio um workflow que recebe uma chamada de API. No fim, mostro por que esse modelo serve só para teste e como é o meu n8n em produção, num cluster ECS.
Para que eu uso o n8n
Tenho três workflows. No primeiro, o n8n lê uma planilha do Google Sheets com 1.226 respostas de pesquisa dos meus treinamentos gratuitos, trata os dados com um pouco de JavaScript e grava campo a campo numa tabela do PostgreSQL.
O segundo busca no Meta Ads quanto gastei por dia em anúncios e guarda num banco relacional. O terceiro é uma API que diz se um inscrito entrou num grupo de WhatsApp, sem eu escrever código.
Para quem paga ferramentas que cobram por operação, como o Make, rodar o n8n na própria conta tira esse custo e deixa a comunicação com o banco dentro da mesma rede.
O que você precisa ter antes
O n8n sobe em container, então Docker e Docker Compose são pré-requisito. Se ainda não mexeu com eles, comece por Docker na EC2 e Docker Compose na prática.
Uso uma EC2 na região da Virgínia e na VPC default, para não entrar em complexidade de rede. A documentação do n8n oferece EC2 e EKS (Kubernetes), mas no EKS você já começa pagando o control plane, caro para uma ferramenta simples.
1Criar o security group com a porta 443
O n8n atende por HTTPS, então preciso da porta 443. No console da EC2, crie um security group (aqui, bia-dev-aula-youtube, com a descrição "acesso do n8n para aula do youtube") e adicione uma regra de entrada do tipo HTTPS, porta 443. Na aula deixei a origem em "Anywhere", ou seja, 0.0.0.0/0.

2Lançar a EC2 com Docker pelo user data
Lance a instância com estas escolhas:
- Nome:
n8n-aula-youtube. - Imagem: Amazon Linux 2023, 64 bits.
- Tipo: t3.micro, da Free Tier.
- Par de chaves: nenhum. Eu entro pelo Session Manager (SSM), que é mais seguro e simples. Veja Conectar na EC2 pelo navegador.
- Rede: a VPC default e o security group do passo 1.
- Armazenamento: 15 GB. Pode ser mais.
- Perfil de instância (IAM instance profile): uma role com a policy
AmazonSSMManagedInstanceCoree relação de confiança com a EC2. A minha se chamaacesso-ssm. Para criar, vá em IAM, Create role, AWS service, EC2 e anexe essa policy.
No campo user data, no fim das configurações avançadas, uso o user_data_ec2_zona_a.sh da pasta scripts do projeto BIA (github.com/henrylle/bia). Ele instala o Docker e o Git, coloca os usuários no grupo docker, ativa o serviço e instala o Docker Compose. Cole o conteúdo no campo e lance a instância.

3Preparar o compose.yml e o .env
Com a instância no ar, abra o Session Manager (aba "Session Manager" na tela de conexão, botão Connect). Troque para o ec2-user, o usuário padrão do Amazon Linux, entre na pasta home dele e crie a pasta do projeto:
mkdir n8n
cd n8n
Copie o compose.yml da documentação do n8n e cole num arquivo novo:
nano compose.yml
Ele já traz o roteamento do serviço, as portas, as variáveis de ambiente e dois volumes, um para o Traefik e outro para o n8n. Salve com Ctrl+X, Y e Enter.
O .env também vem da documentação:
nano .env
São quatro valores:
- Domínio: o meu, da Formação AWS.
- Subdomínio:
yt. - Timezone:
America/Sao_Paulo. - E-mail: o meu, usado para o certificado SSL.
4Subir o n8n
docker compose up -d
Na primeira tentativa o Compose reclamou de volumes externos, o do Traefik. Eu queria os volumes na própria instância, então tirei a opção de volume externo dos dois volumes no compose.yml e rodei o comando de novo. Aí subiu.
5Apontar o domínio no Route 53
Pegue o IPv4 público da instância. Na zona hospedada do domínio no Route 53, crie um registro do tipo A, com o nome igual ao subdomínio do .env (yt) e o IP da instância como valor.
Abra yt. seguido do seu domínio no navegador. No meu primeiro acesso, o firewall do meu computador reclamou. Liberei, e a página carregou.
6Criar a conta e o primeiro workflow
A tela inicial pede a conta de dono: e-mail, nome e senha. Depois você cria um workflow do zero ou parte de um template pronto.
Como exemplo, montei uma entrada de API com um nó de Webhook:
- Escolha quando o webhook responde. "Quando o último nó terminar" dá uma API síncrona, que devolve o resultado. "Imediatamente" dá uma API assíncrona, que só confirma o recebimento e processa depois (útil para carregar uma planilha no banco).
- Clique em escutar. O n8n mostra a URL de teste.
- Peça ao ChatGPT o comando
curlpara essa URL, do tipo POST, enviando nome e e-mail, e troque o método do webhook para POST. - Rode o
curlno terminal. O nó mostra o nome e o e-mail recebidos.
Dali você mapeia cada campo. Com um PostgreSQL conectado, arrasta a coluna de cada campo, e um nó de código em JavaScript formata o que precisar.
Por que isso não vai para produção
O que subi é uma demonstração, boa para uma prova de conceito. Se a instância morrer, você perde a aplicação, e os dados do n8n ficam na própria máquina. Num serviço que recebe webhooks é pior: se ele estiver fora, o dado que chegou não tem para onde ir.
O n8n que uso de verdade roda num cluster ECS. No CloudWatch, em Container Insights, o mapa mostra o cluster, os services e as task definitions do n8n e do Metabase.

O n8n roda com uma task. Se ela cair, o ECS lança outra. Para alta disponibilidade, basta trocar para duas tasks. O cluster não tem custo. O meu tem duas instâncias, uma delas Spot, e na frente um load balancer com regras que mandam cada requisição para o target group do n8n, do Metabase ou do WordPress, em HTTP e HTTPS. O banco não fica na instância: uso um RDS.
É uma arquitetura sem Kubernetes, bem mais barata que um EKS. Veja Amazon ECS na prática e Docker com alta disponibilidade na AWS.
Checklist
- Security group criado só com a porta 443.
- EC2 Amazon Linux 2023 t3.micro, sem par de chaves, com a role de SSM e o user data que instala Docker e Compose.
- Conexão pelo Session Manager e pasta
n8ncomcompose.ymle.envda documentação. - Volumes sem a opção de externo e
docker compose up -drodando. - Registro A no Route 53 apontando o subdomínio para o IP da instância.
- Conta de dono criada.
- Instância terminada ao fim do teste, para não gerar custo.
O que os alunos dizem

“Depois do layoff, percebi que o mercado exigia AWS e eu não sabia nem por onde começar.”
Gisele, Desenvolvedora Java Sênior
Ver depoimento
“A metodologia da Formação AWS mudou tudo pra mim. Foi ela que consolidou meu conhecimento, me deu segurança e me levou a conquistar a vaga de Engenheiro de Cloud dentro da minha própria empresa.”
Harnon Ramalho, Engenheiro de Cloud
Ver depoimento
“A Formação AWS me deu a prática, a segurança e a clareza que eu nunca encontrei em nenhum outro curso.”
Jhon Wilame, SRE / DevOps Engineer
Ver depoimento
Formação AWS
Aprenda AWS e IA na prática, com projeto real e acompanhamento. Converse com o time sobre a Formação AWS.
Agende uma conversaPrefere assistir?
A aula completa (39 min) está no canal Domine AWS. O vídeo toca aqui mesmo.

