Provisionamento local de Azure
.NET .NET Aspire simplifica o desenvolvimento local de aplicativos nativos para a nuvem com seu modelo de hospedagem de aplicativos eficaz. Esse modelo permite que você execute seu aplicativo localmente com a mesma configuração e serviços que em Azure. Neste artigo, você aprenderá a provisionar recursos Azure do seu ambiente de desenvolvimento local por meio do host do aplicativo .NET.NET Aspire.
Nota
Para ficar claro, os recursos são provisionados em Azure, mas o processo de provisionamento é iniciado a partir do seu ambiente de desenvolvimento local. Para otimizar sua experiência de desenvolvimento local, considere o uso de contêineres ou emuladores quando disponível. Para obter mais informações, consulte experiência típica do desenvolvedor.
Requisitos
Este artigo pressupõe que você tenha uma conta Azure e uma assinatura. Se você não tiver uma conta Azure, poderá criar uma gratuita em Azure conta gratuita. Para que a funcionalidade de provisionamento funcione corretamente, você precisará ser autenticado com Azure. Verifique se você tem o Azure Developer CLI instalado. Além disso, você precisará fornecer alguns valores de configuração para que a lógica de provisionamento possa criar recursos em seu nome.
APIs de provisionamento de host de aplicativo
O host do aplicativo fornece um conjunto de APIs para expressar Azure recursos. Essas APIs estão disponíveis como métodos de extensão em bibliotecas de hospedagem .NET AspireAzure, estendendo a interface IDistributedApplicationBuilder. Quando você adicionar recursos Azure ao host do aplicativo, eles implicitamente adicionarão a funcionalidade de provisionamento apropriada. Em outras palavras, você não precisa chamar nenhuma API de provisionamento diretamente.
Quando o host do aplicativo é iniciado, a seguinte lógica de provisionamento é executada:
- A seção de configuração
Azure
é validada. - Quando inválida, a saída do painel e do host do aplicativo fornece dicas sobre o que está faltando. Para mais informações, consulte as dicas sobre valores de configuração ausentes .
- Quando recursos válidos de Azure são provisionados condicionalmente:
- Se uma implantação Azure para um determinado recurso não existir, ela será criada e configurada como uma implantação.
- A configuração dessa implantação é carimbada com uma soma de verificação para garantir o provisionamento de recursos apenas conforme necessário.
Usar recursos de Azure existentes
O host do aplicativo gerencia automaticamente o provisionamento de recursos Azure. Na primeira vez que o host do aplicativo é executado, ele provisiona os recursos especificados no host do aplicativo. As execuções subsequentes não provisionam os recursos novamente, a menos que a configuração do host do aplicativo seja alterada.
Se você já provisionou Azure recursos fora do host do aplicativo e deseja usá-los, você pode fornecer a cadeia de conexão com a API AddConnectionString, conforme mostrado no seguinte exemplo Azure Key Vault:
// Service registration
var secrets = builder.ExecutionContext.IsPublishMode
? builder.AddAzureKeyVault("secrets")
: builder.AddConnectionString("secrets");
// Service consumption
builder.AddProject<Projects.ExampleProject>()
.WithReference(secrets)
O snippet de código anterior mostra como adicionar um Azure Key Vault ao host do aplicativo. A API AddAzureKeyVault é usada para adicionar o Azure Key Vault ao host do aplicativo. A API AddConnectionString
é usada para fornecer a cadeia de conexão ao host do aplicativo.
Como alternativa, para alguns recursos Azure, você pode optar por executá-los como um emulador com a API RunAsEmulator
. Essa API está disponível para integrações de Azure Cosmos DB e armazenamento Azure. Por exemplo, para executar AzureAzure Cosmos DB como um emulador, você pode usar o seguinte snippet de código:
var cosmos = builder.AddAzureCosmosDB("cosmos")
.RunAsEmulator();
A API RunAsEmulator configura um recurso Azure Cosmos DB a ser emulado usando o emulador Azure Cosmos DB com a API NoSQL.
.NET Aspire Azure integrações de hospedagem
Se você estiver usando recursos Azure no host do seu aplicativo, você está usando uma ou mais das integrações de hospedagem de .NET AspireAzure. Essas bibliotecas de hospedagem fornecem métodos de extensão à interface IDistributedApplicationBuilder para adicionar recursos Azure ao host do aplicativo.
Configuração
Ao utilizar recursos Azure em seu ambiente de desenvolvimento local, você precisa fornecer os valores de configuração necessários. Os valores de configuração são especificados na seção Azure
:
-
SubscriptionId
: ID da assinatura Azure. -
AllowResourceGroupCreation
: um valor booliano que indica se um novo grupo de recursos deve ser criado. -
ResourceGroup
: o nome do grupo de recursos a ser usado. -
Location
: a região Azure a utilizar.
Considere o seguinte exemplo de configuração appsettings.json:
{
"Azure": {
"SubscriptionId": "<Your subscription id>",
"AllowResourceGroupCreation": true,
"ResourceGroup": "<Valid resource group name>",
"Location": "<Valid Azure location>"
}
}
Importante
É recomendável armazenar esses valores como segredos do aplicativo. Para obter mais informações, consulte Gerenciar segredos do aplicativo.
Depois de configurar os valores necessários, você pode iniciar o provisionamento dos recursos Azure em seu ambiente de desenvolvimento local.
Azure repositório de credenciais de provisionamento
O host do aplicativo .NET Aspire usa um armazenamento de credenciais para autenticação e autorização de recursos do Azure. Dependendo da sua assinatura, o repositório de credenciais correto pode ser necessário para cenários de provisionamento multilocatário.
Com o pacote NuGet 📦Aspire. Hospedagem.Azure instalado e, caso o host do aplicativo dependa de recursos Azure, o repositório de credenciais padrão Azure depende do DefaultAzureCredential. Para alterar esse comportamento, você pode definir o valor do repositório de credenciais no arquivo appsettings.json, conforme mostrado no exemplo a seguir:
{
"Azure": {
"CredentialSource": "AzureCli"
}
}
Assim como acontece com todas as configurações baseadas em configuração , você pode configurá-las com provedores alternativos, como segredos do usuário ou variáveis de ambiente . O valor Azure:CredentialSource
pode ser definido como um dos seguintes valores:
-
AzureCli
: Delegados ao AzureCliCredential. -
AzurePowerShell
: Delegados para o AzurePowerShellCredential. -
VisualStudio
: Delegados ao VisualStudioCredential. -
VisualStudioCode
: Delegados para o VisualStudioCodeCredential. -
AzureDeveloperCli
: Delegados ao AzureDeveloperCliCredential. -
InteractiveBrowser
: Delegados ao InteractiveBrowserCredential.
Dica
Para obter mais informações sobre a autenticação e autorização do SDK Azure, consulte cadeias de credenciais na biblioteca de identidades do Azure para .NET.
Suporte a ferramentas
No Visual Studio, você pode usar os Serviços Conectados para definir as configurações de provisionamento de Azure padrão. Selecione o projeto de host do aplicativo, clique com o botão direito do mouse no nó Serviços Conectados e selecione Azure Configurações de Provisionamento de Recursos:
Isso abrirá uma caixa de diálogo na qual você pode definir as configurações de provisionamento Azure, conforme mostrado na seguinte captura de tela:
Dicas de valor de configuração ausentes
Quando a seção de configuração Azure
está ausente, tem valores ausentes ou é inválida, o painel .NET.NET Aspire fornece dicas úteis. Por exemplo, considere um hospedeiro de aplicativo que não possui o valor de configuração SubscriptionId
e tenta usar um recurso Azure Key Vault. A página Recursos indica o Estado como configuração de assinatura ausente:
Além disso, os logs do Console do também exibir essas informações, considere a seguinte captura de tela:
Limitações conhecidas
Depois de provisionar os recursos Azure dessa forma, você deve limpar manualmente os recursos no portal do Azure, já que .NET Aspire não fornece um mecanismo interno para excluir os recursos Azure. A maneira mais fácil de fazer isso é excluindo o grupo de recursos configurado. Isso pode ser feito no portal Azure ou usando a CLI do Azure:
az group delete --name <ResourceGroupName>
Substitua <ResourceGroupName>
pelo nome do grupo de recursos que você deseja excluir. Para obter mais informações, consulte az group delete.