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.
As extensões comunicam com a CLI do Azure Developer (azd) através de uma ligação gRPC usando o azdext SDK. O SDK permite que a sua extensão leia dados do projeto e do ambiente, alerte o utilizador e ligue para azd serviços. Este artigo mostra-lhe como utilizar o SDK para melhorar a extensão de exemplo Contoso Resource Tagger do guia de início rápido Criar uma extensão de exemplo. Podes aplicar os mesmos padrões a qualquer extensão.
Note
azd As extensões estão atualmente em versão beta.
Como funciona a comunicação
Quando azd executa a sua extensão, inicia um servidor gRPC e passa dois valores à sua extensão através de variáveis de ambiente:
-
AZD_SERVER: O endereço do servidor gRPC, comolocalhost:12345. -
AZD_ACCESS_TOKEN: Um token de acesso JWT que autoriza as solicitações da sua extensão.
A sua extensão utiliza o SDK azdext para estabelecer ligação a este servidor e invocar os serviços azd. O token restringe cada pedido às capacidades que a sua extensão declara no manifest.
Criar um cliente azd
A função azdext.NewAzdClient cria um cliente que se liga a azd utilizando as variáveis de ambiente que azd fornece. Envolva o contexto de entrada com azdext.WithAccessToken para que o SDK anexe o token de acesso a cada pedido:
import (
"context"
"fmt"
"github.com/azure/azure-dev/cli/azd/pkg/azdext"
)
func run(ctx context.Context) error {
// Attach the AZD_ACCESS_TOKEN to outgoing requests.
ctx = azdext.WithAccessToken(ctx)
azdClient, err := azdext.NewAzdClient()
if err != nil {
return fmt.Errorf("failed to create azd client: %w", err)
}
defer azdClient.Close()
// Use azdClient to call azd services.
return nil
}
Ler dados do projeto e do ambiente
Use os serviços Projeto e Ambiente para ler informações sobre o projeto azd atual e o ambiente. Para a extensão de exemplo, leia o projeto para poder inspecionar os seus recursos e tags:
// Get the current project.
getProject, err := azdClient.Project().Get(ctx, &azdext.EmptyRequest{})
if err != nil {
return fmt.Errorf("failed to get project: %w", err)
}
fmt.Printf("Project name: %s\n", getProject.Project.Name)
fmt.Printf("Project path: %s\n", getProject.Project.Path)
// Get the current environment.
getEnv, err := azdClient.Environment().GetCurrent(ctx, &azdext.EmptyRequest{})
if err != nil {
return fmt.Errorf("failed to get environment: %w", err)
}
fmt.Printf("Environment name: %s\n", getEnv.Environment.Name)
Leia e escreva valores do ambiente
O serviço de Ambiente lê e escreve os valores do ambiente. Estes valores persistem no .azure diretório do projeto. Para a extensão de exemplo, armazene um valor de etiqueta obrigatório que o utilizador fornece:
// Read an environment value.
getValue, err := azdClient.Environment().GetValue(ctx, &azdext.GetEnvRequest{
EnvName: getEnv.Environment.Name,
Key: "CONTOSO_COST_CENTER",
})
if err == nil {
fmt.Printf("Cost center: %s\n", getValue.Value)
}
// Write an environment value.
_, err = azdClient.Environment().SetValue(ctx, &azdext.SetEnvRequest{
EnvName: getEnv.Environment.Name,
Key: "CONTOSO_COST_CENTER",
Value: "CC-1001",
})
if err != nil {
return fmt.Errorf("failed to set environment value: %w", err)
}
Avise o utilizador
O serviço Prompt fornece prompts consistentes e interativos que correspondem à experiência do azd utilizador. Para a extensão de exemplo, peça ao utilizador um valor de etiqueta em falta:
promptResponse, err := azdClient.Prompt().Prompt(ctx, &azdext.PromptRequest{
Options: &azdext.PromptOptions{
Message: "Enter the cost center tag value",
},
})
if err != nil {
return fmt.Errorf("failed to prompt for value: %w", err)
}
costCenter := promptResponse.Value
O serviço Prompt também suporta pedidos de seleção, pedidos de confirmação e pedidos de seleção múltipla. Utilize estas opções em vez de escrever o seu próprio processamento de entradas para que a sua extensão corresponda à aparência e ao comportamento de azd.
Serviços disponíveis
O azdext SDK expõe os seguintes serviços gRPC através do cliente:
| Service | Description |
|---|---|
| Projeto | Lê a configuração atual do projeto. |
| Ambiente | Lê e escreve ambientes e valores ambientais. |
| UserConfig | Lê e escreve a configuração ao nível do utilizador. |
| Implementação | Lê o contexto da implementação e os resultados. |
| Account | Lê informações de subscrição e localização do Azure. |
| Prompt | Apresenta pedidos interativos. |
| Modelo de IA | Interage com modelos de IA configurados. |
| Event | Subscreve-se a eventos do ciclo de vida. |
| Compose | Lê e modifica o conjunto composto de serviços e recursos. |
| Workflow | Executa azd fluxos de trabalho. |
| Telemetry | Reporta a utilização da extensão usando azdClient.Telemetry().ReportUsage. |
Para a lista completa de serviços e definições de mensagens, consulte os ficheiros proto no repositório azure-dev e a referência da estrutura de extensões.
Reportar erros
Devolve os erros dos processadores de comandos para que o azd os possa apresentar de forma consistente e definir o código de saída correto. Encapsule os erros com contexto utilizando fmt.Errorf e o verbo %w para que os chamadores possam inspecionar o erro subjacente:
if err != nil {
return fmt.Errorf("failed to apply tags: %w", err)
}