すべてのプロダクト
Search
ドキュメントセンター

Function Compute:背景

最終更新日:Sep 02, 2024

このトピックでは、Function ComputeのJavaランタイムのコンテキストについて説明し、サンプルコードを提供します。

コンテキストとは何ですか?

Function Computeが関数を実行すると、関数の実行に使用するメソッドにコンテキストが渡されます。 コンテキストには、呼び出し、サービス、関数、トレース分析、およびランタイム環境に関する情報が含まれます。 イベントハンドラーJava HTTP関数はどちらも、入力パラメーターとしてコンテキストをサポートしています。 形式と内容は同じです。 次の表に、コンテキストに含まれるパラメーターを示します。

パラメーター

説明

RequestId

リクエストの ID。 エラーが発生した場合のトラブルシューティング用のIDを記録できます。

機能

関数の名前、ハンドラー、メモリ、タイムアウト期間など、呼び出された関数に関する基本情報。

Credentials

サービスにリンクされたロールを引き受けることによってFunction Computeが取得する一時的なAccessKeyペア。 一時的なAccessKeyペアは36時間有効です。 コードで資格情報を使用して、Object Storage Service (OSS) などの関連サービスにアクセスできます。 これにより、AccessKeyペアを関数コードに記述することなく、サービスにアクセスできます。 詳細については、「他のAlibaba Cloudサービスへのアクセス権限付与」をご参照ください。

ロガー

Function Computeによってカプセル化されたロガー。

サービス

呼び出されたサービスに関する基本情報。

OpenTracing

OpenTelemetryのマネージドサービスに関する情報。 詳細については、「概要」をご参照ください。

次のコードは、操作定義を示しています。

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

サンプルプログラム: 一時キーを使用してOSSにアクセスする

次のサンプルコードは、コンテキストで一時キーを使用してファイルをOSSにアップロードする方法の例を示しています。 詳細なコードについては、「java11-oss」をご参照ください。

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 name of the bucket, which must be created in advance. 
        String bucketName = "my-bucket";
        // Specify the endpoint of the region in which the bucket is located. We recommend that you use an internal endpoint. In this example, the internal endpoint https://oss-cn-hangzhou-internal.aliyuncs.com of the China (Hangzhou) region is used. 
        String endpoint = "https://oss-cn-hangzhou-internal.aliyuncs.com";

        // Obtain the key information. Before the execution, make sure that the service to which the function belongs is configured with a role that is attached with the AliyunOSSFullAccess policy. 
        // We recommend that you use the AliyunFCDefaultRole role. 
        Credentials creds = context.getExecutionCredentials();

        // Create an OSSClient instance. 
        /*
        The AccessKey pair of an Alibaba Cloud account can be used to access all API operations. Using these credentials to perform operations in Function Compute is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. 
        We recommend that you do not save the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources under your account may be compromised. 
        In this example, the AccessKey ID and AccessKey secret are obtained from the context. 
        */
        OSS ossClient = new OSSClientBuilder().build(endpoint, creds.getAccessKeyId(), creds.getAccessKeySecret(), creds.getSecurityToken());

        // Specify a byte array. 
        byte[] content = "Hello FC".getBytes();
        // Specify the bucket name such as examplebucket and the full path of the object such as exampledir/exampleobject.txt. Do not include the bucket name in the full path. 
        ossClient.putObject(bucketName, "exampledir/exampleobject.txt", new ByteArrayInputStream(content));

        // Close your OSSClient. 
        ossClient.shutdown();

        outputStream.write(new String("done").getBytes());
    }
}