Este artigo responde perguntas frequentes sobre a CLI de Desenvolvedor do Azure.
Geral
Como desinstalar a CLI do Desenvolvedor do Azure?
Existem diferentes opções para desinstalar o azd
, dependendo da instalação original. Visite a página de instalação para obter detalhes.
Qual é a diferença entre a CLI do Desenvolvedor do Azure e a CLI do Azure?
A CLI do Desenvolvedor do Azure (azd
) e a CLI do Azure (az
) são ferramentas de linha de comando, mas ajudam você a realizar tarefas diferentes.
azd
concentra-se no fluxo de trabalho do desenvolvedor de alto nível. Além de provisionar/gerenciar os recursos do Azure, o azd
ajuda a unir componentes de nuvem, configuração de desenvolvimento local e automação de pipeline em uma solução completa.
A CLI do Azure é uma ferramenta de painel de controle para criar e administrar a infraestrutura do Azure, como máquinas virtuais, redes virtuais e armazenamento. A CLI do Azure foi projetada em torno de comandos granulares para tarefas administrativas específicas.
O que é um nome de ambiente?
O Azure Developer CLI usa um nome de ambiente para configurar a variável de ambiente AZURE_ENV_NAME
usada por modelos do Azure Developer CLI. AZURE_ENV_NAME também é usado como prefixo no nome do grupo de recursos do Azure. Como cada ambiente tem seu próprio conjunto de configurações, o Azure Developer CLI armazena todos os arquivos de configuração em diretórios de ambiente.
├── .Azure [This directory displays after you run add init or azd up]
│ ├── <your environment1> [A directory to store all environment-related configurations]
│ │ ├── .env [Contains environment variables]
│ │ └── main.parameters.json [A parameter file]
│ └── <your environment2> [A directory to store all environment-related configurations]
│ │ ├── .env [Contains environment variables]
│ │ └── main.parameters.json [A parameter file]
│ └──config.json
Posso configurar mais de um ambiente?
Sim. Você pode configurar vários ambientes (por exemplo, desenvolvimento, teste, produção). Você pode usar azd env
para gerenciar esses ambientes.
Onde o arquivo de configuração de ambiente (.env) é armazenado?
O caminho do arquivo .env é <your-project-directory-name>\.azure\<your-environment-name>\.env
.
Como o arquivo .env é usado?
Na CLI do Desenvolvedor do Azure, os comandos do azd
referem-se ao arquivo .env para configuração do ambiente. Comandos como azd deploy
também atualizam o arquivo .env, por exemplo, com a cadeia de conexão db e o ponto de extremidade do Azure Key Vault.
Eu executei "azd up" no Codespaces. Posso continuar meu trabalho em um ambiente de desenvolvimento local?
Sim. Você pode continuar o trabalho de desenvolvimento localmente.
- Execute
azd init -t <template repo>
para clonar o projeto de modelo no computador local. - Para extrair o ambiente existente criado com o Codespaces, execute
azd env refresh
. Forneça o mesmo nome de ambiente, assinatura e local de antes.
Como o arquivo azure.yaml é usado?
O arquivo azure.yaml descreve os aplicativos e os tipos de recursos do Azure incluídos no modelo.
Qual é o comportamento da função "secretOrRandomPassword"?
A função secretOrRandomPassword
recuperará um segredo do Azure Key Vault se forem fornecidos parâmetros para o nome e o segredo do cofre de chaves. Se esses parâmetros não forem fornecidos ou um segredo não puder ser recuperado, a função retornará uma senha gerada aleatoriamente.
O exemplo a seguir demonstra um caso de uso comum do secretOrRandomPassword
em um arquivo main.parameters.json
. As variáveis ${AZURE_KEY_VAULT_NAME}
e sqlAdminPassword
são transmitidas como parâmetros para os nomes do Key Vault e do segredo. Se o valor não puder ser recuperado, uma senha aleatória será gerada.
"sqlAdminPassword": {
"value": "$(secretOrRandomPassword ${AZURE_KEY_VAULT_NAME} sqlAdminPassword)"
}
A saída de secretOrRandomPassword
também deve ser salva no Key Vault usando o Bicep para execuções futuras. Recuperar e reutilizar os mesmos segredos em implantações pode evitar erros ou comportamentos não intencionais que podem surgir ao gerar novos valores repetidamente. Para criar um cofre de chaves e armazenar o segredo gerado nele, use o código do Bicep abaixo. Você pode exibir o código de exemplo completo para esses módulos no repositório GitHub da CLI do Desenvolvedor do Azure.
module keyVault './core/security/keyvault.bicep' = {
name: 'keyvault'
scope: resourceGroup
params: {
name: '${take(prefix, 17)}-vault'
location: location
tags: tags
principalId: principalId
}
}
module keyVaultSecrets './core/security/keyvault-secret.bicep' = {
name: 'keyvault-secret-sqlAdminPassword'
scope: resourceGroup
params: {
keyVaultName: keyVault.outputs.name
name: 'sqlAdminPassword'
secretValue: sqlAdminPassword
}
}]
Essa configuração do Bicep permite o seguinte fluxo de trabalho para gerenciar seus segredos:
- Se o segredo especificado existir, ele será recuperado do Key Vault usando a função
secretOrRandomPassword
. - Se o segredo não existir, um cofre de chaves será criado e o segredo gerado aleatoriamente será armazenado dentro dele.
- Em implantações futuras, o método
secretOrRandomPassword
recupera o segredo armazenado agora que existe no cofre de chaves. O cofre de chaves não será recriado se já existir, mas o mesmo valor secreto será armazenado novamente para a próxima execução.
Posso usar a assinatura gratuita do Azure?
Sim, mas cada local do Azure só pode ter uma implantação. Se você já tiver usado o local do Azure selecionado, verá o erro de implantação:
InvalidTemplateDeployment: The template deployment '<env_name>' isn't valid according to the validation procedure. The tracking ID is '<tracking_id>'. See inner errors for details.
Você pode selecionar um local diferente do Azure para corrigir o problema.
Meu aplicativo hospedado com o Serviço de Aplicativo do Azure está acionando o aviso "Site enganoso à frente". Como posso corrigir isso?
Isso pode acontecer devido ao nosso método de nomenclatura de recursos.
Os modelos criados pelo "Azure Dev" permitem configurar o nome do recurso. Para fazer isso, você pode adicionar uma entrada ao main.parameters.json
na pasta infra
. Por exemplo:
"webServiceName": {
"value": "my-unique-name"
}
Essa entrada cria um novo recurso chamado "my-unique-name" em vez de um valor aleatório, como "app-web-aj84u2adj", na próxima vez que você provisionar seu aplicativo. Você pode remover manualmente o grupo de recursos antigo usando o Portal do Azure ou executar azd down
para remover todas as implantações anteriores. Depois de remover os recursos, execute azd provision
para criá-los novamente com o novo nome.
Esse nome precisará ser globalmente exclusivo. Caso contrário, você receberá um erro do ARM durante azd provision
ao tentar criar o recurso.
Comando: azd provision
Como o comando sabe quais recursos provisionar?
O comando usa modelos do Bicep, que são encontrados em <your-project-directory-name>/infra
para provisionar recursos do Azure.
Onde encontrar quais recursos são provisionados no Azure?
Vá para https://portal.azure.com e procure seu grupo de recursos, que é rg-<your-environment-name>
.
Como encontrar mais informações sobre erros do Azure?
Usamos modelos do Bicep, que são encontrados em <your-project-directory-name>/infra
, para provisionar recursos do Azure. Se houver problemas, incluiremos a mensagem de erro na saída da CLI.
Você também pode acessar https://portal.azure.com e procurar seu grupo de recursos, que é rg-<your-environment-name>
. Se alguma das implantações falhar, selecione o link de erro para obter mais informações.
Para outros recursos, confira Solução de erros comuns de implantação do Azure - Azure Resource Manager.
Existe um arquivo de log para "azd provision"?
em breve. Esse recurso está previsto para uma versão futura.
Comando: azd deploy
Posso executar novamente este comando?
Sim.
Como o azd encontra o recurso do Azure para implantar meu código?
Durante a implantação, azd
primeiro detecta todos os grupos de recursos que compõem seu aplicativo procurando grupos marcados com azd-env-name
e com um valor que corresponda ao nome do seu ambiente. Em seguida, ele enumera todos os recursos em cada um desses grupos de recursos, procurando um recurso marcado com azd-service-name
com um valor que corresponda ao nome do seu serviço em azure.yaml
.
Embora seja recomendável usar tags em recursos, você também pode usar a propriedade resourceName
em azure.yaml
para fornecer um nome de recurso explícito. Nesse caso, a lógica acima não é executada.
Comando: azd up
Posso executar novamente "azd up"?
Sim. Usamos o modo de implantação incremental.
Como encontro o arquivo de log para "azd up"?
em breve. Esse recurso está previsto para uma versão futura.
Comando: azd pipeline
O que é uma entidade de serviço do Azure?
Uma entidade de serviço do Azure é uma identidade criada para uso com aplicativos, serviços hospedados e ferramentas automatizadas para acessar os recursos do Azure. Esse acesso é restrito pelas funções atribuídas à entidade de serviço, que oferece controle sobre quais recursos poderão ser acessados e em qual nível. Para obter mais informações sobre como autenticar do Azure para o GitHub, consulte Conectar o GitHub e o Azure | Microsoft Docs.
Preciso criar uma entidade de serviço do Azure antes de executar "azd pipeline config"?
Não. O comando azd pipeline config
cuida da criação da entidade de serviço do Azure e realiza as etapas necessárias para armazenar os segredos em seu repositório GitHub.
Quais são todos os segredos armazenados no GitHub?
O comando armazena quatro segredos no GitHub: AZURE_CREDENTIALS, AZURE_ENV_NAME, AZURE_LOCATION e AZURE_SUBSCRIPTION_ID. Você pode substituir o valor de cada segredo acessando https://github.com/<your-GH-account>/<your-repo>/secrets/actions
.
O que é OpenID Connect (OIDC)? Ele é compatível?
Com o OpenID Connect, seus fluxos de trabalho podem trocar tokens de curta duração diretamente do Azure.
Embora o OIDC tenha suporte como padrão para o GitHub Actions e Azure Pipeline (definido como federado), ele não tem suporte o para Azure DevOps ou Terraform.
- Para o Azure DevOps, chamar
--auth-type
explicitamente comofederated
resultará em um erro. - Para Terraform:
- Se
--auth-type
não estiver definido, ele retornará aclientcredentials
e resultará em um aviso. - Se
--auth-type
for explicitamente definido comofederated
, resultará em um erro.
- Se
Como redefinir a entidade de serviço do Azure armazenada no GitHub Actions?
Vá para https://github.com/<your-GH-account>/<your-repo>settings/secrets/actions
e atualize AZURE_CREDENTIALS
copiando e colando todo o objeto JSON para a nova entidade de serviço. Por exemplo:
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
Onde o arquivo do GitHub Actions é armazenado?
O caminho do arquivo do GitHub Actions é <your-project-directory-name>\.github\workflows\azure-dev.yml
.
No arquivo azure-dev.yml, posso implantar apenas o código na etapa de compilação?
Sim. Substitua run: azd up --no-prompt
por run: azd deploy --no-prompt
.
Onde posso encontrar o log do trabalho do GitHub Actions que acionei quando executei "azd pipeline config"?
Vá para https://github.com/<your-GH-account>/<your-repo>/actions
e consulte o arquivo de log na execução do fluxo de trabalho.
Criando um aplicativo de contêiner localmente
Por que não consigo executar localmente o aplicativo de contêiner que estou criando?
Ao criar aplicativos de contêiner localmente, você precisa executar azd auth login
no contêiner para que o aplicativo funcione com o AzureDeveloperCliCredential
. Como alternativa, você pode configurar seu aplicativo para usar uma entidade de serviço em vez do AzureDeveloperCliCredential
.