Objeto context AWS Lambda en Go - AWS Lambda

Objeto context AWS Lambda en Go

Cuando Lambda ejecuta su función, pasa un objeto context al controlador. Este objeto proporciona métodos y propiedades con información acerca de la invocación, la función y el entorno de ejecución.

La biblioteca de contexto de Lambda proporciona las siguientes variables globales, métodos y propiedades.

Variables globales
  • FunctionName: el nombre de la función de Lambda.

  • FunctionVersion: la versión de la función.

  • MemoryLimitInMB: cantidad de memoria asignada a la función.

  • LogGroupName: el grupo de registros de para la función.

  • LogStreamName: el flujo de registro de la instancia de la función.

Métodos de context
  • Deadline: devuelve la fecha en la que la ejecución agota su tiempo de espera, en milisegundos de tiempo Unix.

Propiedades de context
  • InvokedFunctionArn: el nombre de recurso de Amazon (ARN) que se utiliza para invocar la función. Indica si el invocador especificó un número de versión o alias.

  • AwsRequestID: el identificador de la solicitud de invocación.

  • Identity: (aplicaciones móviles) Información acerca de la identidad de Amazon Cognito que autorizó la solicitud.

  • ClientContext: (aplicaciones móviles) Contexto de cliente proporcionado a Lambda por la aplicación cliente.

Acceso a la información del contexto de invocación

Las funciones de Lambda tienen acceso a metadatos acerca de su entorno y la solicitud de invocación. Se puede obtener acceso en el contexto del paquete. Si el controlador incluye context.Context como parámetro, Lambda información acerca de su función en la propiedad Value del contexto. Tenga en cuenta que debe importar la biblioteca lambdacontext para obtener acceso al contenido del objeto context.Context.

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

En el ejemplo anterior, lc es la variable que se usa para consumir la información que el objeto context capturó y log.Print(lc.Identity.CognitoIdentityPoolID) imprime dicha información, en este caso, CognitoIdentityPoolID.

En el ejemplo siguiente se indica cómo utilizar el objeto context para monitorear el tiempo que tarda en ejecutarse la función de Lambda. Esto le permite analizar las expectativas de desempeño y ajustar el código de su función en consecuencia, si es necesario.

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