Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os recursos definem o que uma extensão da CLI do Desenvolvedor do Azure (azd) pode fazer, desde a adição de comandos personalizados até a conexão no ciclo de vida da implantação. Este artigo mostra como adicionar recursos à extensão de exemplo contoso Resource Tagger do início rápido de compilação de uma extensão de exemplo. Você pode aplicar os mesmos padrões a qualquer extensão.
Cada funcionalidade requer duas coisas: uma entrada na capabilities matriz do manifesto de extensão e a implementação correspondente em seu código de extensão.
Note
azd as extensões estão atualmente na versão beta.
Funcionalidades disponíveis
azd as extensões podem declarar os seguintes recursos:
-
custom-commands: adiciona novos comandos e grupos de comandos aoazdnamespace da sua extensão. Por exemplo, a extensão de exemplo adicionaazd tagger show. Use essa funcionalidade para expor tarefas que os usuários executam diretamente da linha de comando. -
lifecycle-events: Assina os eventos queazdaciona durante a execução, comopreprovision,postprovisionoupostdeploy. Sua extensão executa a lógica personalizada nesses pontos sem que o usuário a chame diretamente. Por exemplo, a extensão de exemplo verifica a presença das tags necessárias empreprovisionantes que qualquer recurso seja criado. -
service-target-provider: registra um novo destino de implantação para queazdsaiba como empacotar e implantar um serviço em um host ao qual ele não oferece suporte nativamente. Um destino de serviço corresponde ao valorhostemazure.yaml. Por exemplo, você pode adicionar um provedor que implanta um serviço a uma plataforma de terceiros ou a um ambiente de hospedagem interno. -
framework-service-provider: registra o suporte para um idioma ou estrutura, portantoazd, sabe como restaurar, compilar e empacotar esse tipo de projeto. Isso corresponde ao valorlanguageemazure.yaml. Por exemplo, você pode adicionar suporte de build para um idioma queazdnão reconhece por padrão. -
provisioning-provider: substitui comoazdprovisiona a infraestrutura duranteazd provisioneazd up. Em vez do fluxo integrado do Bicep ou do Terraform, sua extensão define o que acontece. Por exemplo, você pode integrar uma ferramenta de infraestrutura como código diferente ou uma API de implantação personalizada. -
validation-provider: adiciona verificações ao pipeline de validaçãoazd, que é executado em um projeto ou ambiente. Por exemplo, você pode verificar se as convenções de nomenclatura, as marcas necessárias ou as configurações de segurança estão em vigor antes que uma implantação continue. -
mcp-server: Expõe os recursos da sua extensão como ferramentas MCP (Protocolo de Contexto do Modelo) que agentes de IA, como o GitHub Copilot, podem descobrir e invocar. Por exemplo, a extensão de exemplo pode expor a ferramentasuggest_tags. Para obter mais informações, consulte Adicionar um servidor MCP a uma extensão. -
metadata: fornece metadados mais completos sobre comandos e configuração queazdusa para descrever sua extensão, como descrições detalhadas de comandos e dicas de configuração apresentadas na saída da ajuda e no IntelliSense.
Este artigo se concentra nos dois recursos mais comuns: comandos personalizados e eventos de ciclo de vida. Para obter a mcp-server funcionalidade, consulte Adicionar um servidor MCP a uma extensão. Para obter detalhes completos sobre os recursos do provedor, consulte a referência da estrutura de extensão.
Adicionar comandos personalizados
A custom-commands funcionalidade permite que sua extensão registre novos comandos em um namespace em azd. A extensão de exemplo já usa essa funcionalidade para o azd tagger show comando.
Declare a funcionalidade em
extension.yaml.capabilities: - custom-commandsCrie seus comandos usando o
azdext.NewExtensionRootCommandauxiliar, que registra os sinalizadores padrãoazde a manipulação de variáveis de ambiente para que você não precise declará-los manualmente:import "github.com/azure/azure-dev/cli/azd/pkg/azdext" func NewRootCommand() *cobra.Command { rootCmd, extCtx := azdext.NewExtensionRootCommand(azdext.ExtensionCommandOptions{ Name: "tagger", Use: "tagger <command> [options]", Short: "Standardize and report Azure resource tags.", }) rootCmd.AddCommand(newShowCommand(extCtx)) // Add other subcommands here. return rootCmd }O auxiliar retorna um
*ExtensionContextque expõe os valores resolvidos dos sinalizadores padrão, comoEnvironmenteOutputFormat. Passe o contexto para seus subcomandos e leia a partir dele nos manipuladoresRunEdeles, em vez de redeclarar as flags padrão.
Inscrever-se em eventos de ciclo de vida
A lifecycle-events funcionalidade permite que sua extensão execute a lógica personalizada durante eventos de ciclo de vida de projeto e serviço, como preprovision ou postdeploy. Para a extensão de exemplo, use um evento preprovision para verificar se as tags obrigatórias estão definidas antes que azd provisione quaisquer recursos.
Declare a funcionalidade em
extension.yaml.capabilities: - custom-commands - lifecycle-eventsAdicione um
listencomando à sua extensão.azdinvoca esse comando para estabelecer a conexão bidirecional usada para eventos. Use oazdext.NewExtensionHostbuilder para registrar seus manipuladores de eventos:func newListenCommand() *cobra.Command { return &cobra.Command{ Use: "listen", Short: "Starts the extension and listens for azd events.", Hidden: true, RunE: func(cmd *cobra.Command, args []string) error { ctx := azdext.WithAccessToken(cmd.Context()) azdClient, err := azdext.NewAzdClient() if err != nil { return fmt.Errorf("failed to create azd client: %w", err) } defer azdClient.Close() host := azdext.NewExtensionHost(azdClient). WithProjectEventHandler( "preprovision", func(ctx context.Context, args *azdext.ProjectEventArgs) error { fmt.Printf("Verifying required tags for project: %s\n", args.Project.Name) // Add your tag validation logic here. return nil }, ) // Run blocks until azd closes the connection. if err := host.Run(ctx); err != nil { return fmt.Errorf("failed to run extension: %w", err) } return nil }, } }Registre o comando
listenno comando raiz:rootCmd.AddCommand(newListenCommand())
Quando um usuário executa azd provision ou azd up, azd invoca sua extensão e chama o manipulador preprovision antes de provisionar recursos.
Filtrar eventos de serviço
Os manipuladores de eventos de serviço dão suporte à filtragem opcional para que você trate apenas tipos de serviço específicos. Por exemplo, você pode lidar com o evento prepackage somente para serviços de aplicativo de contêiner do Python:
host := azdext.NewExtensionHost(azdClient).
WithServiceEventHandler(
"prepackage",
func(ctx context.Context, args *azdext.ServiceEventArgs) error {
fmt.Printf("Packaging service: %s\n", args.Service.Name)
return nil
},
&azdext.ServiceEventOptions{
Host: "containerapp",
Language: "python",
},
)
Recompilar e testar
Depois de adicionar uma funcionalidade, recompile a extensão e teste o novo comportamento:
Se você estiver usando o observador, suas alterações serão recriadas automaticamente. Caso contrário, crie manualmente:
azd x buildTeste a funcionalidade. Para eventos de ciclo de vida, execute um comando que dispara o evento, como
azd provision.