Quando o Function Compute invoca sua função, ele passa um objeto Context para o método handler. Esse objeto permite acessar o ID da solicitação, as credenciais de invocação, os metadados da função, as informações do ambiente de execução e um logger integrado, sem configuração adicional.
Rastreamento distribuído
Métodos do Context
A interface Context está definida no pacote com.aliyun.fc.runtime e expõe os seguintes métodos:
getRequestId()— Retorna o ID exclusivo desta invocação. Registre-o para correlacionar logs e solucionar erros.getExecutionCredentials()— Retorna as credenciais temporárias obtidas pelo Function Compute ao assumir a função vinculada ao serviço. Essas credenciais têm validade de 36 horas e incluem AccessKey ID, AccessKey secret e token de segurança.getFunctionParam()— Fornece metadados da função invocada, como nome, handler, memória e tempo limite.getLogger()— Disponibiliza o logger encapsulado pelo Function Compute para gravar logs estruturados.getService()— Recupera informações sobre o serviço associado à função.getRetryCount()— Indica o número de tentativas de repetição desta invocação.
OpenTracing
Para obter mais informações sobre rastreamento distribuído, consulte Introdução ao rastreamento distribuído.
Defina a interface:
package com.aliyun.fc.runtime;
public interface Context {
public String getRequestId();
public Credentials getExecutionCredentials();
public FunctionParam getFunctionParam();
public FunctionComputeLogger getLogger();
public Service getService();
# public OpenTracing getTracing();
public int getRetryCount();
}
Acessar o OSS com credenciais temporárias
O exemplo a seguir usa credenciais temporárias do contexto para fazer upload de um objeto no Object Storage Service (OSS). O projeto completo está disponível no GitHub: java11-oss.
Pré-requisitos
Antes de começar, verifique se você tem:
Um bucket do OSS (o exemplo usa
my-bucket)Uma função vinculada ao serviço com a política AliyunOSSFullAccess anexada. Use AliyunFCDefaultRole caso não tenha configurado uma função personalizada.
Exemplo
package example;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.Credentials;
import com.aliyun.fc.runtime.StreamRequestHandler;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
public class App implements StreamRequestHandler {
@Override
public void handleRequest(
InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
// The bucket must exist before running this function.
String bucketName = "my-bucket";
// Use an internal endpoint to avoid cross-region data transfer fees.
// This example uses the internal endpoint for the China (Hangzhou) region.
String endpoint = "https://oss-cn-hangzhou-internal.aliyuncs.com";
// Get temporary credentials from the context.
// These credentials are short-lived and scoped to your service-linked role —
// no need to hardcode AccessKey pairs in your function code.
Credentials creds = context.getExecutionCredentials();
// Build an OSS client using the temporary credentials.
OSS ossClient = new OSSClientBuilder().build(
endpoint,
creds.getAccessKeyId(),
creds.getAccessKeySecret(),
creds.getSecurityToken()
);
// Upload a byte array as an object.
// Do not include the bucket name in the object path.
byte[] content = "Hello FC".getBytes();
ossClient.putObject(bucketName, "exampledir/exampleobject.txt", new ByteArrayInputStream(content));
ossClient.shutdown();
outputStream.write(new String("done").getBytes());
}
}
Chame context.getExecutionCredentials() para obter credenciais de curta duração e passe o AccessKey ID, o AccessKey secret e o token de segurança diretamente para o OSSClientBuilder. Essa abordagem evita armazenar credenciais permanentes no código da função.