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

AWS ECS (CDK)

Guia completo para implantar o All ID no AWS ECS Fargate usando CDK.

Visão geral

Este guia explica como implantar o All ID usando a AWS CDK (Cloud Development Kit) como Infrastructure as Code.

A implantação requer:

  • CDK da Aplicação All ID (allid/) - Serviços da aplicação (ECS, RDS, ALB)

  • VPC existente - Você deve fornecer um ID de VPC no contexto do CDK

Requisitos de rede: O CDK do All ID requer uma VPC existente com sub-redes públicas, privadas e isoladas. Se você ainda não tiver uma VPC, a Certta fornece um projeto CDK de referência (shared/) que cria uma infraestrutura de rede pronta para produção.

Pré-requisitos

Antes de implantar, certifique-se de ter:

Ferramentas:

  • Node.js >= 18.x

  • AWS CLI configurada com credenciais

  • AWS CDK >= 2.x (npm install -g aws-cdk)

Conta da AWS:

  • Conta da AWS com permissões apropriadas

  • Permissões para criar: ECS, RDS, ALB, CloudFormation, papéis IAM, grupos de segurança

  • Credenciais da AWS configuradas (aws configure)

Infraestrutura de rede:

  • ID de VPC existente com:

    • Sub-redes públicas (mínimo 2 AZs) para o Application Load Balancer

    • Sub-redes privadas (mínimo 2 AZs) para serviços ECS

    • Sub-redes isoladas (mínimo 2 AZs) para o banco de dados RDS

    • Internet Gateway e NAT Gateway configurados

Não tem uma VPC? A Certta fornece um projeto CDK de referência que cria toda a infraestrutura de rede necessária. Veja Etapa 2: Infraestrutura de rede abaixo.

Imagens de contêiner:

  • Acesso ao registro privado de contêiner da Certta

  • URIs do repositório ECR para as imagens Peer e Facematch

  • Versões/tags das imagens a serem implantadas

Estrutura do projeto

A Certta fornecerá a você arquivos do projeto CDK. A estrutura do pacote:

A infraestrutura compartilhada é opcional: Implante somente se você precisar criar uma nova VPC. Se você já tiver uma VPC, pule o shared/ projeto e configure o ID da sua VPC em src/cdk/allid/cdk.json.

Etapa 1: Extrair o projeto CDK

Extraia os arquivos do projeto CDK fornecidos pela Certta:

Etapa 2: Infraestrutura de rede (opcional)

Se você 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 (em 2 zonas de disponibilidade)

  • 2 sub-redes isoladas (em 2 zonas de disponibilidade) para bancos de dados

  • Internet Gateway para acesso público à internet

  • NAT Gateway para acesso de saída das sub-redes privadas

  • Endpoints de VPC para serviços da AWS (S3, ECR, CloudWatch, Secrets Manager)

Tempo de implantação: ~5-10 minutos

Após a implantação, obtenha o ID da VPC:

Opção 1: Console da AWS

  1. Navegue até o Console da VPC → Suas VPCs

  2. Encontre a VPC criada pela implantação (procure tags com o prefixo shared)

  3. Copie o ID da VPC (formato: vpc-xxxxxxxxxxxxx)

Opção 2: AWS CLI

Salve este ID da VPC - você precisará dele na próxima etapa.

Etapa 3: Configurar o contexto do CDK

Edite src/cdk/allid/cdk.json para configurar sua implantação:

Atualize a seção de contexto com os valores específicos do seu ambiente:

Valores de configuração a atualizar:

Campo
Descrição
Como obter

vpc-id

Seu ID da VPC

Da Etapa 2 (se implantado o shared) ou da sua VPC existente

peer-ecr-repository-uri

Registro de contêiner do Peer Service

Fornecido pela Certta

peer-version

Tag da imagem Peer a ser implantada

Fornecido pela Certta (por exemplo, latest, hash do commit)

facematch-ecr-repository-uri

Registro de contêiner do Facematch

Fornecido pela Certta

facematch-version

Tag da imagem Facematch a ser implantada

Fornecido pela Certta (por exemplo, latest, hash do commit)

router-rest-url

Endpoint do Router da Certta para sua região/ambiente

Fornecido pela Certta

Múltiplos ambientes: Você pode configurar múltiplos ambientes (dev, stg, prd) no mesmo cdk.json arquivo. O CDK usará o contexto com base na região e nas variáveis de ambiente.

Etapa 4: Implantar a aplicação All ID

Implante os serviços da aplicação All ID:

O que é implantado:

  1. Cluster ECS + Service Discovery (ClusterStack)

    • Cluster ECS Fargate

    • Namespace privado do Cloud Map (allid.local)

  2. Banco de dados (DatabaseStack)

    • Cluster Aurora MySQL Serverless v2

    • Grupo de segurança do banco de dados

    • Secrets Manager para credenciais (geradas automaticamente)

  3. Balanceador de carga (LoadBalancerStack)

    • Application Load Balancer (voltado para a internet)

    • Listener HTTP (porta 80)

    • Grupo de segurança com whitelist de IPs

  4. Serviço Facematch (FacematchStack)

    • Definição de tarefa ECS (CPU: 1024, Memória: 2048 MB)

    • Serviço Fargate com 2 instâncias

    • Registro de serviço Cloud Map (facematch.allid.local)

    • Grupo de segurança para comunicação interna

  5. Serviços Peer (PeerStack)

    • 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 1 instância

      • Grupo-alvo do ALB com roteamento baseado em caminho

      • Registro de serviço Cloud Map

      • Conexão de banco de dados com o RDS

      • Segredo do certificado mTLS do Router (placeholder)

Tempo de implantação: ~15-20 minutos

O CDK lida automaticamente com as dependências entre as stacks e as implanta na ordem correta: cluster → banco de dados → load-balancer → facematch → peer.

Etapa 5: Inicializar o banco de dados

O Serviço Peer requer que um esquema de banco de dados seja inicializado. A Certta fornecerá um arquivo de 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 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: Host bastion (recomendado para produção)

Implante um host bastion (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 para o host bastion

    • Acesso MySQL do host bastion para o 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 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. Garanta que seu host bastion tenha o agente SSM instalado

  2. Conceda as permissões IAM necessárias

  3. Crie uma sessão de encaminhamento de porta:

Opção 4: Acesso público temporário (somente desenvolvimento)

  1. Modifique temporariamente o grupo de segurança do RDS para permitir seu IP

  2. Torne a instância RDS publicamente acessível (requer modificação)

  3. Reverta as alterações após a inicialização do banco de dados

Obtenha o endpoint e as credenciais do banco de dados

Opção 1: Console da AWS

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

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

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

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

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

  6. Clique em "Retrieve secret value" para ver nome de usuário e senha

Opção 2: 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 do banco de dados:

  1. Criar uma nova conexão:

    • Banco de dados: MySQL

    • Host: {DB_ENDPOINT} (acima)

    • 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 "Start" para executar

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

Ferramenta GUI alternativa para gerenciamento do MySQL:

  1. Criar uma nova conexão:

    • Nome da conexão: Banco de dados All ID

    • Nome do host: {DB_ENDPOINT}

    • Porta: 3306

    • Nome de usuário: {DB_USERNAME}

    • Senha: armazenar no Keychain/Vault

  2. Criar bancos de dados:

    • Abra a conexão → guia Consulta

    • Executar:

  3. Importar dump:

    • Servidor → Importação de dados

    • Selecione "Importar de arquivo autônomo"

    • Escolha allid-dump.sql 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"

Opção D: phpMyAdmin (interface web)

Se você tiver o phpMyAdmin implantado em seu ambiente:

  1. Faça login no phpMyAdmin

  2. Crie os bancos de dados usando o botão "Novo"

  3. Selecione cada banco de dados e use a aba "Importar" para enviar e executar o arquivo de dump SQL

Solução de problemas de conexão: Se você não conseguir se conectar ao banco de dados, verifique:

  • Você estabeleceu o acesso adequado (host bastion, 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 6: Atualizar certificados mTLS do Router

Os Serviços Peer exigem certificados mTLS para se comunicar com o Serviço Router da Certta. O CDK criou automaticamente segredos de placeholder durante a implantação. Você deve atualizar esses segredos com os certificados reais antes que os Serviços Peer possam iniciar com sucesso.

Atualize os segredos de certificado para cada instância peer:

Opção 1: Console da AWS (recomendado)

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

  2. Localize e clique em cada segredo:

    • allid-peer-default-router-certificate

    • allid-peer-client-a-router-certificate

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

Formatação de certificados: Se você tiver arquivos de certificado (.pem ou .key ), você precisa formatá-los para JSON substituindo quebras de linha por \n. O Console da AWS lida com isso automaticamente quando você cola certificados multilinha no modo de texto simples.

Para usuários da CLI, você pode usar ferramentas de processamento de texto como awk ou sed para formatar os certificados, ou usar o console para um gerenciamento mais fácil.

Etapa 7: Obter endpoints

Após a implantação ser concluída, obtenha o endpoint da aplicação:

Opção 1: Console da AWS

  1. Navegue até o Console EC2 → Balanceadores de carga

  2. Encontre o balanceador de carga (procure um nome com allid-load-balancer)

  3. Copie o nome DNS (por exemplo, allid-load-balancer-123456789.us-east-1.elb.amazonaws.com)

Opção 2: AWS CLI

A implantação cria 3 instâncias peer com roteamento baseado em caminho para suporte multitenant. 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 saúde:

Etapa 8: Validar 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 ECS → Clusters → allid-cluster

  2. Clique na aba "Serviços"

  3. Verifique se todos os serviços exibem status "Running" e se a contagem desejada corresponde à contagem em execução

AWS CLI:

Todos os serviços devem mostrar runningCount correspondendo a desiredCount.

Verifique os logs do CloudWatch (se os serviços não conseguirem iniciar):

Console da AWS:

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

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

  3. Verifique os fluxos de logs recentes em busca de erros

AWS CLI:

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 (multitenant)

O ALB usa roteamento baseado em caminho para suportar várias instâncias peer:

Cada instância 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 de forma independente dos outros peers

  • Compartilha o mesmo pool de serviços Facematch

Gerenciamento de configuração

O projeto CDK configura automaticamente variáveis de ambiente e segredos para todos os serviços.

Variáveis de ambiente são definidas em src/cdk/allid/src/constructs/peer-construct.ts e incluem:

  • Conexão com o banco de dados (host, porta, nome do banco de dados)

  • Endpoint do serviço Facematch

  • URL do Serviço Router

  • Flags de recurso (RabbitMQ, Redis, comunicação com o Router)

Segredos são injetados via segredos da tarefa ECS e incluem:

  • Credenciais do banco de dados (geradas automaticamente pelo CDK)

  • Certificados mTLS do Router (criados com placeholders, devem ser atualizados manualmente)

Veja Configuração para a lista completa de variáveis de ambiente, valores necessários e detalhes de configuração.

Gerenciamento de segredos

O CDK cria automaticamente segredos no AWS Secrets Manager:

Convenção de nomenclatura dos segredos:

  • Credenciais do banco de dados: allid-database-secret-<random-suffix>

  • Certificados do Router: allid-peer-{name}-router-certificate (por exemplo, allid-peer-default-router-certificate)

Segurança

O CDK 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 somente de IPs na lista de permissões

  • Os Serviços Peer aceitam tráfego somente do ALB e da VPC interna

  • Facematch aceita tráfego somente dos Serviços Peer

  • O banco de dados aceita tráfego somente dos Serviços Peer

Lista de permissões de IP:

  • O ALB está configurado para aceitar tráfego somente de endereços IP do Certta Router

  • Configure IPs adicionais em src/cdk/allid/src/stacks/load-balancer-stack.ts

  • Lista completa de endereços IP do Certta Router

  • Recomendações de segmentação de rede

  • Melhores práticas de gerenciamento de segredos

  • Opções adicionais de endurecimento de segurança

Atualizando a implantação

Atualizar imagens de contêiner

  1. Atualize as versões das imagens em src/cdk/allid/cdk.json:

  1. Reimplante as stacks afetadas:

Atualizar variáveis de ambiente

  1. Edite as variáveis em src/cdk/allid/src/constructs/peer-construct.ts

  2. Reimplante a stack Peer:

Isso atualizará todas as instâncias peer (default, client-a, client-b) com a nova configuração.

Dimensionar serviços

Dimensionar Serviços Peer: Edite a contagem desejada em src/cdk/allid/src/constructs/peer-construct.ts:

Em seguida, reimplante:

Dimensionar o Serviço Facematch: Edite a contagem desejada em src/cdk/allid/src/stacks/facematch-stack.ts:

Em seguida, reimplante:

Adicionar/remover instâncias peer

Para adicionar uma nova instância peer:

  1. Edite a configuração do CDK em src/cdk/allid/src/stacks/peer-stack.ts:

  1. Implante a stack Peer atualizada:

O CDK criará automaticamente o segredo de certificado do Router com valores de placeholder.

  1. Crie e inicialize o banco de dados para o novo peer (veja a Etapa 5):

  1. Atualize o segredo de certificado do Router com certificados reais (veja a Etapa 6):

O novo Serviço Peer não conseguirá iniciar inicialmente (como na implantação inicial), mas ficará saudável automaticamente após você concluir as etapas 3 e 4 (inicialização do banco de dados e atualização do certificado).

Solução de problemas

A implantação falha com "VPC não encontrada"

Causa: ID da VPC não configurado corretamente em cdk.json ou a VPC não existe.

Solução:

  1. Verifique o ID da VPC:

    • Console da AWS: Navegue até o Console da VPC → Suas VPCs

    • Procure a VPC que você deseja usar e copie o ID da VPC

  2. Se você não tiver uma VPC, implante a infraestrutura compartilhada (veja a Etapa 2):

  1. Obtenha o ID da VPC:

    • Console da AWS: Console da VPC → Suas VPCs → encontre sua VPC

    • AWS CLI: Liste todas as VPCs:

  1. Atualize src/cdk/allid/cdk.json com o ID correto da VPC:

  1. Reimplante:

O Serviço Peer não iniciará

Verifique os logs do CloudWatch:

Console da AWS:

  1. Console do CloudWatch → Grupos de logs

  2. Encontre /ecs/allid/peer-default (ou peer-client-a, peer-client-b)

  3. Clique no fluxo de logs mais recente

  4. Procure mensagens de erro nos logs

AWS CLI:

Causas comuns:

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

  2. Certificados do Router não atualizados: Veja a Etapa 6 (atualize os segredos com certificados reais) - o CDK cria segredos com valores de placeholder que devem ser substituídos

  3. Falha na conexão com o banco de dados: Verifique os grupos de segurança e o endpoint do RDS

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

Verifique o motivo da parada da tarefa:

Console da AWS:

  1. Console ECS → Clusters → allid-cluster

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

  3. Vá para a aba "Tasks" → clique nas tarefas interrompidas

  4. Verifique o campo "Motivo da parada"

Falhas na verificação de saúde

Verifique o status do serviço ECS:

Console da AWS:

  1. Console ECS → Clusters → allid-cluster → Serviços

  2. Verifique o status de cada serviço

  3. Consulte a aba "Eventos" para mensagens recentes

Verificar a saúde dos destinos do ALB:

Console da AWS:

  1. Console do EC2 → Grupos de destino

  2. Encontre grupos de destino com allid prefixo

  3. Clique em cada grupo de destino

  4. Vá para a aba "Targets"

  5. Verifique o status de saúde dos destinos registrados (deve ser "healthy")

AWS CLI:

Problemas comuns:

  • Grupos de segurança bloqueando o tráfego entre o ALB e os serviços de peer

  • Serviço não registrado no Cloud Map (a resolução DNS falha)

  • Erros de conexão com o banco de dados (verifique o segredo das credenciais)

  • Serviço Facematch não está respondendo

Não é possível 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.

Verifique o grupo de segurança do ALB:

Console da AWS:

  1. Console do EC2 → Load Balancers → Encontre seu ALB

  2. Clique na aba "Security"

  3. Clique no grupo de segurança

  4. Verifique as "Inbound rules" - confirme que seu IP está permitido

Adicione seu IP à allowlist:

  1. Edite src/cdk/allid/src/stacks/load-balancer-stack.ts:

  1. Reimplante:

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 gerar custos:

Criar snapshot do banco de dados antes da limpeza (opcional):

Próximos passos

Atualizado