Object Storage Service (OSS) は Function Compute と統合されているため、さまざまなアプリケーションや機能を構築できます。このトピックでは、Function Compute を使用して複数の OSS オブジェクトを 1 つの ZIP ファイルにパッケージ化し、ローカルにダウンロードする方法について説明します。
前提条件
-
Function Compute をアクティブ化しておく必要があります。
Function Compute は、Function Compute 製品詳細ページでアクティブ化できます。
-
Function Compute に OSS へのアクセス許可を付与する必要があります。
詳細については、「他の Alibaba Cloud サービスにアクセスするための Function Compute へのアクセス許可の付与」をご参照ください。
-
バケットとアプリケーション関数を同じリージョンに配置する必要があります。
-
バケット内の指定されたディレクトリに複数のオブジェクトをアップロードしておく必要があります。このチュートリアルでは、中国 (杭州) リージョンの
examplebucketバケット内のdir/ディレクトリを例として使用します。詳細については、「シンプルアップロード」をご参照ください。 -
Function Compute サービス用の RAM ロールを作成し、その ARN を記録しておく必要があります。詳細については、「信頼できる Alibaba Cloud アカウント用の RAM ロールの作成」をご参照ください。
仕組み
OSS から複数のオブジェクト、特に多数の小さなオブジェクトを一括ダウンロードすると、時間がかかり不便です。Function Compute を使用すると、まず OSS 上のオブジェクトをパッケージ化し、圧縮パッケージをローカルコンピューターにダウンロードしてから解凍できます。この方法により、一括ダウンロードを高速化できます。Function Compute を使用して OSS オブジェクトをパッケージ化およびダウンロードするワークフローを次の図に示します。
-
ユーザーが関数を呼び出し、圧縮するバケットとオブジェクトを指定します。
-
Function Compute が OSS から指定されたオブジェクトをダウンロードし、ランダムな名前で ZIP パッケージを生成します。
-
Function Compute が ZIP パッケージを OSS にアップロードします。
-
Function Compute が ZIP パッケージのダウンロード URL をユーザーに返します。
-
ユーザーは、返された永続的なダウンロード URL を使用して OSS からファイルをダウンロードします。
注意事項
-
関数のランタイム環境のディスク領域は制限されています。そのため、関数はダウンロードとアップロードの両方でデータをストリーミングし、メモリには少量のデータのみをキャッシュします。
-
プロセスを高速化するため、Function Compute は ZIP ファイルの生成中に OSS へのアップロードを行います。
-
ZIP ファイルを OSS にアップロードする際、関数は OSS のマルチパートアップロード機能を使用して、複数のスレッドでパーツを並行してアップロードします。
-
Function Compute を使用したファイル圧縮の最大処理時間は 24 時間です。(テストデータ:合計サイズ 1.06 GB の 57 個のオブジェクトを 63 秒で処理)
操作手順
この例では、Function Compute を使用して、中国 (杭州) リージョンのexamplebucketバケット内のdir/ディレクトリから複数のオブジェクトをパッケージ化し、ローカルコンピューターにダウンロードする方法について説明します。
-
アプリケーションをデプロイし、そのパブリックドメイン名を取得します。
Resource Orchestration Service (ROS) によるワンクリックデプロイ
Resource Orchestration Service (ROS) を使用して、Function Compute アプリケーションをワンクリックでデプロイします。
-
ワンクリック設定テンプレートリンクを開きます。
-
[パラメーターの設定] タブで、すべてのパラメーターをデフォルト設定のままにし、[次へ: チェックと確認] をクリックします。
-
チェックと確認 タブで、[作成] をクリックします。
スタック情報 タブの [ステータス] に [作成中] と表示されます。
-
スタックの [ステータス] が [Create_Success] に変わったら、[出力] タブをクリックしてパブリックドメイン名を見つけます。
Serverless Application Center によるワンクリックデプロイ
-
Serverless Application Center から start-zip-oss アプリケーションテンプレートをデプロイします。
[アプリケーションの作成] ページで、アプリケーションテンプレートは
start-zip-oss、デプロイタイプは 直接デプロイ です。次の主要なパラメーターを設定します。-
アプリケーション名:
start-zip-oss-obvr -
ロール名: AliyunFCServerlessDevsRole。アタッチされたポリシーには AliyunOSSReadOnlyAccess と AliyunFCFullAccess が含まれます。
-
サービスステータス:Function Compute と Object Storage Service (OSS) の両方がアクティブ化されています。
-
詳細設定: リージョンとして 中国 (杭州) を選択し、サービス名を
zip-ossに、関数名をzip-oss-funcに、RAM ロール ARN を [AliyunFcDefaultRole] (アタッチされたポリシー: AliyunOSSFullAccess および AliyunFCDefaultRolePolicy) に設定します。
設定が完了したら、[デフォルト環境を作成してデプロイ] をクリックします。
-
-
パブリックドメイン名を取得します。
-
[結果] タブをクリックします。
-
triggers フィールドで、パブリックドメイン名 (urlInternet) を取得します。
fc zip oss service. service: role: acs:ram::1379186349xxx:role/aliyunfcdefaultrole internetAccess: true name: zip-oss description: zip oss sample function: handler: main.main_handler initializationTimeout: 3 memorySize: 3072 instanceType: e1 name: zip-oss-func runtime: python3.9 description: This is default function description by fc-deploy component timeout: 1800 instanceConcurrency: 1 region: cn-hangzhou triggers: - urlInternet: https://zip-oss-func-zip-oss-ayouyexxx.cn-hangzhou.fcapp.run name: http-test type: http config: methods: - GET - POST - PUT authType: anonymous
-
Serverless Devs CLI を使用した手動デプロイ
-
Serverless Devs をインストールします。
npm install -g @serverless-devs/sインストールを確認します。
s -v次の出力は、インストールが成功したことを示します。
@serverless-devs/s: 2.1.1, s-home: /root/.s, linux-x64, node-v14.19.3 -
Serverless Devs を設定します。
s config add --AccessKeyID LTAI******** --AccessKeySecret KZo1******** --access fc-access次の表でパラメータについて説明します。
パラメータ
説明
--AccessKeyID
Function Compute にアクセスするための AccessKey ID です。
--AccessKeySecret
Function Compute にアクセスするための AccessKey Secret です。
--access
認証情報のカスタムエイリアスです。
-
start-zip-ossアプリケーションテンプレートをデプロイします。-
プロジェクトを初期化します。
-
次の例に基づいて設定項目の値を指定します。
-
プロジェクトディレクトリに移動します。
-
プロジェクトをデプロイします。
-
出力から
system_urlを記録します。
s init start-zip-oss -d start-zip-ossパラメータ
例
アプリケーションが配置されるリージョン
cn-hangzhou
アプリケーションが属する Function Compute サービス
start-zip-oss
アプリケーションの関数名
zip-oss-func
アプリケーションが属する Function Compute サービスに設定された RAM ロールの ARN
acs:ram::137918634953****:role/test-role
cd start-zip-osss deploy -yfc-zip-oss-service: region: cn-hangzhou service: name: start-zip-oss function: name: zip-oss-func runtime: python3.9 handler: main.main_handler memorySize: 3072 timeout: 1800 url: system_url: https://zip-oss-func-start-zip-oss-ayouye****.cn-hangzhou.fcapp.run triggers: - type: http name: http-test -
-
-
サーバーまたは ECS インスタンスで次のコマンドを実行して、
event.jsonファイルを生成します。このファイルに、バケット名とダウンロードするオブジェクトを含むディレクトリを指定します。cat <<EOF > event.json { "bucket": "examplebucket", "source-dir": "dir/" } EOF説明source-dirパラメータには、バケット内のディレクトリを指定する必要があります。ルートディレクトリはサポートされていません。 -
次のコマンドは、サンプルリクエストです。
curl -v -L -o oss.zip -d @./event.json https://zip-oss-func-zip-oss-ayouye****.cn-hangzhou.fcapp.run-
oss.zip:ダウンロードした ZIP パッケージのローカル保存パス。説明Windows 標準の解凍ツールで失敗する場合は、7-Zip や WinRAR などのサードパーティツールを使用してください。
-
https://zip-oss-func-zip-oss-ayouye****.cn-hangzhou.fcapp.run:プロジェクトをデプロイしたときに返されたsystem_url。
匿名ではなく認証された HTTP 関数として呼び出すには、次のいずれかの SDK を使用します。
-
よくある質問
ウォーターマークの追加
期限付きダウンロード URL
関連ドキュメント
-
Function Compute の機能と課金の詳細については、「Function Compute とは」および「料金の概要」をご参照ください。
-
Function Compute と OSS の統合を示すテンプレートとサンプルアプリケーションについては、「サンプルコード」をご参照ください。
-
Function Compute を OSS と併用するその他の例については、「Function Compute を使用した OSS 内の ZIP ファイルの自動解凍」をご参照ください。