Uzantı özellikleri ekleme

Özellikler, özel komutlar eklemeden dağıtım yaşam döngüsüne bağlanmaya kadar bir Azure Geliştirici CLI (azd) uzantısının neler yapabileceğini tanımlar. Bu makalede, Örnek uzantı oluşturma hızlı başlangıcından Contoso Resource Tagger örnek uzantısına nasıl özellik ekleyebileceğiniz gösterilmektedir. Aynı desenleri herhangi bir uzantıya uygulayabilirsiniz.

Her özellik iki şey gerektirir: capabilities dizisindeki bir giriş ve uzantı kodunuzda buna karşılık gelen uygulama.

Note

azd Uzantı çerçevesi genel olarak kullanılabilir. Tek tek uzantıların veya özelliklerin kendi önizleme durumları olabilir. GA ayrıntıları için bkz. Genel Kullanıma Sunuldu: Azure Developer CLI (azd) Uzantı Çerçevesi.

Kullanılabilir özellikler

azd uzantılar aşağıdaki özellikleri bildirebilir:

  • custom-commands: Uzantınızın ad alanı altına yeni komutlar ve komut grupları azd ekler. Örneğin, örnek uzantı azd tagger show ekler. Kullanıcıların doğrudan komut satırından çalıştıracakları görevleri kullanıma açmak için bu özelliği kullanın.
  • lifecycle-events: Çalışırken azd tarafından tetiklenen, preprovision, postprovision veya postdeploy gibi olaylara abone olur. Uzantınız, kullanıcı doğrudan çağırmadan bu noktalarda özel mantık çalıştırır. Örneğin, örnek uzantı herhangi bir kaynak oluşturulmadan önce gerekli preprovision etiketleri denetler.
  • service-target-provider: Yeni bir dağıtım hedefi kaydeder; böylece azd, kutudan çıktığı haliyle desteklemediği bir ana bilgisayara bir hizmetin nasıl paketlenip dağıtılacağını bilir. Bir hizmet hedefi, host içindeki azure.yaml değerine eşlenir. Örneğin, bir hizmeti üçüncü taraf platforma veya iç barındırma ortamına dağıtan bir sağlayıcı ekleyebilirsiniz.
  • framework-service-provider: Bir dil veya çerçeve için destek kaydeder, böylece azd bu proje türünün nasıl geri yüklendiğini, derlendiğini ve paketlendiğini bilir. Bu, language içindeki azure.yaml değerine karşılık gelir. Örneğin, varsayılan olarak tanınmayan azd bir dil için derleme desteği ekleyebilirsiniz.
  • provisioning-provider: azd ve azd provision sırasında azd up'in altyapıyı sağlama biçimini değiştirir. Uzantınız yerleşik Bicep veya Terraform akışı yerine ne olacağını tanımlar. Örneğin, farklı bir altyapıyı kodla yönetme aracını veya özel bir dağıtım API'sini entegre edebilirsiniz.
  • validation-provider: Bir proje veya ortama karşı çalışan doğrulama işlem hattına azd denetimleri ekler. Örneğin, bir dağıtım devam etmeden önce adlandırma kurallarının, gerekli etiketlerin veya güvenlik ayarlarının yerinde olduğunu doğrulayabilirsiniz.
  • mcp-server: Uzantınızın, GitHub Copilot gibi yapay zeka aracılarının bulabildiği ve çağırabildiği Model Bağlam Protokolü (MCP) araçları olarak işlevselliğini kullanıma sunar. Örneğin, örnek uzantı bir suggest_tags aracı kullanıma açabilir. Daha fazla bilgi için bkz. Uzantıya MCP sunucusu ekleme.
  • metadata: azd öğesinin uzantınızı açıklamak için kullandığı, yardım çıkışında ve IntelliSense'te gösterilen ayrıntılı komut açıklamaları ile yapılandırma ipuçları gibi daha zengin komut ve yapılandırma meta verileri sağlar.

Bu makale en yaygın iki özelliğe odaklanır: özel komutlar ve yaşam döngüsü olayları. mcp-server Özellik için bkz. Uzantıya MCP sunucusu ekleme. Sağlayıcının yetenekleri hakkında tüm ayrıntılar için uzantı çerçevesi referansına bakın.

Özel komutlar ekleme

Bu custom-commands özellik, uzantınızın içindeki bir ad alanı azdaltına yeni komutlar kaydetmesini sağlar. Örnek uzantı, azd tagger show komutu için bu yeteneği zaten kullanıyor.

  1. Özelliği extension.yaml içinde bildirin.

    capabilities:
      - custom-commands
    
  2. Standart bayrakları ve ortam değişkeni işlemesini azdext.NewExtensionRootCommandazd kaydeden yardımcıyı kullanarak komutlarınızı derleyin, böylece bunları el ile bildirmeniz gerekmez:

    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
    }
    

    Yardımcı, *ExtensionContext ve Environment gibi standart bayrakların çözümlenen değerlerini erişime sunan bir OutputFormat döndürür. Bağlamı alt komutlarınıza iletin ve standart bayrakları yeniden tanımlamak yerine, bunları RunE işleyicilerinin içinde bu bağlamdan okuyun.

Yaşam döngüsü olaylarına abone olma

Bu lifecycle-events özelliği, uzantınızın preprovision veya postdeploy gibi proje ve hizmet yaşam döngüsü olayları sırasında özel mantık çalıştırmasına olanak tanır. Örnek uzantı için, preprovision herhangi bir kaynak sağlamadan önce gerekli etiketlerin ayarlandığını doğrulamak üzere bir azd olayını kullanın.

  1. Özelliği extension.yaml içinde bildirin.

    capabilities:
      - custom-commands
      - lifecycle-events
    
  2. Uzantınıza bir listen komut ekleyin. azd olaylar için kullanılan çift yönlü bağlantıyı kurmak için bu komutu çağırır. Olay işleyicilerinizi kaydetmek için oluşturucuyu azdext.NewExtensionHost kullanın:

    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
            },
        }
    }
    
  3. listen Komutunu kök komutunuzda kaydedin:

    rootCmd.AddCommand(newListenCommand())
    

Bir kullanıcı azd provision veya azd up çalıştırdığında, azd uzantınızı çağırır ve kaynakları sağlamadan önce preprovision işleyicisini çağırır.

Hizmet olaylarını filtreleme

Hizmet olayı işleyicileri isteğe bağlı filtrelemeyi destekler, bu nedenle yalnızca belirli hizmet türlerini işlersiniz. Örneğin, olayı yalnızca Python kapsayıcı uygulaması hizmetleri için işleyebilirsinizprepackage:

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",
        },
    )

Yeniden oluşturma ve test

Bir özellik ekledikten sonra uzantıyı yeniden derleyin ve yeni davranışı test edin:

  1. İzleyiciyi kullanıyorsanız değişiklikleriniz otomatik olarak yeniden derlenir. Aksi takdirde manuel olarak derleyin:

    azd x build
    
  2. Özelliği test edin. Yaşam döngüsü olayları için olayı tetikleyen bir komut çalıştırın, örneğin azd provision.