Todos os produtos
Search
Central de documentação

Function Compute:Contexto

Última atualização: Jun 29, 2026

Ao executar uma função, o Function Compute passa um objeto context.Context para o handler. Esse contexto permite que seu código acesse metadados de tempo de execução — como IDs de solicitação, credenciais temporárias, configurações da função e informações de prazo — sem chamadas adicionais à API.

Use o objeto de contexto quando precisar:

  • Ler metadados de invocação, como o ID da solicitação ou o ID da conta.

  • Acessar credenciais temporárias para chamar outros serviços da Alibaba Cloud (por exemplo, Object Storage Service (OSS)) sem codificar permanentemente um par de AccessKey.

  • Monitorar o tempo de execução restante antes que a função atinja o tempo limite.

Variáveis de contexto

As variáveis abaixo estão disponíveis no objeto fccontext. Para acessá-las, importe github.com/aliyun/fc-runtime-go-sdk/fccontext e chame fccontext.FromContext(ctx).

Variável

Descrição

RequestID

ID exclusivo da invocação atual. Registre esse valor nos logs para facilitar a solução de problemas.

Credentials

Par de AccessKey temporário que o Function Compute gera ao assumir sua função vinculada ao serviço. O par tem validade de 36 horas. Use-o para chamar serviços como OSS diretamente do código da função, eliminando a necessidade de armazenar credenciais no próprio código. Para mais detalhes, consulte Conceder permissões ao Function Compute para acessar outros serviços da Alibaba Cloud.

Function

Metadados básicos da função invocada: nome, handler, limite de memória e período de tempo limite.

Service

Metadados do serviço ao qual a função pertence: nome, projeto e Logstore associados ao Simple Log Service (SLS), versão e alias. O campo qualifier contém a versão ou alias especificado no momento da invocação; já versionId indica a versão efetivamente executada.

Region

ID da região onde a função é executada. Por exemplo, cn-shanghai para a região China (Shanghai). Para obter a lista completa de IDs de região, consulte Endpoints de serviço.

AccountId

ID da conta Alibaba Cloud proprietária da função.

Método de contexto

Método

Descrição

deadline

Prazo de execução da função como um timestamp UNIX em milissegundos. Chame ctx.Deadline() para obter o valor correspondente em time.Time.

Para consultar a estrutura de dados completa, acesse o repositório fc-runtime-go-sdk no GitHub.

Ler informações de contexto

Adicione context.Context como parâmetro no seu handler. Em seguida, chame fccontext.FromContext para extrair os campos específicos do 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
}

Monitorar o tempo de execução restante

Use ctx.Deadline() para obter o prazo absoluto da invocação atual e calcular quanto tempo resta para sua função. O exemplo abaixo subtrai uma margem de 100 ms do prazo e interrompe o loop de trabalho antes que o tempo limite seja atingido.

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