Amazon S3 オペレーションでの S3CrtClient の使用 - AWS SDK for C++

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon S3 オペレーションでの S3CrtClient の使用

S3CrtClient クラスは AWS SDK for C++ バージョン 1.9 で使用でき、Amazon S3 との間で大容量データファイルをアップロードおよびダウンロードする際のスループットが向上します。このリリースの改善点の詳細については、「AWS SDK for C++ v1.9 での Amazon S3 スループットの向上」を参照してください。

S3CrtClientAWS 共通ランタイム (CRT) ライブラリの上位に実装されています。

注記

不完全または部分的なアップロードに対して課金されないように、Amazon S3 バケットで AbortIncompleteMultipartUpload ライフサイクルルールを有効にすることをお勧めします。

このルールは、開始後、指定された日数内に完了しないマルチパートアップロードを中止するよう Amazon S3 に指示します。設定した時間制限を超えると、Amazon S3 はアップロードを中止して、不完全なアップロードデータを削除します。

詳細については、Amazon S3 ユーザーガイドの「バケットのライフサイクル設定の指定」を参照してください。

前提条件

作業を始める前に「AWS SDK for C++ の開始方法」を読むことをお勧めします。

コード例をダウンロードし、「コード例の開始方法」の説明に従ってソリューションをビルドします。

例を実行するには、リクエストに使用するユーザープロファイルに、AWS のサービスとアクションに対する適切なアクセス許可が付与されている必要があります。詳細については、「AWS 認証情報の提供」を参照してください。

S3CrtClient を使用したオブジェクトのアップロードとダウンロード

この例では S3CrtClient の使用方法を示します。この例では、バケットを作成し、オブジェクトをアップロードし、そのオブジェクトをダウンロードした後、ファイルとバケットを削除します。PUT オペレーションはマルチパートアップロードになります。GET オペレーションは複数の「範囲指定」 GET リクエストになります。マルチパートアップロードの詳細については、「Amazon S3 ユーザーガイド」の「マルチパートアップロードを使用したオブジェクトのアップロードとコピー」を参照してください。

この例で使用されるデータファイル ny.json は、マルチパートアップロードとしてアップロードされます。この動作は、プログラムの正常な実行後にデバッグログを表示することで確認できます。

アップロードが失敗した場合、基礎となる CRT ライブラリで AbortMultipartUpload が発行されて、既にアップロードされたパートがクリーンアップされます。ただし、すべての失敗が内部で処理できるわけではありません (ネットワークケーブルが抜けている場合など)。アカウント内に部分的にアップロードされたデータが残らないように、Amazon S3 バケットにライフサイクルルールを設定することをお勧めします (部分的にアップロードされたデータにも料金が発生します)。ライフサイクルルールの設定方法については、「Amazon S3 のコスト削減のための不完全なマルチパートアップロードの検出と削除」を参照してください。

デバッグログを使用したマルチパートアップロードの詳細の調査
  1. main() 内には、コードの更新手順が記載された「TODO」コメントがあることに注意してください。

    1. file_name: コードコメント内のリンクからサンプルデータファイル ny.json をダウンロードするか、自前の大きなデータファイルを使用します。

    2. region: 列挙値を使用して、region 変数をアカウントの AWS リージョン に更新します。自分のアカウントのリージョンを見つけるには、AWS マネジメントコンソール にログインし、右上隅にあるリージョンを確認します。

  2. 例をビルドします。

  3. 変数 file_name で指定されたファイルを実行可能ファイルのあるフォルダにコピーし、s3-crt-demo 実行可能ファイルを実行します。

  4. 実行可能ファイルのあるフォルダで、最新の .log ファイルを見つけます。

  5. ログファイルを開き、[search] (検索) を選択して、「partNumber」と入力します。

  6. ログには次のようなエントリが含まれています。アップロードされたファイルのパートごとに partNumberuploadId が指定されています。

    PUT /my-object partNumber=1&uploadId=gsk8vDbmnlA5EseDo._LDEgq22Qmt0SeuszYxMsZ9ABt503VqDIFOP8xzZI1P0zp.ToS.qo5kK16HNWogZF3KpRo.Dc7QnLZIK0BTmzCWwWoPax4T21hvP6nPdz9591F content-length:8388608 host:my-bucketasdfasdf.s3.us-east-2.amazonaws.com x-amz-content-sha256:UNSIGNED-PAYLOAD

    and

    PUT /my-object partNumber=2&uploadId=gsk8vDbmnlA5EseDo._LDEgq22Qmt0SeuszYxMsZ9ABt503VqDIFOP8xzZI1P0zp.ToS.qo5kK16HNWogZF3KpRo.Dc7QnLZIK0BTmzCWwWoPax4T21hvP6nPdz9591F content-length:8388608 host:my-bucketasdfasdf.s3.us-east-2.amazonaws.com x-amz-content-sha256:UNSIGNED-PAYLOAD

GitHub で完全な例をご覧ください。