Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Azure Functions je bezserverová výpočetní služba, kterou můžete použít ke spouštění kódu řízeného událostmi bez zřizování nebo správy infrastruktury. Worker pro Go umožňuje psát Azure Functions nativně v jazyce Go s úzkou integrací s ekosystémem triggerů Azure Functions.
Tato příručka vám pomůže:
- Principy programovacího modelu Go
- Vytvoření a strukturování kódu projektu
- Práce s aktivačními událostmi
- Místní nasazení a spuštění aplikace v Azure
Další obecné informace o vývoji Azure Functions najdete v referenčních informacích pro vývojáře Azure Functions.
Začínáme
Zvolte prostředí, které vyhovuje vašemu pracovnímu postupu, a začněte s Azure Functions for Go:
Předpoklady
- Přejít na verzi 1.24 nebo novější
-
Azure Functions Core Tools verze
4.12nebo novější. Spusťtefunc --versiona ověřte nainstalovanou verzi. -
Azure CLI verze
2.87.0nebo novější, když vytvoříte prostředky Azure nebo nasadíte balíčky do Azure. Spusťteaz versiona ověřte nainstalovanou verzi.
Programovací model
Worker Go používá programovací model typu code-first. Funkce bez serveru a jejich triggery definujete pomocí obslužných rutin idiomatic Go.
Vstupní bod
Každý projekt v Go začíná funkcí main(), která vytvoří FunctionApp, zaregistruje funkce a spustí worker:
package main
import (
"fmt"
"net/http"
"github.com/azure/azure-functions-golang-worker/sdk"
"github.com/azure/azure-functions-golang-worker/worker"
)
func main() {
app := sdk.FunctionApp()
app.HTTP("hello", hello,
sdk.WithMethods("GET", "POST"),
sdk.WithAuth("anonymous"),
)
worker.Start(app)
}
func hello(w http.ResponseWriter, r *http.Request) {
name := r.URL.Query().Get("name")
if name == "" {
name = "world"
}
fmt.Fprintf(w, "Hello, %s!", name)
}
Registrace funkce
Zaregistrujte funkce pomocí rozhraní API fluent builderu se vzorem funkčních možností. Každý typ triggeru má u objektu metodu App registrace:
// HTTP trigger
app.HTTP("myHttpFunc", handler,
sdk.WithMethods("GET", "POST"),
sdk.WithAuth("anonymous"),
)
// Timer trigger
app.Timer("myTimerFunc", handler,
sdk.WithSchedule("0 */5 * * * *"),
)
// Azure Cosmos DB trigger
app.CosmosDB("myCosmosFunc", handler,
sdk.WithDatabase("mydb"),
sdk.WithContainer("mycontainer"),
sdk.WithConnection("CosmosDBConnection"),
)
// Azure Queue Storage trigger
app.Queue("myQueueFunc", handler,
sdk.WithQueueName("myqueue"),
sdk.WithConnection("AzureWebJobsStorage"),
)
// Azure Service Bus trigger
app.ServiceBusQueue("myServiceBusFunc", handler,
sdk.WithQueueName("myqueue"),
sdk.WithConnection("ServiceBusConnection"),
)
// Azure SQL trigger
app.SQL("mySqlFunc", handler,
sdk.WithTable("dbo.Products"),
sdk.WithConnection("SqlConnectionString"),
)
// Event Hubs trigger
app.EventHub("myEventHubFunc", handler,
sdk.WithEventHubName("myeventhub"),
sdk.WithConnection("EventHubConnection"),
)
// Event Grid trigger
app.EventGrid("myEventGridFunc", handler)
// Blob trigger (extension model)
app.Blob("myBlobFunc", handler,
sdk.WithPath("mycontainer/{name}"),
sdk.WithConnection("AzureWebJobsStorage"),
)
Struktura projektu
Projekt kódu Go pro Azure Functions je standardní modul Go. Při spuštění func init --worker-runtime gose vygenerují následující soubory:
my-function-app/
├── host.json # Host configuration
├── local.settings.json # Local settings (connection strings, app settings)
├── go.mod # Go module file
├── go.sum # Go module checksums
└── main.go # Entry point with function registrations
host.json
Soubor host.json obsahuje možnosti konfigurace na úrovni hostitele. Další informace najdete v host.json referenčních informacích.
local.settings.json
Soubor local.settings.json ukládá nastavení aplikace a připojovací řetězce používané při místním vývoji. Tento soubor není publikovaný do Azure. Další informace naleznete v tématu Místní soubor nastavení.
Spouštěče
Go worker poskytuje speciální metody registrace podporovaných spouštěčů.
Typované datové části triggerů
Většina podporovaných spouštěčů přijímá svůj payload inline přes gRPC. Hostitel Azure Functions serializuje spouštěcí data do gRPC zprávy a pracovník je deserializuje do typovaných hodnot Go. Tyto aktivační události mají:
- Typované signatury obslužných rutin s bezpečností v době kompilace
-
Žádné externí závislosti na Azure SDK: je potřeba pouze
encoding/json - Datové části s omezenou velikostí: dokumenty z kanálu změn, zprávy a události jsou samostatné objekty s omezenou velikostí
Podporované triggery:
| Trigger | Podpis obslužné rutiny | Metoda registrace |
|---|---|---|
| HTTP | func(http.ResponseWriter, *http.Request) |
app.HTTP() |
| Timer | TimerHandler |
app.Timer() |
| Azure Queue Storage | QueueHandler |
app.Queue() |
| Azure Cosmos DB | func(context.Context, []bindings.CosmosDocument) error |
app.CosmosDB() |
| Azure Service Bus (fronta) | ServiceBusHandler |
app.ServiceBusQueue() |
| Azure Service Bus (téma) | ServiceBusHandler |
app.ServiceBusTopic() |
| Centra událostí | EventHubHandler |
app.EventHub() |
| Event Grid | EventGridHandler |
app.EventGrid() |
| Azure SQL | func(context.Context, []bindings.SQLChange) error |
app.SQL() |
Event Hubs a Service Bus také podporují silně typované dávkové handlery prostřednictvím app.EventHubBatch(), app.ServiceBusQueueBatch(), a app.ServiceBusTopicBatch().
Vazby typu sady SDK
Vazby SDK poskytují autentizovaného klienta Azure SDK místo serializovaných spouštěcích dat. V jazyce Go spouštěče Blob Storage podporují vazby na typy SDK. Hostitel odesílá metadata, jako je název kontejneru a cesta k blobu, a pracovník vytváří klienta zaměřeného na konkrétní zdroj. Vazby typů SDK poskytují:
- Injektáž klienta sady SDK: Obslužná rutina obdrží klienta připraveného k použití.
-
Izolované závislosti: balíčky Azure SDK jsou umístěny v
triggers/<name>/ - Podpora streamování: Umožňuje čtení velkých datových částí bez ukládání do vyrovnávací paměti prostřednictvím gRPC
Pro použití vazby typu Blob Storage SDK je možné přidat prázdný import pro balíček triggeru Blob:
import _ "github.com/azure/azure-functions-golang-worker/triggers/blob"
| Trigger | Obslužná rutina přijímá | Metoda registrace |
|---|---|---|
| Blob Storage | *blob.Client |
app.Blob() |
Příklad spouštěče objektu Blob
package main
import (
"context"
"fmt"
"io"
"log"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/blob"
"github.com/azure/azure-functions-golang-worker/sdk"
_ "github.com/azure/azure-functions-golang-worker/triggers/blob"
"github.com/azure/azure-functions-golang-worker/worker"
)
func main() {
app := sdk.FunctionApp()
app.Blob("processBlobTrigger", processBlob,
sdk.WithPath("samples-workitems/{name}"),
sdk.WithConnection("AzureWebJobsStorage"),
)
worker.Start(app)
}
func processBlob(ctx context.Context, client *blob.Client) error {
get, err := client.DownloadStream(ctx, nil)
if err != nil {
return fmt.Errorf("download error: %w", err)
}
data, _ := io.ReadAll(get.Body)
get.Body.Close()
log.Printf("Blob size: %d bytes", len(data))
return nil
}
Obecné triggery hostitele
Použijte app.GenericTrigger() , když kompatibilní rozšíření hostitele poskytuje spouštěč, který nemá vyhrazenou metodu registrace v Go. Obecné triggery podporují surový text, byte slices a JSON-kompatibilní Go typy:
app.GenericTrigger("echoTool", echoTool, &bindings.GenericTrigger{
Type: "mcpToolTrigger",
Name: "call",
DataType: "string",
Properties: map[string]any{
"toolName": "echo",
"description": "Echo text using a generic Go trigger",
"toolProperties": `[{"propertyName":"text","propertyType":"string","description":"Text to echo","isRequired":true}]`,
},
})
Je nutné nainstalovat kompatibilní hostitelské rozšíření. Generická registrace spouštěčů neposkytuje zpracování HTTP, injekci klientů SDK, přehrávání Durable Functions ani vypořádání zpráv specifických pro službu. Kompletní příklady najdete v ukázce obecných triggerů.
HTTP spouštěče
Obslužné funkce triggerů HTTP používají standardní typy Go net/http, takže jsou vývojářům v Go okamžitě povědomé:
func myHandler(w http.ResponseWriter, r *http.Request) {
name := r.URL.Query().Get("name")
if name == "" {
name = "world"
}
w.Header().Set("Content-Type", "application/json")
fmt.Fprintf(w, `{"message": "Hello, %s!"}`, name)
}
Registrace funkcí HTTP pomocí metod a úrovně autorizace:
app.HTTP("myApi", myHandler,
sdk.WithMethods("GET", "POST"),
sdk.WithAuth("anonymous"),
)
Streamování HTTP
Pracovní proces Go podporuje streamování HTTP pro scénáře, jako jsou události odeslané serverem nebo odesílání velkých dat odpovědí:
func streamHandler(w http.ResponseWriter, r *http.Request) {
flusher, ok := w.(http.Flusher)
if !ok {
http.Error(w, "streaming not supported", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "text/event-stream")
for i := 0; i < 10; i++ {
fmt.Fprintf(w, "data: message %d\n\n", i)
flusher.Flush()
}
}
Aktivátor časovače
Aktivační události časovače se spouštějí podle plánu definovaného pomocí výrazu cron:
app.Timer("myScheduledFunc", timerHandler,
sdk.WithSchedule("0 */5 * * * *"),
)
func timerHandler(ctx context.Context, timer bindings.TimerInfo) error {
log.Printf("Timer trigger executed at: %s", timer.ScheduleStatus.Next)
return nil
}
Durable Functions
Go podporuje orchestrace a aktivity Durable Functions prostřednictvím balíčku middleware/durabletask. Zaregistrujte své orchestrátory a aktivity v middlewaru Durable před přidáním middlewaru do aplikace funkcí:
durable := durabletask.Middleware()
durable.Orchestrator("HelloCities", helloCities)
durable.Activity("SayHello", sayHello)
app.Use(durable)
Durable Functions pro Go vyžaduje rozšíření Durable Task verze 3.15.0 nebo novší. Entity momentálně nejsou podporovány. Pro kompletní aplikaci viz ukázka Durable Functions.
Správa závislostí
Projekty kódu Go používají standardní moduly Go pro správu závislostí.
Inicializace nového modulu:
go mod init myappPřidejte sadu SDK pracovního procesu Azure Functions Go:
go get github.com/azure/azure-functions-golang-workerPro podporu triggeru blobu se závislost automaticky zahrne prostřednictvím prázdného importu
triggers/blob.Uspořádat závislosti:
go mod tidy
Spustit lokálně
K místnímu spuštění projektu použijte nástroje Azure Functions Core Tools:
func start
Core Tools automaticky:
- Rozpozná
FUNCTIONS_WORKER_RUNTIME = "native"zlocal.settings.json. - Určí nativní runtime pracovního procesu jako Go, pokud je přítomen soubor
go.mod. - Spustí
go build -o bin/app .ke kompilaci vašeho projektu pro váš lokální operační systém. - Spustí Azure Functions hostitele, který komunikuje s kompilovaným binárním souborem přes gRPC.
- Zobrazí koncové body vaší funkce (například
http://localhost:7071/api/hello).
Slouží local.settings.json ke konfiguraci proměnných prostředí pro místní vývoj:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "native"
}
}
Vygenerovaná AzureWebJobsStorage hodnota je pro projekty Go prázdná. Nastavte ho na připojovací řetězec účtu úložiště nebo UseDevelopmentStorage=true, když při místním vývoji používáte aktivační události, které vyžadují hostitelské úložiště.
Deployment
Kompilace a balení
Azure Functions Core Tools verze 4.12 nebo novější zajišťuje sestavení Go pro běžné postupy místního nasazení a nasazení do Azure:
-
func startpřed spuštěním místního hostitele Functions sestaví váš projekt jako bin nebo aplikaci pro místní operační systém. -
func azure functionapp publishsestaví, zabalí a nasadí váš projekt do existující aplikace funkcí v Azure. -
func packsestaví projekt jako bin/app pro Linux x64 a vytvoří nasaditelný balíček .zip.
Při balení pro Azure obsahuje vygenerovaný soubor .zip soubory potřebné hostitelem Linux Functions. Zkompilovaný binární soubor se uloží jako bin/aplikace v místním projektu, ale Nástroje Core Tools ho umístí do kořenového adresáře balíčku pro nasazení jako aplikaci.
Pokud používáte func pack --no-build, musíte před balením sestavit binární soubor x64 s Linuxem:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/app .
Nasaďte pomocí nástroje Core Tools
Pomocí příkazu func azure functionapp publish nasaďte projekt Go do existující aplikace funkcí v Azure:
func azure functionapp publish <APP_NAME>
Nahraďte <APP_NAME> názvem vaší funkční aplikace.
Nasazení balíčku ZIP
Použijte func pack , když potřebujete vytvořit balíček nasazení odděleně od publikování:
Vytvoření nasaditelného artefaktu zip:
func packNasaďte balíček pomocí Azure CLI:
az functionapp deployment source config-zip --resource-group <RESOURCE_GROUP> --name <APP_NAME> --src <ZIP_FILE_PATH>
Balíček vytvořený func pack je připravený ke spuštění v Azure, takže při nasazení nepožádejte o vzdálené sestavení.
Podpora Dockeru
Projekty kódu Jazyka Go můžete spouštět v kontejnerech. Inicializace projektu s podporou Dockeru:
func init --worker-runtime go --docker
Příkaz vygeneruje Dockerfile společně se standardními soubory projektu.
Telemetrie a pozorovatelnost
Pracovní proces Azure Functions Go podporuje strukturované protokolování a pozorovatelnost založená na OpenTelemetry. Ke korelaci protokolů s voláním aktuální funkce použijte metody podporující kontext ze standardního log/slog balíčku, například slog.InfoContext. Chcete-li povolit OpenTelemetry, nakonfigurujte hostitele Functions a ve své aplikaci zaregistrujte middleware OpenTelemetry pro worker Go. Pokyny k nastavení najdete v tématu Use OpenTelemetry with Azure Functions.
Známá omezení
-
func newnení podporováno. Přidejte funkce přímo úpravoumain.go. - Aplikace funkcí Go běží na Linuxu pouze v rámci plánu Flex Consumption.
- Podporovány jsou pouze dedikované spouštěče uvedené v Triggers a kompatibilní obecné hostitelské spouštěče .
- Další vstupní vazby a výstupní vazby mimo HTTP nejsou v současnosti podporovány.
- Go packaging in Core Tools v současné době cílí na linuxové aplikace x64.