> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Midaz Terraform Foundation

> Provisione a infraestrutura base do Midaz na AWS, GCP ou Azure com templates Terraform: rede, cluster Kubernetes e datastores.

O repositório [Lerian Terraform Foundation](https://github.com/LerianStudio/lerian-terraform-foundation) guarda templates Terraform para a infraestrutura em que o Midaz roda: a rede, o cluster Kubernetes e os datastores. Ele oferece suporte a AWS, GCP e Azure. O repositório usa a [Elastic License 2.0](https://github.com/LerianStudio/lerian-terraform-foundation/blob/main/LICENSE).

## O que os templates criam

***

| Nuvem | Rede e cluster | Datastores para o Midaz |
| - | - | - |
| AWS | VPC com subnets públicas e privadas, Amazon EKS | PostgreSQL (Amazon RDS), Amazon DocumentDB, Valkey (Amazon ElastiCache), RabbitMQ (Amazon MQ) |
| GCP | VPC, Cloud DNS, GKE | PostgreSQL (Cloud SQL), Valkey (Memorystore) |
| Azure | Rede virtual, DNS, AKS | PostgreSQL (Azure Database for PostgreSQL flexible server), Azure Cache for Redis, Cosmos DB com a API do MongoDB |

> [!CAUTION]
>
> Na GCP, os templates não criam banco de dados compatível com MongoDB nem broker RabbitMQ. No Azure, eles não criam broker RabbitMQ. Provisione esses serviços por conta própria nessas nuvens.

Trate as classes de instância dos arquivos de exemplo como um ponto de partida, não como um plano de capacidade. Antes de um deploy em produção, revise as classes de instância, o armazenamento e os limites de conexão de acordo com o seu volume de transações. Depois leia a seção de informações importantes do README do repositório.

## AWS

***

Na AWS, você roda os templates com o Terraform e a CLI `aws`. Cada stack em `examples/aws/` é uma raiz Terraform separada, com o próprio estado, e você aplica as stacks uma de cada vez. A seção AWS do [README do repositório](https://github.com/LerianStudio/lerian-terraform-foundation#aws) traz cada comando.

Você precisa do Terraform 1.9.0 ou posterior e da CLI `aws`. Os passos depois do cluster também precisam do `kubectl` e do `helm`.

O deploy de um ambiente aplica estas stacks nesta ordem:

1. `bootstrap`: o bucket de estado e a tabela de lock. Aplique uma vez por ambiente.
2. `infra-base`: a VPC e depois o cluster EKS.
3. As stacks do Midaz em `examples/aws/products/midaz/`: `postgres`, `documentdb`, `valkey` e `rabbitmq`.

Cada stack do Midaz exporta `helm_values`, as configurações do chart que a stack consegue preencher. Nenhuma saída carrega uma senha. Cada stack de datastore guarda a senha no AWS Secrets Manager e exporta o nome do segredo. O External Secrets Operator, que você instala, copia a senha para um Secret do Kubernetes. A role IAM dele vem da stack `lerian-platform/eso`.

> [!NOTE]
>
> O Amazon MQ aceita apenas conexões AMQPS. Se você escrever os values por conta própria, defina `RABBITMQ_URI` como `amqps`.

## GCP e Azure

***

Na GCP e no Azure, um script interativo roda os templates. Cada diretório de componente tem seus próprios arquivos `backend.tf` e `midaz.tfvars`. Você precisa do Terraform e da CLI do seu provedor de nuvem: `gcloud` para GCP ou `az` para Azure.

**1. Crie o bucket de estado**

GCP:

```
gsutil mb -p PROJECT_ID -l REGION gs://BUCKET_NAME
gsutil versioning set on gs://BUCKET_NAME
```

Azure:

```
az group create --name RESOURCE_GROUP --location LOCATION
az storage account create --name STORAGE_ACCOUNT --resource-group RESOURCE_GROUP \
  --location LOCATION --sku Standard_LRS
az storage container create --name CONTAINER --account-name STORAGE_ACCOUNT
```

**2. Configure cada componente**

```
cd examples/<provider>/<component>
cp midaz.tfvars-example midaz.tfvars
```

Substitua os placeholders do `backend.tf` pelos dados do seu bucket de estado. Depois substitua os placeholders do `midaz.tfvars` pelos seus valores.

**3. Rode o script**

Na raiz do repositório, rode:

```
./deploy-legacy.sh
```

Selecione o provedor de nuvem e a ação: deploy ou destroy.

O script para antes de rodar o Terraform se um arquivo `backend.tf` ainda contém um placeholder. Ele faz o deploy de cada componente em uma ordem fixa e para na primeira falha. Um destroy roda na ordem inversa.

| Ordem | Componente | Diretório GCP | Diretório Azure |
| - | - | - | - |
| 1 | Rede | `vpc` | `network` |
| 2 | DNS | `cloud-dns` | `dns` |
| 3 | PostgreSQL | `cloud-sql` | `database` |
| 4 | Valkey ou Redis | `valkey` | `redis` |
| 5 | MongoDB | — | `cosmosdb` |
| 6 | Kubernetes | `gke` | `aks` |

## Autentique-se no seu provedor de nuvem

***

Use as ferramentas de autenticação da CLI do seu provedor de nuvem em vez de credenciais brutas:

```
aws sso login --profile your-profile
gcloud auth application-default login
az login
```

Siga as orientações do seu provedor de nuvem:

* **AWS**: [Managing AWS access keys](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html).
* **GCP**: [Managing service account keys](https://cloud.google.com/iam/docs/best-practices-for-managing-service-account-keys).
* **Azure**: [Identity management best practices](https://learn.microsoft.com/en-us/azure/security/fundamentals/identity-management-best-practices).

Não faça commit de credenciais no controle de versão.

## Instale o Midaz

***

Quando a infraestrutura estiver pronta, instale o Midaz no cluster com Helm. Na AWS, cada stack do Midaz exporta `helm_values`; na GCP e no Azure, leia os endpoints com `terraform output`. `helm_values` não é um arquivo de values para `helm -f`: ele lista configurações do chart, na maioria variáveis de ambiente, que você mesmo copia para os values do chart. Para as configurações do chart, veja o [README do chart do Midaz](https://github.com/LerianStudio/helm/tree/main/charts/midaz).

## Dicas de segurança

***

Para manter a infraestrutura do Midaz segura, siga estas recomendações:

* Use **clusters Kubernetes privados** para limitar a exposição pública. Os templates não criam uma VPN.
* Configure e **aplique RBAC** (Role-Based Access Control) para gerenciar as permissões dos usuários.
* Guarde todos os segredos no **serviço de gerenciamento de segredos** do provedor de nuvem.
* Dê às service accounts apenas as **permissões de que elas precisam**.

## Precisa de ajuda?

***

* Leia o README dentro do diretório em que você faz o deploy.
* Abra um ticket em [Lerian Clients](https://docs.lerian.studio/pt/products/midaz/lerian-support-portal.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.