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.
Important
Podpora go pro Azure Functions je aktuálně ve verzi Public Preview. V předběžné verzi jsou aplikace funkcí v jazyce Go podporovány pouze v plánu Flex Consumption.
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 Service Bus trigger
app.ServiceBusQueue("myServiceBusFunc", handler,
sdk.WithQueueName("myqueue"),
sdk.WithConnection("ServiceBusConnection"),
)
// 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
Pracovní proces Go uspořádá triggery do dvou úrovní na základě jejich požadavků na závislost:
Základní triggery
Aktivační události jádra přijímají svou datovou zátěž přímo přes gRPC. Hostitel Azure Functions serializuje data triggeru do zprávy gRPC a pracovní proces je deserializuje do typovaných struktur 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é základní triggery:
| Trigger | Podpis obslužné rutiny | Metoda registrace |
|---|---|---|
| HTTP | func(http.ResponseWriter, *http.Request) |
app.HTTP() |
| Timer | TimerHandler |
app.Timer() |
| 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() |
Spouštěče rozšíření
Aktivační události rozšíření poskytují autentizovaného klienta Azure SDK namísto nezpracovaných dat. Hostitel odesílá pouze metadata (například název kontejneru a cestu k blobu) a pracovní proces vytvoří klienta omezeného na daný konkrétní prostředek. Tyto aktivační události mají:
- 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
Pokud chcete použít trigger rozšíření, přidejte prázdný import balíčku rozšíření:
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
}
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
}
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í (Preview)
Ve verzi Public Preview platí následující omezení:
-
func newnení podporováno. Přidejte funkce přímo úpravoumain.go. - Durable Functions není pro Go během veřejné verze Preview podporováno.
- Aplikace funkcí Go běží jenom v Linuxu v Azure.
- Během náhledu jsou podporovány pouze aktivační události uvedené v Triggerech.
- Go packaging in Core Tools v současné době cílí na linuxové aplikace x64.