Object Storage Service (OSS) は関数計算をサポートしています。 関数計算を使用して、あらゆる種類のアプリケーションと関数を構築できます。 このトピックでは、関数計算を使用して複数のオブジェクトをパッケージに圧縮し、そのパッケージを OSS からローカルコンピュータにダウンロードする方法について説明します。
前提条件
関数計算がアクティブ化されている。
Function Compute 製品ページで関数計算をアクティブ化できます。
関数計算には、OSS にアクセスするための権限が付与されています。
詳細については、「他の Alibaba Cloud サービスにアクセスするための権限を関数計算に付与する」をご参照ください。
OSS バケットは、関数と同じリージョンに存在する必要があります。
複数のオブジェクトがバケットの特定のディレクトリにアップロードされます。 この例では、複数のオブジェクトが中国 (杭州) リージョンの examplebucket バケットの dir ディレクトリにアップロードされます。 詳細については、「シンプルアップロード」をご参照ください。
関数計算のアプリケーションが属するサービス用に RAM ロールが作成され、RAM ロールの Alibaba Cloud Resource Name (ARN) が記録されます。 詳細については、「信頼された Alibaba Cloud アカウントの RAM ロールを作成する」をご参照ください。
ソリューション
一度に OSS から複数のオブジェクトをダウンロードすると、特別なケースでは不便になる可能性があります。 たとえば、多数の小さなオブジェクトを一度にダウンロードすると、ダウンロード速度が遅くなります。 一度に多数のオブジェクトをダウンロードする際のエクスペリエンスを向上させるには、関数計算を使用してオブジェクトをパッケージに圧縮し、パッケージをローカルコンピュータにダウンロードしてから、パッケージを解凍します。 次の図は、関数計算を使用してオブジェクトをパッケージに圧縮し、パッケージをダウンロードする方法を示しています。
ユーザーは関数を呼び出し、圧縮するオブジェクトと、オブジェクトが格納されているバケットを指定します。
関数計算は、指定されたオブジェクトを OSS からダウンロードし、ランダムな名前を持つ ZIP パッケージを生成します。
関数計算は、ZIP パッケージを OSS にアップロードします。
関数計算は、ZIP パッケージをユーザーにダウンロードするために使用される URL を返します。
ユーザーは、URL を使用して OSS から ZIP パッケージをダウンロードします。この URL は長期間有効です。
使用上の注意
関数のディスク容量が限られているため、ストリーミングダウンロードとストリーミングアップロードを使用して ZIP パッケージを転送します。 少量のデータのみがメモリにキャッシュされます。
ZIP パッケージの転送を高速化するために、関数計算は ZIP パッケージを生成し、同時に OSS にアップロードします。
マルチパートアップロードを使用して、ZIP パッケージを OSS に並行してパーツでアップロードします。
関数計算は、オブジェクトをパッケージに圧縮するのに最大 24 時間かかります。 テストデータによると、関数計算は合計サイズが 1.06 GB の 57 個のオブジェクトをパッケージに圧縮するのに約 63 秒かかりました。
手順
この例では、関数計算を使用して、中国 (杭州) リージョンの examplebucket バケットの dir/ ディレクトリにある複数のオブジェクトをローカルコンピュータにダウンロードします。
アプリケーションをデプロイし、そのパブリックドメイン名を取得します。
ROS を使用してアプリケーションをデプロイする
Resource Orchestration Service (ROS) を使用して関数計算アプリケーションをデプロイし、そのパブリックドメイン名を取得するには、次の手順を実行します。
ROS コンソールで スタックの作成 ウィザードを使用します。
[パラメータの構成] ステップで、すべてのパラメータのデフォルト設定を保持し、[次へ:確認] をクリックします。
[確認] ステップで、[作成] をクリックします。
表示されるページの [スタック情報] タブに、スタックのステータスが [作成中] と表示されます。
スタックが [作成済み] ステータスになったら、[出力] タブをクリックしてパブリックドメイン名を表示します。
Serverless Application Center を使用してアプリケーションをデプロイする
Serverless Application Center にアクセスして、start-zip-oss アプリケーションテンプレートをデプロイします。
デプロイメントタイプで [直接デプロイ] を選択します。 アプリケーションテンプレートのバケットのリージョンを選択します。 その他のパラメータのデフォルト設定を保持し、「デフォルト環境の作成とデプロイ」をクリックします。 次の図は、構成の詳細を示しています。

パブリックドメイン名を取得します。
表示されるページの「バージョンのデプロイ」パネルで、[結果] タブをクリックします。
トリガーフィールドで、urlInternet パラメータからパブリックドメイン名を取得します。

Serverless Devs を使用してアプリケーションをデプロイする
Serverless Devs をインストールします。
curl -o- -L http://cli.so/install.sh | bashServerless Devs がインストールされているかどうかを確認します。
s -vServerless Devs がインストールされている場合、次の出力が返されます。
@serverless-devs/s: 2.1.1, s-home: /root/.s, linux-x64, node-v14.19.3Serverless Devs を構成します。
s config add --AccessKeyID LTAI******** --AccessKeySecret KZo1******** --access fc-access次の表は、前のコマンドのパラメータについて説明しています。
パラメータ
説明
--AccessKeyID
関数計算へのアクセスに使用される AccessKey ID。
--AccessKeySecret
関数計算へのアクセスに使用される AccessKey シークレット。
--Access
カスタムキーエイリアス。
start-zip-oss アプリケーションテンプレートをデプロイします。
プロジェクトを初期化します。
次の表は、start-zip-oss アプリケーションテンプレートのサンプル構成について説明しています。
プロジェクトを開始します。
プロジェクトをデプロイします。
system_url の戻り値を記録します。
s init start-zip-oss -d start-zip-oss構成項目
例
アプリケーションをデプロイするリージョンの ID
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: python2.7 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
次のコマンドを実行して 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/test/oss.zip: dir/ ディレクトリにオブジェクトを格納するために使用されるローカルパス。
説明Windows の組み込み解凍ツールが失敗した場合は、サードパーティの解凍ツール (7-Zip や WinRAR など) を使用してください。
https://zip-oss-func-zip-oss-ayouye****.cn-hangzhou.fcapp.run: プロジェクトのデプロイ時に返される system_url の値。
前の例の匿名の非認証 HTTP 関数を認証済み HTTP 関数に変更する場合は、次の OSS SDK のいずれかを使用できます。