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

Function Compute:Function Computeを使用してOSSから複数のオブジェクトをパッケージ化およびダウンロードする

最終更新日:Sep 09, 2024

Object Storage Service (OSS) からオブジェクトをダウンロードする場合、サイズが小さいが数が多い場合、オブジェクトを1つずつダウンロードするのは不便です。 Function Computeを使用して、OSSからオンプレミスのコンピューターに複数のオブジェクトを一度にパッケージ化してダウンロードできます。 このソリューションにより、複数のオブジェクトを低コストですばやくダウンロードできます。

プロセスと原則

プロセス

次のフローチャートは、Function Computeを使用してOSSから一度に複数のオブジェクトをダウンロードするプロセスを説明しています。

image
  1. ユーザーが関数を呼び出し、圧縮するOSSバケットとオブジェクトを指定します。

  2. Function ComputeOSSからオブジェクトをダウンロードし、オブジェクトをZIPファイルに圧縮します。

  3. Function ComputeはZIPファイルをOSSにアップロードします。

  4. Function Computeは、OSSのZIPファイルのURLを返します。

  5. ステップ4で返されるURLを使用してZIPファイルをダウンロードします。

原則

前のフローチャートのステップ2ステップ3の実装方法を次の図に示します。

image

このソリューションは、次の利点をもたらします。

  • ストリーミングダウンロードとアップロードの方法が使用されます。 このようにして、少量のデータのみがメモリにキャッシュされ、関数実行環境の限られたディスク領域は消費されません。

  • OSSのマルチパートアップロード機能は、マルチスレッドモードでZIPファイルの一部をキューに同時にアップロードするために使用されます。

前提条件

手順

  1. 次のコマンドを実行して、プロジェクトを初期化します。

    sudo s init start-zip-oss -d start-zip-oss 
  2. 次のコマンドを実行してプロジェクトにアクセスし、プロジェクトをデプロイします。

    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
  3. アプリケーションがデプロイされたら、デプロイされた関数を呼び出して、一度に複数のファイルをダウンロードします。

    1. 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
    2. 関数を直接呼び出すには、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を使用して一度に複数のオブジェクトをダウンロードすると、短時間で大量のオブジェクトをダウンロードできることが示されています。

より多くの情報