Todos los productos
Search
Centro de documentos

Function Compute:Contexto

Última actualización: Sep 10, 2026

Cuando Function Compute ejecuta una función, pasa un objeto context.Context al handler. Este contexto le da a su código acceso a los metadatos del entorno de ejecución, como los identificadores de solicitud, las credenciales temporales, la configuración de la función y la información de tiempo límite, sin llamadas adicionales a la API.

Use el objeto de contexto cuando necesite:

  • Leer metadatos de invocación, como el identificador de solicitud o el identificador de cuenta.

  • Acceder a credenciales temporales para llamar a otros servicios de Alibaba Cloud (por ejemplo, Object Storage Service (OSS)) sin codificar de forma fija un par de AccessKey.

  • Controlar cuánto tiempo de ejecución queda antes de que la función alcance el tiempo de espera.

Variables de contexto

A continuación se muestran las variables disponibles en el objeto fccontext. Para obtenerlas, importe github.com/aliyun/fc-runtime-go-sdk/fccontext y llame a fccontext.FromContext(ctx).

Variable

Descripción

RequestID

El identificador único de la invocación actual. Registre este valor en sus registros para simplificar la resolución de problemas.

Credentials

Un par de AccessKey temporal que Function Compute genera al asumir su rol vinculado al servicio. Este par tiene una validez de 36 horas. Úselo para llamar a servicios como OSS desde el código de su función; así no tendrá que almacenar credenciales en el propio código. Para más detalles, consulte Grant Function Compute permissions to access other Alibaba Cloud services.

Function

Metadatos básicos de la función invocada: nombre, handler, límite de memoria y periodo de tiempo de espera.

Service

Metadatos del servicio al que pertenece la función: nombre, proyecto y logstore de Simple Log Service (SLS) asociados, versión y alias. El campo qualifier contiene la versión o el alias especificados durante la invocación; versionId contiene la versión que se ejecutó realmente.

Region

El identificador de la región donde se ejecuta la función. Por ejemplo, cn-shanghai para la región China (Shanghai). Para ver la lista completa de identificadores de región, consulte Service endpoints.

AccountId

El identificador de la cuenta de Alibaba Cloud propietaria de la función.

Método de contexto

Método

Descripción

deadline

El tiempo límite de ejecución de la función como una marca de tiempo UNIX en milisegundos. Llame a ctx.Deadline() para obtener el valor time.Time correspondiente.

Para consultar la estructura de datos completa, visite fc-runtime-go-sdk en GitHub.

Leer la información de contexto

Agregue context.Context como parámetro de su handler. Luego, llame a fccontext.FromContext para extraer los campos específicos de Function Compute.

package main

import (
    "context"
    "encoding/json"
    "log"

    "github.com/aliyun/fc-runtime-go-sdk/fc"
    "github.com/aliyun/fc-runtime-go-sdk/fccontext"
)

func main() {
    fc.Start(echoContext)
}

func echoContext(ctx context.Context) (string, error) {
    fctx, _ := fccontext.FromContext(ctx)
    log.Println(fctx.AccountId)
    log.Printf("%#v\n", fctx)
    res, _ := json.Marshal(fctx)
    return string(res), nil
}

Controlar el tiempo de ejecución restante

Use ctx.Deadline() para obtener el tiempo límite absoluto de la invocación actual y calcule cuánto tiempo le queda a su función. En el siguiente ejemplo se resta un margen de 100 ms al tiempo límite y se detiene el ciclo de trabajo antes de alcanzar el tiempo de espera.

package main

import (
    "context"
    "fmt"
    "log"
    "time"

    "github.com/aliyun/fc-runtime-go-sdk/fc"
)

func LongRunningHandler(ctx context.Context) (string, error) {
    deadline, _ := ctx.Deadline()
    fmt.Printf("now: %s\ndeadline: %s\n", time.Now().String(), deadline.String())
    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() {
    fc.Start(LongRunningHandler)
}