Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Terraform permite a definição, visualização e implantação de infraestrutura em nuvem. Usando Terraform, você cria arquivos de configuração usando a sintaxe HCL. A sintaxe HCL permite especificar o provedor de nuvem - como o Azure - e os elementos que compõem sua infraestrutura de nuvem. Depois de criar os arquivos de configuração, você cria um plano de execução que permite visualizar as alterações na infraestrutura antes que elas sejam implantadas. Depois de verificar as alterações, você aplica o plano de execução para implantar a infraestrutura.
Use o fornecedor AzAPI Terraform para realizar operações de leitura apenas em recursos Azure como fonte de dados. Neste exemplo, lista Chaves do Azure Key Vault sem gerir o ciclo de vida delas.
- Crie um Key Vault e uma chave com AzureRM
- Usar
azapi_resource_actionpara listar as chaves
Pré-requisitos
- Assinatura do Azure: se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Configurar o Terraform: Se você ainda não tiver feito isso, configure o Terraform usando uma das seguintes opções:
Quando inicia sessão no portal do Azure com uma conta Microsoft, é utilizada a subscrição predefinida do Azure para essa conta.
O Terraform autentica automaticamente usando informações da assinatura padrão do Azure.
Execute az account show para verificar a conta Microsoft atual e a assinatura do Azure.
az account show
As alterações que fizer através do Terraform serão aplicadas à subscrição do Azure exibida. Se é isso que você quer, pule o resto deste artigo.
Implementar o código Terraform
Crie um diretório no qual testar o código Terraform de exemplo e torná-lo o diretório atual.
Crie um arquivo chamado
providers.tfe insira o seguinte código:terraform { required_providers { azapi = { source = "Azure/azapi" } } } provider "azapi" {} provider "azurerm" { features {} }Crie um arquivo chamado
main.tfe insira o seguinte código:resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { name = random_pet.rg_name.id location = var.resource_group_location } data "azurerm_client_config" "current" {} resource "random_string" "azurerm_key_vault_name" { length = 13 lower = true numeric = false special = false upper = false } locals { current_user_id = coalesce(var.msi_id, data.azurerm_client_config.current.object_id) } resource "azurerm_key_vault" "vault" { name = coalesce(var.vault_name, "vault-${random_string.azurerm_key_vault_name.result}") location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name tenant_id = data.azurerm_client_config.current.tenant_id sku_name = var.sku_name soft_delete_retention_days = 7 access_policy { tenant_id = data.azurerm_client_config.current.tenant_id object_id = local.current_user_id key_permissions = var.key_permissions secret_permissions = var.secret_permissions } } resource "random_string" "azurerm_key_vault_key_name" { length = 13 lower = true numeric = false special = false upper = false } resource "azurerm_key_vault_key" "key" { name = coalesce(var.key_name, "key-${random_string.azurerm_key_vault_key_name.result}") key_vault_id = azurerm_key_vault.vault.id key_type = var.key_type key_size = var.key_size key_opts = var.key_ops rotation_policy { automatic { time_before_expiry = "P30D" } expire_after = "P90D" notify_before_expiry = "P29D" } }Crie um arquivo chamado
variables.tfe insira o seguinte código:variable "resource_group_location" { type = string description = "Location for all resources." default = "eastus" } variable "resource_group_name_prefix" { type = string description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." default = "rg" } variable "vault_name" { type = string description = "The name of the key vault to be created. The value will be randomly generated if blank." default = "" } variable "key_name" { type = string description = "The name of the key to be created. The value will be randomly generated if blank." default = "" } variable "sku_name" { type = string description = "The SKU of the vault to be created." default = "standard" validation { condition = contains(["standard", "premium"], var.sku_name) error_message = "The sku_name must be one of the following: standard, premium." } } variable "key_permissions" { type = list(string) description = "List of key permissions." default = ["List", "Create", "Delete", "Get", "Purge", "Recover", "Update", "GetRotationPolicy", "SetRotationPolicy"] } variable "secret_permissions" { type = list(string) description = "List of secret permissions." default = ["Set"] } variable "key_type" { description = "The JsonWebKeyType of the key to be created." default = "RSA" type = string validation { condition = contains(["EC", "EC-HSM", "RSA", "RSA-HSM"], var.key_type) error_message = "The key_type must be one of the following: EC, EC-HSM, RSA, RSA-HSM." } } variable "key_ops" { type = list(string) description = "The permitted JSON web key operations of the key to be created." default = ["decrypt", "encrypt", "sign", "unwrapKey", "verify", "wrapKey"] } variable "key_size" { type = number description = "The size in bits of the key to be created." default = 2048 } variable "msi_id" { type = string description = "The Managed Service Identity ID. If this value isn't null (the default), 'data.azurerm_client_config.current.object_id' will be set to this value." default = null }Crie um arquivo chamado
outputs.tfe insira o seguinte código:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "azurerm_key_vault_name" { value = azurerm_key_vault.vault.name } output "azurerm_key_vault_id" { value = azurerm_key_vault.vault.id }Crie um arquivo chamado
main-generic.tfe insira o seguinte código:data "azapi_resource_action" "example" { type = "Microsoft.KeyVault/vaults@2023-07-01" resource_id = azurerm_key_vault.vault.id action = "listKeys" }
Inicializar o Terraform
Execute terraform init para inicializar a implantação do Terraform. Este comando baixa o provedor do Azure necessário para gerenciar seus recursos do Azure.
terraform init -upgrade
Pontos principais:
- O
-upgradeparâmetro atualiza os plug-ins de provedor necessários para a versão mais recente que está em conformidade com as restrições de versão da configuração.
Criar um plano de execução do Terraform
Execute o comando terraform plan para criar um plano de execução.
terraform plan -out main.tfplan
Pontos principais:
- O
terraform plancomando cria um plano de execução, mas não o executa. Em vez disso, ele determina quais ações são necessárias para criar a configuração especificada em seus arquivos de configuração. Esse padrão permite que você verifique se o plano de execução corresponde às suas expectativas antes de fazer quaisquer alterações nos recursos reais. - O parâmetro opcional
-outpermite especificar um arquivo de saída para o plano. O uso do-outparâmetro garante que o plano revisado seja exatamente o que é aplicado.
Aplicar plano de execução do Terraform
Execute terraform apply para aplicar o plano de execução à sua infraestrutura de nuvem.
terraform apply main.tfplan
Pontos principais:
- O comando de exemplo
terraform applypressupõe que anteriormente tenha executado oterraform plan -out main.tfplan. - Se você especificou um nome de arquivo diferente para o
-outparâmetro, use esse mesmo nome de arquivo na chamada paraterraform apply. - Se você não usou o
-outparâmetro, ligueterraform applysem nenhum parâmetro.
Verificar os resultados
Pontos principais:
- A lista de chaves é exibida na
terraform applysaída.
Clean up resources (Limpar recursos)
Quando você não precisar mais dos recursos criados via Terraform, execute as seguintes etapas:
Execute o terraform plan e especifique o
destroyflag.terraform plan -destroy -out main.destroy.tfplanPontos principais:
- O
terraform plancomando cria um plano de execução, mas não o executa. Em vez disso, ele determina quais ações são necessárias para criar a configuração especificada em seus arquivos de configuração. Esse padrão permite que você verifique se o plano de execução corresponde às suas expectativas antes de fazer quaisquer alterações nos recursos reais. - O parâmetro opcional
-outpermite especificar um arquivo de saída para o plano. O uso do-outparâmetro garante que o plano revisado seja exatamente o que é aplicado.
- O
Execute terraform apply para aplicar o plano de execução.
terraform apply main.destroy.tfplan
Solucionar problemas do Terraform no Azure
Solucionar problemas comuns ao usar o Terraform no Azure