https://github.com/edneimonteiro/internal-apim
Azure API Management Internal (VNet) — Terraform reference with CAF naming, private DNS and private endpoints
https://github.com/edneimonteiro/internal-apim
apim azure caf infrastructure-as-code networking private-dns terraform tutorial vnet
Last synced: 11 days ago
JSON representation
Azure API Management Internal (VNet) — Terraform reference with CAF naming, private DNS and private endpoints
- Host: GitHub
- URL: https://github.com/edneimonteiro/internal-apim
- Owner: EdneiMonteiro
- License: mit
- Created: 2026-05-20T02:31:06.000Z (28 days ago)
- Default Branch: main
- Last Pushed: 2026-05-30T23:50:43.000Z (17 days ago)
- Last Synced: 2026-05-31T01:13:29.127Z (17 days ago)
- Topics: apim, azure, caf, infrastructure-as-code, networking, private-dns, terraform, tutorial, vnet
- Language: HCL
- Size: 49.8 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Citation: CITATION.cff
- Support: SUPPORT.md
Awesome Lists containing this project
README
# Internal APIM no Azure
[](https://orcid.org/0009-0006-0765-4201)
[](LICENSE)
[](#)
[](https://github.com/EdneiMonteiro/internal-apim/commits)
Tutorial completo de como provisionar um **Azure API Management** em modo **Internal VNet** — com explicação dos pré-requisitos, passo-a-passo via Portal e **Infrastructure as Code (Terraform)** pronto para uso.
> ⚠️ Este repositório é um **tutorial / prova de conceito**. Antes de usar em produção, revise: segurança, escalabilidade, observabilidade, custos e conformidade. Veja [DISCLAIMER.md](./DISCLAIMER.md) e [SUPPORT.md](./SUPPORT.md).
> 📖 Baseado na documentação oficial: [Deploy your Azure API Management instance to a virtual network — internal mode](https://learn.microsoft.com/en-us/azure/api-management/api-management-using-with-internal-vnet)
>
> 🏷️ Convenção de nomenclatura: [Cloud Adoption Framework — Resource abbreviations](https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/resource-abbreviations)
---
## 🎯 O que você vai aprender
- Diferença entre os modos **External** e **Internal** de VNet integration do APIM.
- Quais recursos do Azure são pré-requisito para um APIM Internal.
- Como configurar **NSG**, **Subnet** e **DNS** para que tudo funcione.
- **Por que NÃO criar Private DNS Zone em `azure-api.net`** (mesmo em sub-FQDN) e como usar **custom domain** em um TLD privado.
- Como provisionar o ambiente via **Portal Azure** (visual) **ou** **Terraform** (IaC).
- Como validar que o APIM está respondendo no VIP privado.
---
## 🧭 Índice
| # | Documento | Conteúdo |
|---|-----------|----------|
| 1 | [Pré-requisitos](docs/01-pre-requisitos.md) | SKU, permissões, recursos necessários |
| 2 | [Arquitetura](docs/02-arquitetura.md) | Diagrama, decisões e nomenclatura CAF |
| 3 | [Tutorial — Portal Azure](docs/03-tutorial-portal.md) | Passo-a-passo manual via portal |
| 4 | [Tutorial — Terraform](docs/04-tutorial-terraform.md) | Provisão via IaC |
| 5 | [Configuração de DNS](docs/05-configuracao-dns.md) | **Custom domain + Private DNS em `.internal`** (não toca `azure-api.net`) |
| 6 | [Validação](docs/06-validacao.md) | Como testar o gateway interno |
| 7 | [Cleanup](docs/07-cleanup.md) | Como destruir o ambiente |
| 8 | [Evidência da validação](docs/08-evidencia-validacao.md) | Saída real do `terraform apply` (validado em Brazil South) |
---
## ⚡ Quick start (Terraform)
> Requer **Terraform ≥ 1.5**, **Azure CLI** logado e um **publisher e-mail** válido.
```bash
git clone https://github.com/EdneiMonteiro/internal-apim.git
cd internal-apim/terraform
# 1. Configure variáveis
cp terraform.tfvars.example terraform.tfvars
# Edite terraform.tfvars com publisher_email, subscription, owner, cert_password etc.
# 2. Faça login no Azure
az login
az account set --subscription
# 3. Provisione (⚠️ APIM Developer leva ~30-45 minutos)
terraform init
terraform plan -out=tfplan
terraform apply tfplan
```
Ao final você terá:
| Recurso | Nome (default) | Abreviação CAF |
|---------|----------------|----------------|
| Resource Group | `rg-internal-dev-brs` | `rg` |
| Virtual Network | `vnet-internal-dev-brs` | `vnet` |
| Subnet | `snet-apim-dev` | `snet` |
| Network Security Group | `nsg-apim-dev-brs` | `nsg` |
| API Management | `apim-internal-owner-dev` | `apim` |
| Log Analytics Workspace | `log-internal-dev-brs` | `log` |
| Application Insights | `appi-internal-dev-brs` | `appi` |
| Private DNS Zone | `api.internal` | — |
E o APIM acessível via `https://apim.api.internal` (somente de dentro da VNet).
---
## ✅ Status da validação
> Este tutorial foi **validado com uma execução real** em `Brazil South` usando a SKU `Developer_1`. Veja a saída completa em [docs/08-evidencia-validacao.md](docs/08-evidencia-validacao.md).
>
> - `provisioningState = Succeeded`
> - `vnetType = Internal`
> - Custom domain configurado em `api.internal` (sem zonas em `azure-api.net`)
> - Cert self-signed gerado pelo Terraform via provider `tls` + `chilicat/pkcs12`
---
## 🛡️ Licença
Este projeto está licenciado sob os termos da licença incluída em [LICENSE](LICENSE).
---
## Suporte e Aviso Legal
- Sem SLA nem suporte oficial. Veja [SUPPORT.md](./SUPPORT.md).
- Uso sujeito a [DISCLAIMER.md](./DISCLAIMER.md).
- **Não afiliado nem endossado pela Microsoft.** Marcas usadas apenas para descrição.