Configurar o Terraform no Azure Cloud Shell com o Bash
O Terraform permite a definição, a visualização e a implantação da infraestrutura de nuvem. Usando o Terraform, você cria arquivos de configuração usando sintaxe de HCL. A sintaxe da HCL permite que você especifique 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 de infraestrutura antes de serem implantadas. Depois de verificar as alterações, aplique o plano de execução para implantar a infraestrutura.
Este artigo apresenta as opções para você se autenticar no Azure para uso com o Terraform.
Neste artigo, você aprenderá como:
- Configurar o Cloud Shell
- Exibir a conta do Azure atual
- Entender os cenários de autenticação comuns do Terraform e do Azure
- Autenticar usando uma conta Microsoft do Cloud Shell (usando o Bash ou o PowerShell)
- Autenticar usando uma conta Microsoft do Windows (usando o Bash ou o PowerShell)
- Criar uma entidade de serviço usando a CLI do Azure
- Criar uma entidade de serviço usando o Azure PowerShell
- Especificar credenciais da entidade de serviço em variáveis de ambiente
- Especificar credenciais de entidade de serviço em um bloco de provedor do Terraform
1. Configurar seu ambiente
- Assinatura do Azure: caso você não tenha uma assinatura do Azure, crie uma conta gratuita antes de começar.
2. Abrir o Cloud Shell
Se você já tem uma sessão do Cloud Shell aberta, pode pular para a próxima seção.
Navegue para o portal do Azure
Se necessário, faça logon em sua assinatura do Azure e altere o diretório do Azure.
Abra o Azure Cloud Shell.
Se você ainda não usou o Cloud Shell, defina as configurações de ambiente e armazenamento.
Selecione o ambiente de linha de comando.
3. Instalar a versão mais recente do Terraform no Azure Cloud Shell
O Cloud Shell é atualizado automaticamente para a versão mais recente do Terraform. No entanto, as atualizações chegam dentro de algumas semanas após o lançamento. Este artigo mostra como baixar e instalar a versão atual do Terraform.
Determine a versão do Terraform usada no Cloud Shell.
terraform version
Se a versão do Terraform instalada no Cloud Shell não for a mais recente, você verá uma mensagem indicando que a versão do Terraform está desatualizada.
Se você estiver satisfeito trabalhando com a versão indicada, pule para a próxima seção. Caso contrário, continue com as etapas a seguir.
Navegue até a página de downloads do Terraform.
Role para baixo até os links de download do Linux.
Mova o mouse sobre o link de 64 bits. Este link é para a versão mais recente do Linux AMD de 64 bits, que é apropriada para o Cloud Shell.
Copie a URL.
Execute
curl
substituindo o espaço reservado pela URL da etapa anterior.curl -O <terraform_download_url>
Descompacte o arquivo .
unzip <zip_file_downloaded_in_previous_step>
Se o diretório não existir, crie um chamado
bin
.mkdir bin
Mova o arquivo
terraform
para o diretóriobin
.mv terraform bin/
Feche e reinicie o Cloud Shell.
Verifique se a versão baixada do Terraform é a primeira no caminho.
terraform version
4. Verificar a assinatura padrão do Azure
Quando você faz logon no portal do Azure com um conta Microsoft, a assinatura padrão do Azure para essa conta é usada.
O Terraform é autenticado automaticamente usando informações da assinatura padrão do Azure.
Execute az account show para verificar a conta Microsoft e a assinatura do Azure atuais.
az account show
Todas as alterações feitas por meio do Terraform estão na assinatura do Azure exibida. Se isso é o que você deseja, ignore o restante deste artigo.
5. Autenticar o Terraform no Azure
Cenários de autenticação do Terraform e do Azure
O Terraform dá suporte à autenticação no Azure somente por meio da CLI do Azure. Não há suporte para a autenticação usando o Azure PowerShell. Portanto, embora possa usar o módulo do Azure PowerShell ao realizar seu trabalho do Terraform, primeiro você precisa se autenticar no Azure usando a CLI do Azure.
Este artigo explica como autenticar o Terraform no Azure para os cenários a seguir. Para saber mais sobre as opções para autenticar o Terraform no Azure, confira Autenticando com a CLI do Azure.
- Autenticar por meio de uma conta Microsoft usando o Cloud Shell (com Bash ou PowerShell)
- Autenticar por meio de uma conta Microsoft usando o Windows (com Bash ou PowerShell)
- Autenticar por meio de uma entidade de serviço:
- Se você não tem uma entidade de serviço, crie uma.
- Autenticar no Azure usando variáveis de ambiente ou Autenticar no Azure usando o bloco do provedor do Terraform
Autenticar no Azure por meio de uma conta Microsoft
Uma conta da Microsoft é um nome de usuário (associado a um e-mail e suas credenciais) que é usado para entrar nos serviços da Microsoft, como o Azure. Uma conta Microsoft pode ser associada a uma ou mais assinaturas do Azure, com uma delas sendo a assinatura padrão.
As etapas a seguir mostram como:
- Entre no Azure interativamente usando uma conta da Microsoft
- Listar as assinaturas associadas do Azure da conta (incluindo o padrão)
- Define a assinatura atual.
Abra uma linha de comando que tenha acesso à CLI do Azure.
Execute o az login sem nenhum parâmetro e siga as instruções para entrar no Azure.
az login
Pontos principais:
- Após o login bem-sucedido,
az login
exibe uma lista das assinaturas do Azure associadas à conta Microsoft conectada, incluindo a assinatura padrão.
- Após o login bem-sucedido,
Para confirmar a assinatura atual do Azure, execute az account show.
az account show
Para exibir todos os nomes e IDs de assinatura do Azure de uma conta Microsoft específica, execute az account list.
az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
Pontos principais:
- Substitua o espaço reservado
<microsoft_account_email>
pelo endereço de email da conta Microsoft cujas assinaturas do Azure você deseja listar. - Com uma conta Live –por exemplo, do Hotmail ou Outlook–, talvez seja necessário especificar o endereço de email totalmente qualificado. Por exemplo, se o endereço de email for
admin@hotmail.com
, talvez seja necessário substituir o espaço reservado porlive.com#admin@hotmail.com
.
- Substitua o espaço reservado
Para usar uma assinatura do Azure específica, execute az account set.
az account set --subscription "<subscription_id_or_subscription_name>"
Pontos principais:
- Substitua o espaço reservado
<subscription_id_or_subscription_name>
pela ID ou pelo nome da assinatura que deseja usar. - A chamada a
az account set
não exibe os resultados da alternância para a assinatura especificada do Azure. No entanto, você pode usaraz account show
para confirmar se a assinatura atual do Azure foi alterada. - Se executar o comando
az account list
da etapa anterior, você verá que a assinatura do Azure padrão foi alterada para a assinatura especificada comaz account set
.
- Substitua o espaço reservado
Criar uma entidade de serviço
Ferramentas automatizadas que implantam ou usam os serviços do Azure, como o Terraform, sempre têm permissões restritas. Em vez de fazer com que os aplicativos entrem como um usuário totalmente privilegiado, o Azure oferece entidades de serviço.
O padrão mais comum é fazer login interativamente no Azure, criar uma entidade de serviço, testar a entidade de serviço e, em seguida, usar essa entidade de serviço para autenticação futura (interativamente ou a partir de seus scripts).
Para criar uma entidade de serviço, entre no Azure. Volte para este ponto após autenticar no Azure usando uma conta Microsoft.
Se estiver criando uma entidade de serviço do Git Bash, defina a variável de ambiente
MSYS_NO_PATHCONV
. (Essa etapa não é necessária se você estiver usando o Cloud Shell).export MSYS_NO_PATHCONV=1
Pontos principais:
- Você pode definir a variável de ambiente
MSYS_NO_PATHCONV
globalmente (para todas as sessões de terminal) ou localmente (apenas para a sessão atual). Como a criação de uma entidade de serviço não é algo que você faz com frequência, o exemplo define o valor para a sessão atual. Para definir essa variável de ambiente globalmente, adicione a configuração ao arquivo~/.bashrc
.
- Você pode definir a variável de ambiente
Para criar uma entidade de serviço, execute az ad sp create-for-rbac.
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
Pontos principais:
- Você pode substituir
<service-principal-name>
por um nome personalizado para o ambiente ou omitir totalmente o parâmetro. Se você omitir o parâmetro, o nome da entidade de serviço será gerado com base na data e hora atuais. - Após a conclusão bem-sucedida,
az ad sp create-for-rbac
exibe vários valores. Os valoresappId
,password
etenant
são usados na próxima etapa. - Se for perdida, a senha não poderá ser recuperada. Por isso, você deve armazenar sua senha em um local seguro. Se esquecer a senha, redefina as credenciais da entidade de serviço.
- Para este artigo, uma entidade de serviço com a função de Colaborador está sendo usada. Para obter mais informações sobre as funções de Controle de acesso baseado em função (RBAC), consulte RBAC: funções internas.
- A saída da criação da entidade de serviço inclui credenciais confidenciais. Não inclua essas credenciais no código nem faça check-in delas no controle do código-fonte.
- Para obter mais informações sobre as opções ao criar uma entidade de serviço com a CLI do Azure, confira o artigo Criar uma entidade de serviço do Azure com a CLI do Azure.
- Você pode substituir
Especificar credenciais da entidade de serviço em variáveis de ambiente
Após criar uma entidade de serviço, você pode especificar as credenciais dela para o Terraform por meio de variáveis de ambiente.
Edite o arquivo
~/.bashrc
adicionando as variáveis de ambiente a seguir.export ARM_SUBSCRIPTION_ID="<azure_subscription_id>" export ARM_TENANT_ID="<azure_subscription_tenant_id>" export ARM_CLIENT_ID="<service_principal_appid>" export ARM_CLIENT_SECRET="<service_principal_password>"
Para executar o script
~/.bashrc
, executesource ~/.bashrc
(ou seu equivalente abreviado. ~/.bashrc
). Você também pode sair e reabrir o Cloud Shell para que o script seja executado automaticamente.. ~/.bashrc
Após as variáveis de ambiente terem sido definidas, você pode verificar os valores delas da seguinte forma:
printenv | grep ^ARM*
Pontos principais:
- Assim como ocorre com qualquer variável de ambiente, para acessar um valor de assinatura do Azure de dentro de um script do Terraform, use a seguinte sintaxe:
${env.<environment_variable>}
. Por exemplo, para acessar o valorARM_SUBSCRIPTION_ID
, especifique${env.ARM_SUBSCRIPTION_ID}
. - Criar e aplicar planos de execução do Terraform faz alterações na assinatura do Azure associada à entidade de serviço. Às vezes, isso pode ser confuso quanto você está conectado a uma assinatura do Azure e as variáveis de ambiente apontam para outra. Vejamos uma explicação no exemplo a seguir. Digamos que você tenha duas assinaturas do Azure: SubA e SubB. Se a assinatura atual do Azure é a SubA (determinada por meio de
az account show
) enquanto as variáveis de ambiente apontam para SubB, as alterações feitas pelo Terraform estão na SubB. Portanto, você precisaria fazer logon na assinatura SubB para executar comandos da CLI do Azure ou do Azure PowerShell para exibir as alterações.
Especificar credenciais de entidade de serviço em um bloco de provedor do Terraform
O bloco do provedor do Azure define a sintaxe que permite especificar as informações de autenticação de sua assinatura do Azure.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>2.0"
}
}
}
provider "azurerm" {
features {}
subscription_id = "<azure_subscription_id>"
tenant_id = "<azure_subscription_tenant_id>"
client_id = "<service_principal_appid>"
client_secret = "<service_principal_password>"
}
# Your code goes here
Cuidado
A possibilidade de especificar as credenciais de assinatura do Azure em um arquivo de configuração do Terraform pode ser conveniente, especialmente ao fazer testes. No entanto, não é aconselhável armazenar credenciais em um arquivo de texto claro que possa ser visualizado por pessoas não confiáveis.
Solucionar problemas do Terraform no Azure
Solucionar problemas comuns ao usar o Terraform no Azure
Próximas etapas
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de