

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

# Amazon S3 オペレーションでの `S3CrtClient` の使用
<a name="examples-s3-crt"></a>

`S3CrtClient` クラスは のバージョン 1.9 で利用 AWS SDK for C\$1\$1 でき、Amazon S3 との間で大きなデータファイルをアップロードおよびダウンロードするスループットが向上します。このリリースの改善点の詳細については、[「v1.9 による Amazon S3 スループットの向上」を参照してください。 AWS SDK for C\$1\$1](https://github.com/aws/aws-sdk-cpp/wiki/Improving-S3-Throughput-with-AWS-SDK-for-CPP-v1.9)

`S3CrtClient` は [AWS 共通ランタイム (CRT) ライブラリ](https://docs.aws.amazon.com/sdkref/latest/guide/common-runtime.html)の上位に実装されています。

**注記**  
不完全または部分的なアップロードに対して課金されないように、Amazon S3 バケットで [AbortIncompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpu-abort-incomplete-mpu-lifecycle-config.html) ライフサイクルルールを有効にすることをお勧めします。  
このルールは、開始後、指定された日数内に完了しないマルチパートアップロードを中止するよう Amazon S3 に指示します。設定した時間制限を超えると、Amazon S3 はアップロードを中止して、不完全なアップロードデータを削除します。  
詳細については、Amazon S3 ユーザーガイドの「[バケットのライフサイクル設定の指定](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html)」を参照してください。

## 前提条件
<a name="codeExamplePrereq"></a>

作業を始める前に「[AWS SDK for C\$1\$1の開始方法](getting-started.md)」を読むことをお勧めします。

コード例をダウンロードし、「[コード例の開始方法](getting-started-code-examples.md)」の説明に従ってソリューションをビルドします。

例を実行するには、コードがリクエストを行うために使用するユーザープロファイルに適切なアクセス許可が必要です AWS ( サービスと アクション用）。詳細については、[AWS 「認証情報の提供](credentials.md)」を参照してください。

## `S3CrtClient` を使用したオブジェクトのアップロードとダウンロード
<a name="stream"></a>

この例では [https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3-crt/html/class_aws_1_1_s3_crt_1_1_s3_crt_client.html](https://docs.aws.amazon.com/sdk-for-cpp/latest/api/aws-cpp-sdk-s3-crt/html/class_aws_1_1_s3_crt_1_1_s3_crt_client.html) の使用方法を示します。この例では、バケットを作成し、オブジェクトをアップロードし、そのオブジェクトをダウンロードした後、ファイルとバケットを削除します。PUT オペレーションはマルチパートアップロードになります。GET オペレーションは複数の「範囲指定」 GET リクエストになります。マルチパートアップロードの詳細については、「Amazon S3 ユーザーガイド」の「[マルチパートアップロードを使用したオブジェクトのアップロードとコピー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)」を参照してください。

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

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

**デバッグログを使用したマルチパートアップロードの詳細の調査**

1. `main()` 内には、コードの更新手順が記載された「TODO」コメントがあることに注意してください。

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

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

1. 例をビルドします。

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

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

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

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

    `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`

    と 

    `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](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3-crt/s3-crt-demo.cpp) で完全な例をご覧ください。