Object Storage Service (OSS) からオブジェクトをダウンロードする場合、サイズが小さいが数が多い場合、オブジェクトを1つずつダウンロードするのは不便です。 Function Computeを使用して、OSSからオンプレミスのコンピューターに複数のオブジェクトを一度にパッケージ化してダウンロードできます。 このソリューションにより、複数のオブジェクトを低コストですばやくダウンロードできます。
プロセスと原則
プロセス
次のフローチャートは、Function Computeを使用してOSSから一度に複数のオブジェクトをダウンロードするプロセスを説明しています。
ユーザーが関数を呼び出し、圧縮するOSSバケットとオブジェクトを指定します。
Function ComputeOSSからオブジェクトをダウンロードし、オブジェクトをZIPファイルに圧縮します。
Function ComputeはZIPファイルをOSSにアップロードします。
Function Computeは、OSSのZIPファイルのURLを返します。
ステップ4で返されるURLを使用してZIPファイルをダウンロードします。
前提条件
Function Computeが有効化されています。 詳細については、「Function Computeの有効化」をご参照ください。
OSSが有効化され、バケットがOSSに作成されます。 詳細については、「OSSコンソールを使用して開始する」をご参照ください。
サーバーレスDevsがインストールおよび構成されています。 詳細については、「Serverless Devsのインストール」および「Serverless Devsの設定」をご参照ください。
手順
次のコマンドを実行して、プロジェクトを初期化します。
sudo s init start-zip-oss -d start-zip-oss
次のコマンドを実行してプロジェクトにアクセスし、プロジェクトをデプロイします。
cd start-zip-oss && sudo s deploy - y
デプロイ後、次のコードスニペットに似た出力が返されます。
system_url
の値を記録します。 この値は、関数を呼び出すときに使用されます。Checking Service, Function, Triggers (2.44s) Creating Service, Function, Triggers (1.18s) ...... fc-zip-oss-service: region: cn-hangzhou service: name: 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-zip-oss-****.cn-hangzhou.fcapp.run system_intranet_url: https://zip-oss-func-zip-oss-****.cn-hangzhou-vpc.fcapp.run triggers: - type: http name: http-test
アプリケーションがデプロイされたら、デプロイされた関数を呼び出して、一度に複数のファイルをダウンロードします。
start-zip-oss
ディレクトリにevent.jsonファイルを作成し、バケット名とダウンロードするオブジェクトをファイルに指定します。source-dir
を使用して、ダウンロードするオブジェクトが配置されているディレクトリを指定します。cat <<EOF > event.json { "bucket": "bucketname", "source-dir": "filepath/" } EOF
source-files
を使用して、ダウンロードするオブジェクトのリストを指定します。cat <<EOF > event.json { "bucket": "bucketname", "source-files": ["files1.txt","filepath/files2.txt"] } EOF
関数を直接呼び出すには、curlコマンドを使用します。
start-zip-oss
ディレクトリに圧縮ファイルを格納するフォルダを作成します。 この例では、tmp
フォルダが使用されています。 curlコマンドの例を次に示します。説明サンプルコマンドのエンドポイントを、アプリケーションのデプロイ後に返される
system_url
の値に置き換えます。curl -v -L -o /tmp/my.zip -d @./event.json https://zip-oss-func-zip-oss-****.cn-hangzhou.fcapp.run
呼び出し後、ダウンロードした圧縮ファイルを
start-zip-oss/tmp
フォルダーに表示できます。 OSSコンソールにログインし、ダウンロードした圧縮ファイルをバケットの出力
ディレクトリに表示します。
テストデータ
テスト | オブジェクトの数 | 圧縮前の合計サイズ | 圧縮後の合計サイズ | 実行期間 |
1 | 7 | 1.2 MB | 1.16 MB | 0.4s |
2 | 57 | 1.06 GB | 0.91 GB | 63s |
説明:
テスト1では、Function Computeを使用して一度に複数のオブジェクトをダウンロードすると、オブジェクトのストレージスペースが削減されることが示されています。
テスト2では、Function Computeを使用して一度に複数のオブジェクトをダウンロードすると、短時間で大量のオブジェクトをダウンロードできることが示されています。
より多くの情報
function Computeに関数をデプロイして、ZIPファイルをOSSに自動的に解凍することができます。 OSSで自動解凍を設定することもできます。 詳細については、「Function Computeを使用してOSSのファイルを自動的に解凍する」および「ZIPパッケージの解凍」をご参照ください。
10を超えるトリガーをバケットに関連付ける場合は、EventBridgeベースのOSSトリガーを作成できます。 詳細については、「EventBridgeベースのOSSトリガーの設定」をご参照ください。