Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
In Lambda bietet das Kontextobjekt Methoden und Eigenschaften mit Informationen über den Aufruf, die Funktion und die Ausführungsumgebung. Wenn Lambda Ihre Funktion ausführt, wird ein Context-Objekt an den Handler übergeben. Um das Kontextobjekt in Ihrem Handler zu verwenden, können Sie es optional als Eingabeparameter für Ihren Handler deklarieren. Das Kontextmenüobjekt ist erforderlich, wenn Sie in Ihrem Handler Folgendes tun möchten:
-
Sie benötigen Zugriff auf eine der globalen Variablen, Methoden oder Eigenschaften, die vom Kontextobjekt angeboten werden. Diese Methoden und Eigenschaften sind nützlich für Aufgaben wie die Bestimmung der Entität, die Ihre Funktion aufgerufen hat, oder die Messung der Aufrufzeit Ihrer Funktion, wie in Zugreifen auf Aufrufkontextinformationen dargestellt.
-
Sie müssen das verwenden AWS SDK für Go , um Anrufe zu anderen Diensten zu tätigen. Das Kontextobjekt ist ein wichtiger Eingabeparameter für die meisten dieser Aufrufe. Weitere Informationen finden Sie unter Verwendung des Kontexts bei Initialisierungen und Aufrufen von AWS SDK-Clients.
Themen
Unterstützte Variablen, Methoden und Eigenschaften im Kontextmenüobjekt
Die Lambda-Kontextbibliothek bietet die folgenden globalen Variablen, Methoden und Eigenschaften.
Globale Variablen
-
FunctionName
– Der Name der Lambda-Funktion. -
FunctionVersion
– Die Version der Funktion. -
MemoryLimitInMB
– Die Menge an Arbeitsspeicher, die der Funktion zugewiesen ist. -
LogGroupName
– Protokollgruppe für die Funktion. -
LogStreamName
– Der Protokollstrom für die Funktionsinstance.
Context-Methoden
-
Deadline
– Gibt das Datum zurück, an dem eine Zeitüberschreitung für die Ausführung eintritt (in Unix-Millisekunden).
Context-Eigenschaften
-
InvokedFunctionArn
– Der Amazon-Ressourcenname (ARN), der zum Aufrufen der Funktion verwendet wird. Gibt an, ob der Aufrufer eine Versionsnummer oder einen Alias angegeben hat. -
AwsRequestID
– Der Bezeichner der Aufrufanforderung. -
Identity
– Informationen zur Amazon-Cognito-Identität, die die Anforderung autorisiert hat. -
ClientContext
– (mobile Apps) Clientkontext, der Lambda von der Clientanwendung bereitgestellt wird.
Zugreifen auf Aufrufkontextinformationen
Lambda-Funktionen haben Zugriff auf Metadaten über ihre Umgebung und die Aufrufanforderung. Darauf kann unter Paketkontextcontext.Context
als Parameter umfasst, fügt Lambda Informationen über Ihre Funktion in der Value
-Eigenschaft des Kontexts ein. Beachten Sie, dass Sie die lambdacontext
-Bibliothek importieren müssen, um auf die Inhalte des context.Context
-Objekts zuzugreifen.
package main
import (
"context"
"log"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-lambda-go/lambdacontext"
)
func CognitoHandler(ctx context.Context) {
lc, _ := lambdacontext.FromContext(ctx)
log.Print(lc.Identity.CognitoIdentityPoolID)
}
func main() {
lambda.Start(CognitoHandler)
}
Im obigen Beispiel lc
wird die Variable verwendet, um die Informationen zu verarbeiten, die das Kontextobjekt erfasst hat, und diese Informationen log.Print(lc.Identity.CognitoIdentityPoolID)
auszudrucken, in diesem Fall die CognitoIdentityPool ID.
Das folgende Beispiel bietet eine Einführung in die Verwendung der Kontextobjekte zur Überwachung der Abschlussdauer Ihrer Lambda-Funktion. Damit können Sie die Leistungserwartungen analysieren und Ihren Funktionscode bei Bedarf entsprechend anpassen.
package main
import (
"context"
"log"
"time"
"github.com/aws/aws-lambda-go/lambda"
)
func LongRunningHandler(ctx context.Context) (string, error) {
deadline, _ := ctx.Deadline()
deadline = deadline.Add(-100 * time.Millisecond)
timeoutChannel := time.After(time.Until(deadline))
for {
select {
case <- timeoutChannel:
return "Finished before timing out.", nil
default:
log.Print("hello!")
time.Sleep(50 * time.Millisecond)
}
}
}
func main() {
lambda.Start(LongRunningHandler)
}
Verwendung des Kontexts bei Initialisierungen und Aufrufen von AWS SDK-Clients
Wenn Ihr Handler das verwenden muss, um Aufrufe AWS SDK für Go an andere Dienste zu tätigen, fügen Sie das Kontextobjekt als Eingabe für Ihren Handler hinzu. In ist es eine bewährte Methode AWS, das Kontextobjekt bei den meisten AWS SDK-Aufrufen zu übergeben. Der Aufruf von Amazon S3 PutObject
akzeptiert beispielsweise das Kontextobjekt (ctx
) als erstes Argument:
// Upload an object to S3
_, err = s3Client.PutObject(ctx, &s3.PutObjectInput{
...
})
Um Ihre SDK-Clients richtig zu initialisieren, können Sie auch das Kontext-Objekt verwenden, um die richtige Konfiguration zu laden, bevor Sie dieses Konfigurationsobjekt an den Client übergeben:
// Load AWS SDK configuration using the default credential provider chain
cfg, err := config.LoadDefaultConfig(ctx)
...
s3Client = s3.NewFromConfig(cfg)
Wenn Sie Ihre SDK-Clients außerhalb Ihres Haupthandlers initialisieren möchten (d. h. während der Initialisierungsphase), können Sie ein Platzhalter-Kontextobjekt übergeben:
func init() {
// Initialize the S3 client outside of the handler, during the init phase
cfg, err := config.LoadDefaultConfig(context.TODO())
...
s3Client = s3.NewFromConfig(cfg)
}
Wenn Sie Ihre Clients auf diese Weise initialisieren, stellen Sie sicher, dass Sie bei SDK-Aufrufen von Ihrem Haupthandler das richtige Kontextobjekt übergeben.