AWS ECS (Terraform)
Guia completo para implantar o All ID no AWS ECS Fargate usando Terraform.
Visão geral
Este guia explica como implantar o All ID usando Terraform Infrastructure as Code.
A implantação requer:
Terraform da aplicação All ID (
src/terraform/allid/) - Serviços da aplicação (ECS, RDS, ALB)VPC existente - Você deve fornecer uma VPC com a estrutura de sub-redes necessária
Requisitos de rede: Os módulos Terraform do All ID exigem uma VPC existente com sub-redes públicas, privadas e isoladas. Se você ainda não tiver uma VPC, a Certta fornece um projeto Terraform de referência (src/terraform/shared/) que cria uma infraestrutura de rede pronta para produção.
A Certta fornecerá um pacote contendo:
Projeto Terraform do All ID (obrigatório)
Projeto Terraform de infraestrutura de rede de referência (opcional, use se precisar criar uma nova VPC)
Exemplos de configuração e documentação
Observação: O projeto usa um prefixo padrão teste-tf para nomeação de recursos. Você deve alterá-lo para o nome do seu projeto no terraform.tfvars arquivo por meio da variável .
Pré-requisitos
Antes de implantar, verifique se você tem:
Ferramentas:
Terraform >= 1.5
AWS CLI configurado com credenciais
Conta AWS:
Conta AWS com permissões adequadas
Permissões para criar: ECS, RDS, ALB, CloudFormation, funções IAM, grupos de segurança
Credenciais AWS configuradas (
aws configure)
Infraestrutura de rede - Você tem três opções:
Opção A (recomendada): Implantar uma nova VPC usando o projeto Terraform de referência da Certta (
src/terraform/shared/)Opção B: Use uma VPC existente criando manualmente os Parâmetros SSM (veja a etapa 2B)
Já possui Parâmetros SSM: Pule diretamente para a etapa 3 se os parâmetros já estiverem configurados
Estrutura de VPC necessária (independentemente da opção):
Sub-redes públicas (mínimo 2 AZs) para o Application Load Balancer
Sub-redes privadas com NAT (mínimo 2 AZs) para os serviços ECS
Sub-redes isoladas (mínimo 2 AZs) para o banco de dados RDS
Gateway de Internet e NAT Gateway configurados
Imagens de contêiner:
Acesso ao registro privado de contêineres da Certta
URIs dos repositórios ECR para as imagens Peer e Facematch
Versões/tags de imagem a implantar
Importante: Entre em contato com seu gerente técnico de conta da Certta para obter:
Arquivos do projeto Terraform (All ID + infraestrutura de rede opcional)
Credenciais do registro de contêineres e URIs das imagens
Certificados do Serviço Router para comunicação mTLS
Automação com Makefile
Este projeto inclui Makefiles que simplificam as operações do Terraform. Em vez de executar terraform comandos diretamente, você pode usar make comandos que lidam automaticamente com configurações específicas do ambiente.
Benefícios:
✅ Execução consistente: Os mesmos comandos funcionam em todos os ambientes
✅ Navegação automática: Não há necessidade de
cdpara os diretórios do ambiente✅ Segurança integrada: Mensagens de confirmação para operações destrutivas
✅ Fácil multiambiente: Alterne entre ambientes com
ENVparâmetro✅ Autoexplicativo: Execute
make helppara ver todos os comandos disponíveis✅ Prevenção de erros: Valida nomes de ambiente e parâmetros obrigatórios
Ao longo deste guia, você verá make comandos em vez de terraform comandos. Esta é a abordagem recomendada para gerenciar esta infraestrutura.
Alternativa: Se preferir usar o Terraform diretamente, ainda poderá fazer isso navegando até o diretório do ambiente (por exemplo, cd environments/dev) e executando comandos padrão terraform comandos.
Exemplo rápido:
Exemplo de segurança:
Estrutura do projeto
A Certta fornecerá os arquivos do projeto Terraform. A estrutura do pacote:
A infraestrutura compartilhada é opcional: Implante somente se precisar criar uma nova VPC. Se você já tiver uma VPC, pule o src/terraform/shared/ projeto e configure as informações da VPC via Parâmetros SSM.
Arquivos principais por ambiente
Cada diretório de ambiente contém:
main.tf: Configuração principal com definições de provedor e invocações de módulosvariables.tf: Todas as definições de variáveis com tipos e padrõesoutputs.tf: Saídas dos recursos criados (DNS do ALB, endpoint do banco de dados etc.)terraform.tfvars.example: Modelo com valores e comentários de exemploterraform.tfvars: Valores reais (não versionado no git, contém segredos)ssm.tf(parte compartilhada apenas): Parâmetros SSM para referências entre projetos
Etapa 1: Extrair o projeto Terraform
Extraia os arquivos do projeto Terraform fornecidos pela Certta:
Etapa 2: Infraestrutura de rede (Opção A)
Escolha sua opção:
Esta etapa (Opção A): Implante uma nova VPC usando o projeto Terraform de referência da Certta
Etapa 2B (Opção B): Use sua VPC existente criando Parâmetros SSM manualmente
Opção A: Implantar nova VPC com Terraform
Se precisar criar uma nova VPC, implante a infraestrutura de rede de referência:
O que é implantado:
VPC com blocos CIDR específicos do ambiente
2 sub-redes públicas (em 2 zonas de disponibilidade)
2 sub-redes privadas com NAT (em 2 zonas de disponibilidade)
2 sub-redes isoladas (em 2 zonas de disponibilidade) para bancos de dados
Gateway de Internet para acesso à internet pública
NAT Gateway para acesso de saída das sub-redes privadas
Parâmetros SSM para referências entre projetos
Tempo de implantação: ~5-10 minutos
Após a implantação, as informações da VPC são armazenadas automaticamente nos Parâmetros SSM:
Os seguintes Parâmetros SSM são criados:
/shared/dev/vpc-id- ID da VPC/shared/dev/vpc-cidr- Bloco CIDR da VPC/shared/dev/public-subnet-ids- IDs das sub-redes públicas (separados por vírgula)/shared/dev/private-egress-subnet-ids- IDs das sub-redes privadas com NAT (separados por vírgula)/shared/dev/private-isolated-subnet-ids- IDs das sub-redes isoladas (separados por vírgula)
O projeto Terraform do All ID lê esses Parâmetros SSM automaticamente - nenhuma configuração manual necessária!
Etapa 2B: Usando VPC existente (Opção B)
Pule esta etapa se você escolheu a Opção A (implantando uma nova VPC com terraform-shared).
Se você já tiver uma VPC e não quiser usar terraform-shared, você pode criar os Parâmetros SSM manualmente para que o projeto Terraform do All ID encontre sua VPC.
Pré-requisitos: Sua VPC deve ter:
Sub-redes públicas (com rota para o Gateway de Internet)
Sub-redes privadas com saída (com rota para o NAT Gateway)
Sub-redes privadas isoladas (sem rota para a internet, para bancos de dados)
Obtenha os IDs da sua VPC e das sub-redes
Use a AWS CLI para identificar sua VPC e sub-redes:
Identifique cada tipo de sub-rede
Sub-redes públicas: Possui rota
0.0.0.0/0 → igw-xxxxx(Gateway de Internet)Sub-redes privadas com saída: Possui rota
0.0.0.0/0 → nat-xxxxx(NAT Gateway)Sub-redes privadas isoladas: SEM rota para
0.0.0.0/0
Crie os Parâmetros SSM
Depois de identificar sua VPC e sub-redes, crie os Parâmetros SSM:
Importante:
Use IDs de sub-redes separados por vírgula SEM ESPAÇOS (por exemplo,
subnet-111,subnet-222)Garanta que as sub-redes estejam em AZs diferentes para alta disponibilidade
Os tipos de sub-rede (public, private-egress, private-isolated) devem corresponder às rotas configuradas
Verifique se os parâmetros foram criados
Exclua os parâmetros (se precisar refazer)
Qual opção escolher?
✅ Opção A (terraform-shared): Recomendado para novos projetos ou quando você deseja gerenciar a VPC com Terraform
🔧 Opção B (Manual): Use se você já tiver uma VPC e ainda não quiser migrar para o Terraform
Etapa 3: Configure as variáveis da aplicação
Navegue até o diretório da aplicação:
Copie o arquivo de variáveis de exemplo e configure os valores específicos do seu ambiente:
Edite environments/dev/terraform.tfvars e configure os seguintes valores:
Valores de configuração a atualizar:
peer_ecr_repository_uri
Registro do contêiner do serviço Peer
Fornecido pela Certta
peer_version
Tag da imagem do Peer a implantar
Fornecido pela Certta (por exemplo, latest, hash do commit)
facematch_ecr_repository_uri
Registro do contêiner do Facematch
Fornecido pela Certta
facematch_version
Tag da imagem do Facematch a implantar
Fornecido pela Certta (por exemplo, latest, hash do commit)
desired_count
Número de tarefas por serviço peer
Defina como 0 para dev (economia de custos), 1+ para stg/prd
router_rest_url
Endpoint do Certta Router para sua região/ambiente
Fornecido pela Certta
Sobre desired_count: Esta variável controla o número de tarefas para todos os três serviços Peer simultaneamente (padrão, client-a, client-b). Isso garante consistência entre todos os peers.
Valores recomendados:
Desenvolvimento:
0(nenhuma tarefa em execução - economiza custos quando não está em uso)Staging:
1(uma tarefa por peer para testes)Produção:
2+(múltiplas tarefas por peer para alta disponibilidade)
Observação: O serviço Facematch está fixado em 2 tarefas. Para alterar, edite o facematch módulo em environments/<env>/main.tf.
Certificados mTLS do Router: Os certificados NÃO são configurados em terraform.tfvars. O Terraform cria segredos vazios no AWS Secrets Manager, e você os preencherá com certificados reais após a implantação na Etapa 5.
Abordagem alternativa: Você pode incluir certificados em terraform.tfvars se preferir, mas esteja ciente:
Os valores serão armazenados nos arquivos de estado do Terraform (mesmo se marcados como sensíveis)
Os arquivos de estado devem ser criptografados e com controle de acesso
Essa abordagem é opcional e não é recomendada por motivos de segurança
Múltiplos ambientes: Crie arquivos terraform.tfvars separados para cada ambiente (dev, stg, prd) com valores específicos de cada ambiente.
Etapa 4: Implantar a aplicação All ID
Implante os serviços da aplicação All ID:
Tipo yes quando solicitado a confirmar a implantação.
O que é implantado:
Cluster ECS + descoberta de serviços (
ecs-clustermódulo)Cluster ECS Fargate
namespace privado do Cloud Map (
allid.local)Container Insights habilitado
Banco de dados (
banco de dadosmódulo)Cluster Aurora MySQL Serverless v2
Grupo de segurança do banco de dados
Secrets Manager para credenciais (geradas automaticamente)
CloudWatch Logs para logs de erro, gerais e de consultas lentas
Performance Insights habilitado
Balanceador de carga (
load-balancermódulo)Application Load Balancer (voltado para a internet)
listener HTTP (porta 80)
Grupo de segurança com whitelisting de IP
Ação padrão: 403 Acesso negado
Serviço Facematch (
facematch-servicemódulo)Definição de tarefa ECS (CPU: 1024, Memória: 2048 MB)
Serviço Fargate com 2 instâncias
Registro de serviço no Cloud Map (
facematch.allid.local)Grupo de segurança para comunicação interna
Funções IAM para execução e tarefa
Serviços Peer (
peer-servicemódulo - instanciado 3 vezes)Cria 3 instâncias peer (default, client-a, client-b)
Cada peer tem:
Definição de tarefa ECS (CPU: 256, Memória: 512 MB)
Serviço Fargate com contagem de instâncias configurável
Grupo de destino do ALB com roteamento baseado em caminho
Registro de serviço no Cloud Map
Conexão com o banco de dados no RDS
Certificado mTLS do Router armazenado no Secrets Manager
Funções IAM para execução e tarefa
Grupo de logs do CloudWatch
Tempo de implantação: ~15-20 minutos
O Terraform lida automaticamente com as dependências dos recursos e os implanta na ordem correta. Você pode acompanhar o progresso na saída do terminal.
Importante: Após a implantação, conclua a Etapa 5 (configurar certificados) e a Etapa 6 (inicializar bancos de dados) para deixar os Serviços Peer operacionais.
Etapa 5: Configurar certificados mTLS do Router
Após implantar a infraestrutura, você precisa preencher os certificados mTLS do Router no AWS Secrets Manager. O Terraform cria segredos vazios que devem ser preenchidos com o conteúdo real do certificado.
Por que os certificados não estão no Terraform:
Mantém credenciais sensíveis fora dos arquivos de estado do Terraform
Permite rotação de certificados sem alterações no Terraform
Segue as melhores práticas de segurança para gerenciamento de segredos
Alternativa: Você pode incluir certificados em terraform.tfvars se suas políticas de segurança permitirem, mas isso os armazenará no arquivo de estado do Terraform.
Configure os certificados para cada peer
Opção 1: Console da AWS (recomendado)
Navegue até o Console do Secrets Manager → Segredos
Encontre e clique em cada segredo:
{prefix}-peer-default-router-certificate{prefix}-peer-client-a-router-certificate{prefix}-peer-client-b-router-certificate
Clique em "Recuperar valor do segredo" → "Editar"
Atualize o JSON com seus certificados reais:
Salvar alterações
Opção 2: AWS CLI
Importante: Substitua {prefix} pelo seu valor real de prefixo (o padrão é teste-tf ou o que você configurou em terraform.tfvars).
Após atualizar os segredos, os Serviços Peer detectarão e usarão automaticamente os certificados. Nenhuma reinicialização é necessária.
Etapa 6: Inicializar o banco de dados
O Serviço Peer requer que um esquema de banco de dados seja inicializado. A Certta fornecerá um arquivo dump SQL que deve ser restaurado no banco de dados Aurora MySQL.
Crítico: Os Serviços Peer podem falhar ao iniciar se o esquema do banco de dados não estiver inicializado. Conclua esta etapa para permitir que os serviços se tornem operacionais.
Configuração multi-tenant: Cada instância peer usa seu próprio banco de dados. Os nomes dos bancos de dados seguem o padrão peer-{nome}:
peer-default(para o peer padrão)peer-client-a(para o peer client-a)peer-client-b(para o peer client-b)
Métodos de acesso ao banco de dados
O banco de dados Aurora MySQL é implantado em sub-redes isoladas sem acesso direto à internet. Você precisa estabelecer uma conexão segura para acessá-lo.
Opção 1: Bastion Host (recomendado para produção)
Implante um bastion host (instância EC2) em uma sub-rede pública para atuar como servidor de salto:
Inicie uma instância EC2 em uma sub-rede pública da sua VPC
Configure os grupos de segurança para permitir:
Acesso SSH do seu IP ao bastion host
Acesso MySQL do bastion host ao grupo de segurança do RDS
Conecte-se ao banco de dados por meio de um túnel SSH:
Opção 2: Conexão VPN
Se você tiver uma conexão VPN configurada para a sua VPC:
Conecte-se à sua VPN
Acesse o banco de dados diretamente usando seu endpoint privado
Opção 3: AWS Systems Manager Session Manager
Use o Session Manager para acesso seguro sem expor portas SSH:
Certifique-se de que seu bastion host tenha o agente SSM instalado
Conceda as permissões IAM necessárias
Crie uma sessão de encaminhamento de porta:
Obtenha o endpoint e as credenciais do banco de dados
Opção 1: Saídas do Terraform
Opção 2: Console da AWS
Navegue até o Console do RDS → Bancos de dados
Encontre o cluster Aurora (procure pelo nome com
allid-database)Copie o endpoint do Writer (por exemplo,
allid-database-cluster.cluster-xxx.us-east-1.rds.amazonaws.com)Navegue até o Console do Secrets Manager → Segredos
Encontre o segredo do banco de dados (procure pelo nome com
allid-database)Clique em "Recuperar valor do segredo" para ver o nome de usuário e a senha
Opção 3: AWS CLI
Criar e inicializar bancos de dados
Você pode usar qualquer uma das ferramentas a seguir para criar bancos de dados e restaurar o dump:
Opção A: Cliente de linha de comando MySQL
Melhor para automação e pipelines de CI/CD:
Opção B: DBeaver (ferramenta GUI)
Recomendado para gerenciamento visual de banco de dados:
Crie uma nova conexão:
Banco de dados: MySQL
Host:
{DB_ENDPOINT}(de cima)Porta: 3306
Nome de usuário:
{DB_USERNAME}(do Secrets Manager)Senha:
{DB_PASSWORD}(do Secrets Manager)
Criar bancos de dados:
Clique com o botão direito na conexão → Editor SQL → Novo script SQL
Executar:
Restaurar dump:
Clique com o botão direito em cada banco de dados → Ferramentas → Executar script
Selecione o
allid-dump.sqlarquivo fornecido pela CerttaClique em "Iniciar" para executar
Opção C: MySQL Workbench (ferramenta GUI)
Ferramenta GUI alternativa para gerenciamento MySQL:
Crie uma nova conexão:
Nome da conexão:
All ID DatabaseHostname:
{DB_ENDPOINT}Porta: 3306
Nome de usuário:
{DB_USERNAME}Senha: Armazenar no Keychain/Vault
Criar bancos de dados:
Abrir conexão → guia Query
Executar:
Importar dump:
Servidor → Importação de dados
Selecione "Importar de arquivo autônomo"
Escolha
allid-dump.sqlo arquivoSelecione o banco de dados de destino (repita para cada um: peer-default, peer-client-a, peer-client-b)
Clique em "Iniciar importação"
Solução de problemas de conexão: Se você não conseguir se conectar ao banco de dados, certifique-se de que:
Você estabeleceu o acesso adequado (bastion host, VPN ou Session Manager)
O grupo de segurança do RDS permite conexões da sua origem
O endpoint e as credenciais do banco de dados estão corretos
Crítico: Cada Serviço Peer falhará ao iniciar se seu banco de dados correspondente não estiver inicializado. Entre em contato com seu gerente técnico de conta da Certta para obter o arquivo dump SQL.
Os serviços se recuperarão automaticamente: Depois que você inicializar os bancos de dados, os Serviços Peer serão reiniciados automaticamente e ficarão saudáveis em poucos minutos. O ECS detectará que as tarefas estão falhando e as reiniciará automaticamente.
Etapa 7: Obter endpoints
Após a conclusão da implantação, obtenha o endpoint da aplicação:
Saídas importantes:
alb_dns_name
Nome DNS do balanceador de carga
allid-load-balancer-123456789.us-east-1.elb.amazonaws.com
database_endpoint
Endpoint do cluster Aurora MySQL
allid-database-cluster.cluster-xxx.us-east-1.rds.amazonaws.com
database_secret_arn
ARN do Secrets Manager para credenciais do banco de dados
arn:aws:secretsmanager:...
ecs_cluster_name
Nome do cluster ECS
allid-cluster
peer_default_service_name
Nome do serviço peer padrão
allid-peer-default
facematch_service_name
Nome do serviço Facematch
allid-facematch
A implantação cria 3 instâncias peer com roteamento baseado em caminho para suporte multilocatário. Cada peer tem seu próprio endpoint isolado com prefixo de caminho.
Endpoints da API (3 instâncias peer por padrão):
Endpoints de verificação de integridade:
Para adicionar/remover peers, edite o arquivo de ambiente main.tf e adicione/remova módulos peer. Lembre-se de criar o banco de dados correspondente e fornecer certificados do Router para novos peers ANTES de implantar.
Etapa 8: Validar a implantação
Teste se todos os serviços estão saudáveis:
Teste os endpoints dos peers (usando o DNS do ALB da Etapa 7):
Todos os endpoints devem retornar HTTP 200 com informações de status.
Verifique o status dos serviços ECS:
Console da AWS:
Navegue até o Console do ECS → Clusters →
allid-clusterClique na aba "Serviços"
Verifique se todos os serviços mostram o status "Em execução" e se a contagem desejada corresponde à contagem em execução
AWS CLI:
Todos os serviços devem mostrar runningCount correspondendo a desiredCount e o status da implantação PRIMARY.
Verificar logs do CloudWatch (se os serviços falharem ao iniciar):
Console da AWS:
Navegue até o Console do CloudWatch → Grupos de logs
Encontre os grupos de logs:
/ecs/allid/peer-default,/ecs/allid/facematch, etc.Verifique os streams de logs recentes em busca de erros
AWS CLI:
Comandos do Makefile
Ambos src/terraform/allid/ e src/terraform/shared/ incluem um Makefile com comandos de automação para facilitar o gerenciamento da infraestrutura.
Primeiros passos: Execute make help em qualquer um dos diretórios do projeto para ver todos os comandos disponíveis e suas descrições.
Comandos disponíveis
Seleção de ambiente
Todos os comandos suportam o ENV parâmetro para especificar o ambiente de destino:
Ambiente padrão: Se você não especificar ENV, o Makefile usa por padrão dev.
Comandos da infraestrutura compartilhada
O Makefile da infraestrutura compartilhada inclui um comando adicional para visualizar parâmetros do SSM:
Exemplo de fluxo de trabalho
Aqui está um fluxo de trabalho típico usando comandos do Makefile:
Referência rápida
Comandos mais comuns
Gerenciamento de ambiente
Tarefas comuns
Implantar em um novo ambiente:
Atualizar imagens de contêiner:
Escalar serviços:
Ver logs:
Visão geral da arquitetura
Camadas de rede
A implantação cria uma arquitetura de rede em três camadas:
Comunicação entre serviços
Roteamento baseado em caminho (multi-tenant)
O ALB usa roteamento baseado em caminho para dar suporte a várias instâncias de peer:
Cada instância de peer:
Tem seu próprio serviço ECS
Tem seu próprio banco de dados isolado (peer-default, peer-client-a, peer-client-b)
Opera independentemente dos outros peers
Compartilha o mesmo conjunto de serviços Facematch
Gerenciamento de configuração
Os módulos do Terraform configuram automaticamente variáveis de ambiente e segredos para todos os serviços.
As variáveis de ambiente são definidas no peer-service módulo e incluem:
Conexão com o banco de dados (host, porta, nome do banco)
Endpoint do serviço Facematch
URL do serviço Router
Flags de recurso (RabbitMQ, Redis, comunicação com o Router)
Segredos são injetados por meio dos segredos da tarefa ECS e incluem:
Credenciais do banco de dados (geradas automaticamente pelo Terraform)
Certificados mTLS do Router (fornecidos via terraform.tfvars)
Veja Configuração para a lista completa de variáveis de ambiente, valores necessários e detalhes de configuração.
Gerenciamento de segredos
O Terraform cria automaticamente segredos no AWS Secrets Manager:
Convenção de nomenclatura de segredos:
Credenciais do banco de dados:
{prefix}-database-secret(por exemplo,allid-database-secret)Gerado automaticamente pelo Terraform durante a implantação
Certificados do Router:
{prefix}-peer-{name}-router-certificate(por exemplo,allid-peer-default-router-certificate)Criado vazio pelo Terraform, preenchido manualmente após a implantação (veja Etapa 5)
Abordagem de segurança dos certificados do Router:
Por padrão, os segredos do certificado do Router são criados vazios e preenchidos manualmente após a implantação. Essa abordagem:
✅ Mantém credenciais sensíveis fora dos arquivos de estado do Terraform
✅ Permite a rotação de certificados sem alterações no Terraform
✅ Segue as melhores práticas de segurança para gerenciamento de segredos
Alternativa: Você pode incluir certificados em terraform.tfvars se necessário, mas esteja ciente de que eles serão armazenados nos arquivos de estado do Terraform (mesmo se marcados como sensíveis). Se você escolher esta abordagem:
Armazene os arquivos de estado em buckets S3 criptografados com acesso restrito
Use bloqueio de estado com DynamoDB
Nunca faça commit dos arquivos de estado no controle de versão
Limite o acesso aos arquivos de estado apenas ao pessoal autorizado
Segurança
O Terraform configura automaticamente grupos de segurança e whitelist de IP seguindo os princípios de privilégio mínimo.
Grupos de segurança:
O ALB aceita tráfego apenas de IPs permitidos
Os serviços Peer aceitam tráfego apenas do ALB e da VPC interna
O Facematch aceita tráfego apenas dos serviços Peer
O banco de dados aceita tráfego apenas dos serviços Peer
Whitelist de IP:
O ALB é configurado para aceitar tráfego apenas dos endereços IP do Certta Router
Configure IPs adicionais em
terraform.tfvarspor meio daalb_allowed_cidr_blocksvariável
Veja Melhores Práticas de Segurança para:
Lista completa dos endereços IP do Certta Router
Recomendações de segmentação de rede
Melhores práticas de gerenciamento de segredos
Opções adicionais de reforço de segurança
Atualizando a implantação
Atualizar imagens de contêiner
Atualize as versões das imagens em
terraform.tfvars:
Aplique as alterações:
O Terraform atualizará as definições de tarefa do ECS e acionará uma implantação contínua.
Atualizar variáveis de ambiente
Edite o
peer-servicemódulo emsrc/terraform/allid/modules/peer-service/main.tfModifique as variáveis de ambiente na definição da tarefa
Aplique as alterações:
Isso atualizará todas as instâncias de peer (default, client-a, client-b) com a nova configuração.
Rotacionar certificados mTLS do Router
Se você precisar rotacionar os certificados mTLS do Router (expiração do certificado, incidente de segurança etc.), siga o mesmo processo da configuração inicial em Etapa 5.
Quando rotacionar certificados:
Expiração/renovação do certificado
Incidente de segurança que exige a substituição do certificado
Mudança entre ambientes Certta (dev/stg/prd)
Requisitos de conformidade para rotação periódica
A aplicação pegará automaticamente os novos certificados do Secrets Manager, sem precisar reiniciar o serviço.
Escalar serviços
Escalar serviços Peer: Edite environments/dev/terraform.tfvars e altere a desired_count variável:
Depois, aplique:
Escalar serviço Facematch: Edite o facematch módulo em environments/dev/main.tf:
Depois, aplique:
Adicionar/remover instâncias de peer
Para adicionar uma nova instância de peer:
Edite o ambiente
main.tfarquivo (por exemplo,src/terraform/allid/environments/dev/main.tf):
Adicione a saída para o novo peer em
outputs.tf:
Aplique as alterações:
Crie e inicialize o banco de dados para o novo peer (veja a Etapa 6):
O novo Peer Service terá automaticamente seu segredo de certificado do Router criado pelo Terraform usando o mesmo certificado de terraform.tfvars. O serviço ficará saudável depois que você concluir a inicialização do banco de dados.
Faixas de prioridade: Cada peer deve usar um priority_base valor exclusivo para as regras do listener do ALB. Use faixas de 30 (por exemplo, 100-129, 130-159, 160-189, 190-219) para evitar conflitos.
Solução de problemas
Erro: Parâmetro SSM não encontrado
Causa: A infraestrutura de rede (src/terraform/shared) não foi implantada, ou os Parâmetros SSM não foram criados.
Solução:
Verifique se os parâmetros existem:
Se os parâmetros não existirem, implante a infraestrutura compartilhada:
Se você tiver uma VPC existente, crie os Parâmetros SSM manualmente:
O serviço Peer não inicia
Verificar logs do CloudWatch:
Causas comuns:
Banco de dados não inicializado: Veja o Passo 6 (inicialização do banco de dados e restauração do dump)
Falha na conexão com o banco de dados: Verifique os security groups e o endpoint do RDS
Serviço Facematch indisponível: Verifique o status do serviço Facematch
Verifique o motivo da parada da task:
Console da AWS:
Console do ECS → Clusters → allid-cluster
Clique no serviço (por exemplo, allid-peer-default)
Vá para a aba "Tasks" → clique nas tasks paradas
Verifique o campo "Stopped reason"
AWS CLI:
Falhas na verificação de integridade
Verifique o status do serviço ECS:
Verifique a integridade dos alvos do ALB:
AWS CLI:
Problemas comuns:
Security groups bloqueando o tráfego entre o ALB e os Peer Services
Serviço não registrado no Cloud Map (a resolução de DNS falha)
Erros de conexão com o banco de dados (verifique o secret de credenciais)
Serviço Facematch não respondendo
Período de carência da verificação de integridade insuficiente
Nenhuma task em execução / Serviços mostrando 0/0
Causa: desired_count está definido como 0 em terraform.tfvars.
Solução:
Isso geralmente é intencional para ambientes de desenvolvimento para economizar custos. Para iniciar as tasks:
Edite
environments/dev/terraform.tfvars:
Aplique as alterações:
Verifique se as tasks estão iniciando:
Dica de economia de custos: Defina desired_count = 0 quando não estiver usando ativamente os ambientes de desenvolvimento para parar todas as tasks do ECS e reduzir os custos de infraestrutura.
Não consegue acessar o ALB
Verifique se seu IP está na allowlist:
Se você receber timeout de conexão ou 403 Forbidden, seu IP não está na allowlist.
Adicione seu IP à allowlist:
Edite
environments/dev/terraform.tfvars:
Aplique as alterações:
Veja Melhores Práticas de Segurança para a lista completa de endereços IP do Certta Router que devem estar na allowlist.
Limpeza
Para remover todos os recursos e parar de incorrer em custos:
Destruição direcionada: Se você precisar destruir recursos específicos em uma ordem específica, você pode navegar até o diretório do ambiente e usar a destruição direcionada:
Aviso: Isso exclui permanentemente todos os recursos, incluindo:
Banco de dados Aurora MySQL e todos os dados
logs do CloudWatch
secrets do Secrets Manager (credenciais do banco de dados, certificados do Router)
serviços e tasks do ECS
Garanta que você tenha backups antes de destruir. Snapshots do banco de dados NÃO são criados automaticamente durante a destruição.
Criar snapshot do banco de dados antes da limpeza (opcional):
Padronização de Ambientes
Todos os ambientes (dev, stg, prd) seguem a mesma estrutura base e os mesmos padrões de configuração. Essa padronização simplifica o gerenciamento e reduz erros ao promover mudanças entre ambientes.
Componentes Padronizados
Estrutura dos Módulos: Todos os ambientes usam os mesmos módulos com os mesmos parâmetros
Nomenclatura de Tags: Em letras minúsculas com hífens (por exemplo,
environment,managed-by,business-unity-id)Valores Padrão: Padrões consistentes entre ambientes, personalizáveis via
terraform.tfvarsNomeação de Recursos:
{prefix}-{resource-type}padrão
Personalização Específica por Ambiente
Personalize cada ambiente ajustando os valores em environments/<env>/terraform.tfvars:
Desenvolvimento (dev):
Homologação (stg):
Produção (prd):
Tags Padrão
Todos os recursos são automaticamente marcados via AWS provider default_tags:
Tags adicionais específicas de recursos podem ser adicionadas por meio de parâmetros do módulo.
Promoção de Mudanças Entre Ambientes
Melhor prática para promover mudanças de dev → stg → prd:
Testar em Desenvolvimento:
Promover para Homologação:
Implantar em Produção:
Checklist de Implantação em Produção:
Estrutura Detalhada de Arquivos
Aplicação All ID (src/terraform/allid/)
Infraestrutura Compartilhada (src/terraform/shared/)
Arquivos Principais Explicados
main.tf:
Configuração do Terraform e do provider AWS
Chamadas de módulos com parâmetros
Fontes de dados para Parâmetros SSM (projeto allid)
Estrutura idêntica entre ambientes
variables.tf:
Todas as definições de variáveis com tipos e padrões
Padrões padronizados entre ambientes
Documentação inline para cada variável
outputs.tf:
Saídas dos recursos criados
Usado para recuperar valores após a implantação
Referenciado por módulos dependentes ou sistemas externos
terraform.tfvars.example:
Modelo com todos os valores configuráveis
Comentários explicativos para cada variável
Valores de exemplo específicos do ambiente
terraform.tfvars (não versionado):
Valores reais do ambiente
Contém segredos (certificados, chaves privadas)
Deve ser criado a partir do
.examplemodeloNunca faça commit deste arquivo no git
ssm.tf (somente compartilhada):
Cria Parâmetros SSM para VPC e IDs de sub-rede
Permite que outros projetos consultem recursos
Formato:
/shared/{environment}/{parameter-name}
Próximos passos
Revise Requisitos Técnicos para especificações de recursos
Revise Configuração para detalhes das variáveis de ambiente
Revise Melhores Práticas de Segurança para fortalecimento
Atualizado

