Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Important
A Azure Functions támogatása jelenleg nyilvános előzetes verzióban érhető el. Az előzetes verzióban a Go függvényalkalmazások csak a Rugalmas használat csomagban támogatottak.
Azure Functions egy kiszolgáló nélküli számítási szolgáltatás, amellyel eseményvezérelt kódot futtathat infrastruktúra kiépítése és kezelése nélkül. A Go worker lehetővé teszi, hogy natívan, Go nyelven írjon Azure Functions-függvényeket, szorosan integrálva az Azure Functions trigger-ökoszisztémájába.
Ez az útmutató a következőkben nyújt segítséget:
- A Go programozási modell ismertetése
- Projektkód létrehozása és felépítése
- Triggerek használata
- Az alkalmazás üzembe helyezése és futtatása helyileg és a Azure
Az Azure Functions fejlesztéséről általában további információért lásd a Azure Functions fejlesztői referenciát.
Kezdő lépések
Válassza ki a munkafolyamatához legjobban illő környezetet, és kezdje el használni az Azure Functions for Go szolgáltatást:
Prerequisites
- Go 1.24 vagy újabb
-
Azure Functions Core Tools verzió
4.12vagy újabb. Futtassafunc --versiona telepített verzió ellenőrzéséhez. -
Azure CLI
2.87.0vagy újabb verziója, amikor Azure-erőforrásokat hoz létre, vagy csomagokat telepít az Azure-ba. Futtassaaz versiona telepített verzió ellenőrzéséhez.
Programozási modell
A Go-feldolgozó egy kódelső programozási modellt használ. A kiszolgáló nélküli függvényeket és azok eseményindítóit idiomatikus Go-kezelőkkel definiálhatja.
Belépési pont
Minden Go-kódprojekt egy main() függvényt hoz létre FunctionApp, regisztrálja a függvényeket, és elindítja a feldolgozót:
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)
}
Függvényregisztráció
Függvények regisztrálása a fluent builder API-val a funkcionális beállítások mintájával. Minden eseményindító-típushoz tartozik egy regisztrációs metódus a(z) App objektumon:
// 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"),
)
A projekt szerkezete
Az Azure Functions Go-kódprojektje egy szabványos Go-modul. Futtatáskor func init --worker-runtime goa következő fájlok jönnek létre:
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
A host.json fájl gazdagépszintű konfigurációs beállításokat tartalmaz. További információ: host.json referencia.
local.settings.json
A local.settings.json fájl tárolja a helyi fejlesztés során használt alkalmazásbeállításokat és kapcsolati sztringeket. Ez a fájl nincs közzé téve az Azure-ba. További információt a Helyi beállítások fájlban talál.
Kiváltók
A Go-feldolgozó a függőségi követelmények alapján két szintre szervezi az eseményindítókat:
Alapvető eseményindítók
Az alapvető eseményindítók közvetlenül, gRPC-n keresztül kapják meg az adatterhet. Az Azure Functions host a trigger adatait a gRPC-üzenetbe szerializálja, a worker pedig típusos Go-struktúrákká deszerializálja azokat. Ezek az eseményindítók a következők:
- Típusos kezelőfüggvény-szignatúrák fordításkori biztonsággal
-
Nem szükséges külső Azure SDK függőség: csak
encoding/jsonvan szükség - Korlátozott méretű hasznos adatok: a változási hírcsatorna dokumentumai, az üzenetek és az események különálló, méretükben korlátozott objektumok
Támogatott alapvető eseményindítók:
| Trigger | Kezelői aláírás | Regisztrációs módszer |
|---|---|---|
| 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 (üzenetsor) | ServiceBusHandler |
app.ServiceBusQueue() |
| Azure Service Bus (témakör) | ServiceBusHandler |
app.ServiceBusTopic() |
| Event Hubs | EventHubHandler |
app.EventHub() |
| Event Grid | EventGridHandler |
app.EventGrid() |
Bővítmény-eseményindítók
A bővítmény-eseményindítók a nyers adatok helyett hitelesített Azure SDK ügyfelet biztosítanak. A gazdagép csak metaadatokat küld (például a tároló nevét és a blob elérési útját), a feldolgozó pedig létrehoz egy, az adott erőforrásra korlátozott ügyfélprogramot. Ezek az eseményindítók a következők:
- SDK-ügyfélinjektálás: a kezelő használatra kész ügyfelet kap
-
Elkülönített függőségek: az Azure SDK-csomagok itt találhatók:
triggers/<name>/ - Streaming támogatása: lehetővé teszi a nagyméretű adatok olvasását pufferelés nélkül, gRPC-n keresztül
A bővítménytrigger használatához adjon hozzá egy üres importutasítást a bővítménycsomaghoz:
import _ "github.com/azure/azure-functions-golang-worker/triggers/blob"
| Trigger | A kezelő fogadja a | Regisztrációs módszer |
|---|---|---|
| Blob Storage | *blob.Client |
app.Blob() |
Példa Blob-eseményindítóra
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-eseményindítók
A HTTP-triggerkezelők szabványos Go-típusokat net/http használnak, így azonnal ismerősek lesznek a Go-fejlesztők számára:
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)
}
HTTP-függvények regisztrálása metódusokkal és engedélyezési szinttel:
app.HTTP("myApi", myHandler,
sdk.WithMethods("GET", "POST"),
sdk.WithAuth("anonymous"),
)
HTTP-streamelés
A Go-feldolgozó támogatja a HTTP-streamelést olyan helyzetekben, mint a kiszolgáló által küldött események vagy a nagy válaszadatok küldése:
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()
}
}
Időzítőindító
Az időzítő eseményindítói a cron kifejezés által meghatározott ütemezés szerint futnak:
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
}
Függőségkezelés
A Go-kódprojektek standard Go-modulokat használnak a függőségkezeléshez.
Új modul inicializálása:
go mod init myappAdja hozzá a Azure Functions Go-feldolgozó SDK-t:
go get github.com/azure/azure-functions-golang-workerBlobtrigger-támogatás esetén a függőség automatikusan bekerül a(z)
triggers/blobüres importálásával.Rendezett függőségek:
go mod tidy
Helyi futtatás
A Azure Functions Core Tools használatával helyileg futtathatja a projektet:
func start
Alapvető eszközök automatikusan:
- Észleli a(z)
FUNCTIONS_WORKER_RUNTIME = "native"elemet a(z)local.settings.jsonforrásból. - A natív worker-futtatókörnyezetet Go-ként azonosítja, ha egy
go.modfájl található. - Lefuttatja a(z)
go build -o bin/app .parancsot, hogy lefordítsa a projektet az Ön helyi operációs rendszerére. - Elindítja az Azure Functions gazdafolyamatot, amely gRPC-n keresztül kommunikál a lefordított binárissal.
- Megjeleníti a függvényvégpontokat (például
http://localhost:7071/api/hello).
Környezeti változók helyi fejlesztéshez való konfigurálásához használható local.settings.json :
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "native"
}
}
A létrehozott AzureWebJobsStorage érték üres a Go-projektek esetében. Állítsa be tárfiókhoz tartozó kapcsolati sztringre vagy UseDevelopmentStorage=true értékre, ha a helyi fejlesztés során olyan eseményindítókat használ, amelyek a gazdagép tárolóját igénylik.
Deployment
Fordítás és csomagolás
Azure Functions Core Tools 4.12 vagy újabb verziója kezeli a Go-buildeket a gyakori helyi és Azure üzembehelyezési folyamatokhoz:
-
func starta helyi operációs rendszerhez a projektet bin/app néven építi le, mielőtt elindítaná a helyi Functions-gazdagépet. -
func azure functionapp publishfelépíti, becsomagolja, és üzembe helyezi a projektet egy meglévő függvényalkalmazásba az Azure-ban. -
func packLinux x64 rendszerre a projektet bin/app néven állítja össze, és egy telepíthető .zip csomagot hoz létre.
A Azure csomagolásakor a létrehozott .zip fájl tartalmazza a Linux Functions-gazdagép által szükséges fájlokat. A lefordított bináris fájl a helyi projektben bin/app néven van tárolva, de a Core Tools az üzembehelyezési csomag gyökerébe app néven helyezi.
Ha a(z) func pack --no-build elemet használja, a csomagolás előtt el kell készítenie a Linux x64 binárist:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/app .
Üzembe helyezés a Core Tools használatával
A func azure functionapp publish használatával telepítheti Go-projektjét egy meglévő Azure-beli függvényalkalmazásba:
func azure functionapp publish <APP_NAME>
Cserélje le <APP_NAME> a függvényalkalmazás nevére.
Zip-csomag üzembe helyezése
Akkor használható func pack , ha a közzétételtől elkülönítve kell létrehoznia egy üzembehelyezési csomagot:
Üzembe helyezhető zip-összetevő létrehozása:
func packA csomag üzembe helyezése a Azure CLI használatával:
az functionapp deployment source config-zip --resource-group <RESOURCE_GROUP> --name <APP_NAME> --src <ZIP_FILE_PATH>
A func pack által előállított csomag készen áll a Azure való futtatásra, ezért telepítéskor ne kérjen távoli buildet.
Docker-támogatás
Go-kódprojekteket futtathat tárolókban. Projekt inicializálása Docker-támogatással:
func init --worker-runtime go --docker
A parancs létrehoz egy Dockerfile elemet a szabványos projektfájlokkal együtt.
Telemetria és megfigyelhetőség
A Azure Functions Go-feldolgozó támogatja a strukturált naplózást és az OpenTelemetry-alapú megfigyelhetőséget. Használjon környezettudatos metódusokat a standard log/slog csomagból, például slog.InfoContexta naplók az aktuális függvényhívással való korrelálásához. Az OpenTelemetria engedélyezéséhez konfigurálja a Functions-gazdagépet, és regisztrálja a Go worker OpenTelemetry köztes szoftverét az alkalmazásban. A beállítási utasításokat lásd: Az OpenTelemetry használata az Azure Functionsszel.
Ismert korlátozások (előzetes verzió)
A nyilvános előzetes verzióban a következő korlátozások érvényesek:
-
func newnem támogatott. Adjon hozzá funkciókat a(z)main.goközvetlen szerkesztésével. - A Durable Functions nem támogatott a Go esetében a nyilvános előzetes verzióban.
- A Go-alapú függvényalkalmazások az Azure-ban csak Linuxon futnak.
- Az előzetes verzióban csak az eseményindítókban felsorolt eseményindítók támogatottak.
- A Go-csomagolás a Core Toolsban jelenleg a Linux x64-alkalmazásokhoz készül.