For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

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:

  1. Opção A (recomendada): Implantar uma nova VPC usando o projeto Terraform de referência da Certta (src/terraform/shared/)

  2. Opção B: Use uma VPC existente criando manualmente os Parâmetros SSM (veja a etapa 2B)

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

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 cd para os diretórios do ambiente

  • Segurança integrada: Mensagens de confirmação para operações destrutivas

  • Fácil multiambiente: Alterne entre ambientes com ENV parâmetro

  • Autoexplicativo: Execute make help para 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ódulos

  • variables.tf: Todas as definições de variáveis com tipos e padrões

  • outputs.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 exemplo

  • terraform.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:

Verifique se os parâmetros foram criados

Exclua os parâmetros (se precisar refazer)

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:

Campo
Descrição
Como obter

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:

  1. Cluster ECS + descoberta de serviços (ecs-cluster módulo)

    • Cluster ECS Fargate

    • namespace privado do Cloud Map (allid.local)

    • Container Insights habilitado

  2. Banco de dados (banco de dados mó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

  3. Balanceador de carga (load-balancer mó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

  4. Serviço Facematch (facematch-service mó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

  5. Serviços Peer (peer-service mó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.

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)

  1. Navegue até o Console do Secrets Manager → Segredos

  2. Encontre e clique em cada segredo:

    • {prefix}-peer-default-router-certificate

    • {prefix}-peer-client-a-router-certificate

    • {prefix}-peer-client-b-router-certificate

  3. Clique em "Recuperar valor do segredo" → "Editar"

  4. Atualize o JSON com seus certificados reais:

  1. Salvar alterações

Opção 2: AWS CLI

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.

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:

  1. Inicie uma instância EC2 em uma sub-rede pública da sua VPC

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

  3. 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:

  1. Conecte-se à sua VPN

  2. 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:

  1. Certifique-se de que seu bastion host tenha o agente SSM instalado

  2. Conceda as permissões IAM necessárias

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

  1. Navegue até o Console do RDS → Bancos de dados

  2. Encontre o cluster Aurora (procure pelo nome com allid-database)

  3. Copie o endpoint do Writer (por exemplo, allid-database-cluster.cluster-xxx.us-east-1.rds.amazonaws.com)

  4. Navegue até o Console do Secrets Manager → Segredos

  5. Encontre o segredo do banco de dados (procure pelo nome com allid-database)

  6. 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:

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

  2. Criar bancos de dados:

    • Clique com o botão direito na conexão → Editor SQL → Novo script SQL

    • Executar:

  3. Restaurar dump:

    • Clique com o botão direito em cada banco de dados → Ferramentas → Executar script

    • Selecione o allid-dump.sql arquivo fornecido pela Certta

    • Clique em "Iniciar" para executar

Opção C: MySQL Workbench (ferramenta GUI)

Ferramenta GUI alternativa para gerenciamento MySQL:

  1. Crie uma nova conexão:

    • Nome da conexão: All ID Database

    • Hostname: {DB_ENDPOINT}

    • Porta: 3306

    • Nome de usuário: {DB_USERNAME}

    • Senha: Armazenar no Keychain/Vault

  2. Criar bancos de dados:

    • Abrir conexão → guia Query

    • Executar:

  3. Importar dump:

    • Servidor → Importação de dados

    • Selecione "Importar de arquivo autônomo"

    • Escolha allid-dump.sql o arquivo

    • Selecione 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

Etapa 7: Obter endpoints

Após a conclusão da implantação, obtenha o endpoint da aplicação:

Saídas importantes:

Saída
Descrição
Exemplo

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:

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:

  1. Navegue até o Console do ECS → Clusters → allid-cluster

  2. Clique na aba "Serviços"

  3. 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:

  1. Navegue até o Console do CloudWatch → Grupos de logs

  2. Encontre os grupos de logs: /ecs/allid/peer-default, /ecs/allid/facematch, etc.

  3. 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.tfvars por meio da alb_allowed_cidr_blocks variável

  • 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

  1. Atualize as versões das imagens em terraform.tfvars:

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

  1. Edite o peer-service módulo em src/terraform/allid/modules/peer-service/main.tf

  2. Modifique as variáveis de ambiente na definição da tarefa

  3. 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:

  1. Edite o ambiente main.tf arquivo (por exemplo, src/terraform/allid/environments/dev/main.tf):

  1. Adicione a saída para o novo peer em outputs.tf:

  1. Aplique as alterações:

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

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:

  1. Verifique se os parâmetros existem:

  1. Se os parâmetros não existirem, implante a infraestrutura compartilhada:

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

  1. Banco de dados não inicializado: Veja o Passo 6 (inicialização do banco de dados e restauração do dump)

  2. Falha na conexão com o banco de dados: Verifique os security groups e o endpoint do RDS

  3. Serviço Facematch indisponível: Verifique o status do serviço Facematch

Verifique o motivo da parada da task:

Console da AWS:

  1. Console do ECS → Clusters → allid-cluster

  2. Clique no serviço (por exemplo, allid-peer-default)

  3. Vá para a aba "Tasks" → clique nas tasks paradas

  4. 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:

  1. Edite environments/dev/terraform.tfvars:

  1. Aplique as alterações:

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

  1. Edite environments/dev/terraform.tfvars:

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

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

  1. Estrutura dos Módulos: Todos os ambientes usam os mesmos módulos com os mesmos parâmetros

  2. Nomenclatura de Tags: Em letras minúsculas com hífens (por exemplo, environment, managed-by, business-unity-id)

  3. Valores Padrão: Padrões consistentes entre ambientes, personalizáveis via terraform.tfvars

  4. Nomeaçã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:

  1. Testar em Desenvolvimento:

  2. Promover para Homologação:

  3. Implantar 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 .example modelo

  • Nunca 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

Atualizado