Lorsque Function Compute invoque votre fonction, il transmet un objet Context à la méthode handler. Cet objet vous donne accès à l'ID de requête, aux identifiants d'invocation, aux métadonnées de la fonction, aux informations sur l'environnement d'exécution ainsi qu'à un logger intégré, sans configuration supplémentaire.
Méthodes du contexte
L'interface Context est définie dans le package com.aliyun.fc.runtime et expose les méthodes suivantes :
getRequestId()— Renvoie l'ID unique de cette invocation. Enregistrez-le pour corréler les journaux et diagnostiquer les erreurs.getExecutionCredentials()— Fournit les identifiants temporaires obtenus par Function Compute lors de l'endossement de votre rôle lié au service. Valables 36 heures, ces identifiants comprennent un AccessKey ID, un AccessKey secret et un jeton de sécurité.getFunctionParam()— Retourne les métadonnées de la fonction invoquée (nom, handler, mémoire allouée et délai d'expiration).getLogger()— Donne accès au logger encapsulé par Function Compute pour écrire des journaux structurés.getService()— Restitue les informations relatives au service associé à la fonction.getRetryCount()— Indique le nombre de tentatives de réexécution pour cette invocation.
OpenTracing
Pour plus d'informations sur le traçage distribué, consultez la rubrique Introduction au traçage distribué.
Définition de l'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();
}
Accéder à OSS avec des identifiants temporaires
L'exemple suivant utilise les identifiants temporaires du contexte pour charger un objet vers Object Storage Service (OSS). Le projet complet est disponible sur GitHub : java11-oss.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un bucket OSS (l'exemple utilise
my-bucket)Un rôle lié au service auquel est attachée la politique AliyunOSSFullAccess. Utilisez AliyunFCDefaultRole si vous n'avez pas configuré de rôle personnalisé.
Exemple
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());
}
}
Le principe consiste à appeler context.getExecutionCredentials() pour obtenir des identifiants éphémères, puis à transmettre directement l'AccessKey ID, l'AccessKey secret et le jeton de sécurité à OSSClientBuilder. Cette approche évite de stocker des identifiants permanents dans le code de votre fonction.