Object Storage Service (OSS) で Object FC アクセスポイントを作成して、OSS を Function Compute (FC) と統合できます。Object FC アクセスポイントを使用すると、GetObject リクエストによって関数が自動的にトリガーされ、処理された結果がアプリケーションに返されます。この統合により、データ処理とビジネスワークフローが自動化されます。
プロセスの概要
次の図は、Object FC アクセスポイントの仕組みを示しています。
バケットのオーナーは、Function Compute で作成された関数に関連付けられた Object FC アクセスポイントを作成します。
Object FC アクセスポイントは、指定された設定に基づいて自動的に作成されます。
ユーザーは、Object FC アクセスポイントを使用して OSS に GetObject リクエストを送信します。OSS は定義された関数を呼び出して、リクエストされたデータを処理し、ユーザーに返します。
制限
制限 | 説明 |
作成方法 | Object FC アクセスポイントは、OSS コンソールまたは OSS API を使用してのみ作成できます。OSS SDK または ossutil を使用して Object FC アクセスポイントを作成することはできません。 |
Object FC アクセスポイントの数 |
|
変更ルール | Object FC アクセスポイントを作成した後は、そのポリシーのみを変更できます。名前やエイリアスなど、Object FC アクセスポイントの基本情報は変更できません。 |
アクセス方法 | Object FC アクセスポイントは匿名アクセスをサポートしていません。 |
前提条件
Object Storage Service (OSS)
バケットを作成する、およびバケットが配置されているリージョンでアクセスポイントを作成する。
Function Compute (FC)
サービスリンクロール AliyunServiceRoleForFC を作成します。初めて Function Compute 3.0 コンソールにログインする場合は、指示に従ってロールを作成してください。
FC 関数を作成する。このトピックでは、イベント関数を例として使用します。FC 関数は、OSS SDK for Java、Python、または Go を使用して GetObject 操作を呼び出すとトリガーされます。これらの SDK を使用して関数コードをデプロイする場合、対応するランタイム環境の要件を満たす関数を作成する必要があります。
Java SDK を使用して関数コードをデプロイする場合、[ランタイム] が Java 11 の関数を作成します。
Python SDK を使用して関数コードをデプロイする場合、[ランタイム] が Python 3.10 の関数を作成します。
Go SDK を使用して関数コードをデプロイする場合、[ランタイム] が Go 1 の関数を作成します。
RAM ロールを FC 関数にアタッチします。RAM ロールには
oss:WriteGetObjectResponse権限を付与する必要があります。詳細については、「RAM ロールに権限を付与する」をご参照ください。次のコードはポリシードキュメントを示しています。{ "Statement": [ { "Action": "oss:WriteGetObjectResponse", "Effect": "Allow", "Resource": "*" } ], "Version": "1" }
手順
ステップ 1: Object FC アクセスポイントを作成する
OSS コンソールにログインします。左側のナビゲーションウィンドウで、[Object FC アクセスポイント] をクリックします。
[Object FC アクセスポイント] ページで、[Object FC アクセスポイントの作成] をクリックします。[Object FC アクセスポイントの作成] パネルで、次のパラメーターを設定し、[OK] をクリックします。
設定項目
説明
リージョン
関連付けるアクセスポイントが配置されているリージョンを選択します。これは、OSS バケットが配置されているリージョンでもあります。
Object FC アクセスポイント名
Object FC アクセスポイントの名前を入力します。
サポートするアクセスポイント
作成したアクセスポイントを選択します。
OSS API
[GetObject] を選択します。
FC 関数の呼び出し
ターゲット FC 関数を選択し、[FC 関数は Range GetObject リクエストをサポートします] チェックボックスをオンにします。
FC 関数バージョン
作成した関数のバージョンを選択します。デフォルトでは、LATEST バージョンが使用されます。
ロールの権限付与を完了します。
重要Object FC アクセスポイント機能を初めて使用する場合は、[アクセスポイント権限委任] をクリックしてロールの権限付与を完了します。そうしないと、Object FC アクセスポイントを使用して関数にアクセスできません。

FC 関数は、Object FC アクセスポイントのエイリアスを使用して GetObject 操作を呼び出した場合にのみトリガーされます。Object FC アクセスポイントのエイリアスを使用して GetObject 以外の操作を呼び出すと、システムは自動的に標準アクセスポイントに切り替わり、標準アクセスポイントのアクセスポリシーに従います。
ステップ 2: 関数コードを記述する
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
上部のナビゲーションバーでリージョンを選択します。[関数] ページで、ターゲット関数をクリックします。
を選択します。コードエディタで、
index.pyファイルのコードを次のサンプルコードに置き換えます。このトピックでは、ランタイムが Python 3.10 の関数を例として使用します。サンプルコードの詳細については、「リクエスト関数を記述する」をご参照ください。# -*- coding: utf-8 -*- import io from PIL import Image import oss2 import json # この例では、中国 (青島) リージョンのエンドポイントを使用します。 endpoint = 'http://oss-cn-qingdao.aliyuncs.com' fwd_status = '200' # Fc 関数のエントリ def handler(event, context): evt = json.loads(event) creds = context.credentials # security_token を忘れないでください auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token) headers = dict() event_ctx = evt["getObjectContext"] route = event_ctx["outputRoute"] token = event_ctx["outputToken"] print(evt) endpoint = route service = oss2.Service(auth, endpoint) # Image メソッドを呼び出して 200 × 200 ピクセルのオブジェクトを作成し、オブジェクトに赤い長方形を描画します。 # 調整後、write_get_object_response リクエストの本文にコンテンツを書き込みます。 image = Image.new('RGB', (200, 200), color=(255, 0, 0)) transformed = io.BytesIO() image.save(transformed, "png") resp = service.write_get_object_response(route, token, fwd_status, transformed.getvalue(), headers) print('status: {0}'.format(resp.status)) print(resp.headers) return 'success'[コード] タブで、 を選択してターミナルウィンドウを開きます。次のコマンドを実行して、OSS Python SDK のバージョンを更新します。
pip install oss2 "pyopenssl>=23.0.0" "urllib3==1.26.15" "charset-normalizer==2.1.1" -t .[コードのデプロイ] をクリックします。
ステップ 3: Object FC アクセスポイントを使用する
Object FC アクセスポイントを作成すると、OSS は自動的にそのエイリアスを生成します。このエイリアスを使用して GetObject 操作を呼び出すことができます。
OSS コンソールにログインします。左側のナビゲーションウィンドウで、[Object FC アクセスポイント] をクリックします。
Object FC アクセスポイントのリストで、ターゲットアクセスポイントの [Object FC アクセスポイントエイリアス] を取得します。

次のいずれかの方法を使用して、Object FC アクセスポイントのエイリアスで
GetObject操作を呼び出し、関数が自動的にトリガーされるかどうかをテストします。SDK を使用する
OSS SDK for Python をインストールします。OSS SDK for Python 2.18.3 以降のみが、Object FC アクセスポイントのエイリアスを使用した OSS リソースへのアクセスをサポートします。
pip3 install ossお使いのコンピューターで次の Python サンプルスクリプトを実行します。
次のサンプルコードの
endpoint、bucketname、およびbucket.get_object_to_fileパラメーターを実際の値に置き換えます。endpoint: OSS リージョンのエンドポイント。bucketname: 前のステップで取得したターゲット Object FC アクセスポイントのエイリアス。bucket.get_object_to_file:yourObjectNameを OSS バケット内のオブジェクトの名前に、yourLocalFileをファイルを保存するローカルパスに置き換えます。
# -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # Object FC アクセスポイントのパブリックエンドポイントを使用して OSS リソースにアクセスします。 endpoint = "https://oss-cn-qingdao.aliyuncs.com" # Object FC アクセスポイントの内部エンドポイントを使用して OSS リソースにアクセスします。 # endpoint = "https://oss-cn-qingdao-internal.aliyuncs.com" # Object FC アクセスポイントのエイリアスを入力します。 bucket_name = "****-d54843759613953fe5b17b6f16d7****-opapalias" bucket = oss2.Bucket(auth, endpoint=endpoint, bucket_name=bucket_name) # yourObjectName をオブジェクトの完全なパスに設定します。完全なパスにバケット名を含めないでください。 # yourLocalFile をローカルファイルのパスに設定します。指定したローカルファイルが存在する場合は上書きされます。存在しない場合は作成されます。 bucket.get_object_to_file('yourObjectName', 'yourLocalFile')
ossutil コマンドラインツールを使用する
ossutil をインストールし、次のコマンドを実行してテストします。
ossutil cp oss://****-d54843759613953fe5b17b6f16d7****-opapalias/demo.txt /Users/demo/Desktop/demo.txtREST API を使用する
GetObject リクエストを送信して OSS リソースにアクセスする場合、前のステップで取得した Object FC アクセスポイントのエイリアスを Host ヘッダーに指定する必要があります。次のコードに例を示します。
GET /ObjectName HTTP/1.1 Host: fc-ap-01-3b00521f653d2b3223680ec39dbbe2****-opapalias.oss-cn-qingdao.aliyuncs.com Date: GMT Date Authorization: SignatureValue