AWS SDK for PHP バージョン 3 に関するよくある質問 - AWS SDK for PHP

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

AWS SDK for PHP バージョン 3 に関するよくある質問

クライアントではどのようなメソッドを使用できますか?

AWS SDK for PHP では、サービス記述と動的 __call() マジックメソッドを使用して、API オペレーションが実行されます。ウェブサービスのクライアントで使用可能なメソッドの一覧については、クライアントの API ドキュメントを参照してください。

cURL の SSL 証明書エラーにはどのように対処すればいいですか?

この問題は、古くなった CA バンドルを cURL および SSL で使用した場合に発生する可能性があります。この問題を回避するには、サーバーの CA バンドルを更新するか、または新しい CA バンドルを cURL ウェブサイトから直接ダウンロードします。

デフォルトでは、PHP のコンパイル時に設定されていた CA バンドルが AWS SDK for PHP で使用されます。PHP で使用されるデフォルトの CA バンドルを変更するには、PHP.ini 構成設定で openssl.cafile を CA ディスク上の CA ファイルのパスに変更します。

クライアントではどの API バージョンを使用できますか?

クライアントの作成時には version オプションが必要です。使用可能な API バージョンの一覧については、各クライアントの API ドキュメントのページ ::aws-php-class:<index.html> を参照してください。特定の API バージョンをロードできない場合は、AWS SDK for PHP のコピーの更新が必要になることがあります。

「version」の設定値に文字列 latest を指定すると、クライアントの API プロバイダで見つかった (デフォルトの api_provider では、API モデルの SDK の src/data ディレクトリがスキャンされる)、使用可能な最新の API バージョンが使用されます。

警告

API の更新が含まれている新しいマイナーバージョンの SDK を取り込むと本稼働アプリケーションが中断される可能性があるため、本稼働アプリケーションで latest を使用することはお勧めしません。

クライアントではどのリージョンのバージョンを使用できますか?

region オプションは、クライアントの作成時に必要であり、文字列値を使用して指定します。使用可能な AWS リージョンとエンドポイントの一覧については、AWS 全般のリファレンス の「AWS リージョンとエンドポイント」を参照してください。

// Set the Region to the EU (Frankfurt) Region. $s3 = new Aws\S3\S3Client([ 'region' => 'eu-central-1', 'version' => '2006-03-01' ]);

サイズが 2 GB を越えるファイルをアップロードおよびダウンロードできないのはなぜですか?

PHP の整数型は符号付き整数であり、多くのプラットフォームでは 32 ビット整数が使用されているため、AWS SDK for PHP は 32 ビットスタック (CPU、OS、ウェブサーバー、PHP バイナリを含む) では 2 GB を越えるサイズのファイルを正しく処理できません。これは、よく知られている PHP の問題です。Microsoft Windows の場合は、PHP 7 のビルドでのみ 64 ビット整数がサポートされています。

解決策として、最新バージョンの PHP がインストールされている 64 ビット Linux スタック (64 ビット Amazon Linux AMI など) を使用することをお勧めします。

詳細については、「PHP filesize: 返り値」を参照してください。

送信されるデータはどのようにして確認できますか?

クライアントのコンストラクタで debug オプションを使用すると、送信されるデータなどのデバッグ情報を取得できます。このオプションを true に設定すると、実行されるコマンドの変異、送信されるリクエスト、受信されたレスポンス、および処理された結果がすべて STDOUT に出力されます。その出力には、ネットワーク経由で送受信されるデータも含まれています。

$s3Client = new Aws\S3\S3Client([ 'region' => 'us-standard', 'version' => '2006-03-01', 'debug' => true ]);

リクエストに任意のヘッダーを設定するにはどうすればいいですか?

Aws\HandlerList または Aws\CommandInterfaceAws\ClientInterface にカスタムミドルウェアを追加することによって、サービスオペレーションに任意のヘッダーを追加できます。次の例では、Aws\Middleware::mapRequest ヘルパーメソッドを使用して、Amazon S3 の特定の PutObject オペレーションに X-Foo-Baz ヘッダーを追加する方法を示しています。

詳細については、「mapRequest」を参照してください。

任意のリクエストに署名するにはどうすればいいですか?

SDK の :aws-php-class: SignatureV4 class <class-Aws.Signature.SignatureV4.html> を使用して、任意の :aws-php-class: PSR-7 request <class-Psr.Http.Message.RequestInterface.html> に署名できます。

署名の例については、「AWS SDK for PHP バージョン 3 によるカスタム Amazon CloudSearch ドメインリクエストへの署名」を参照してください。

送信する前にコマンドを変更するにはどうすればいいですか?

Aws\HandlerList または Aws\CommandInterfaceAws\ClientInterface にカスタムミドルウェアを追加することによって、コマンドを送信する前にそのコマンドを変更できます。次の例では、送信する前にコマンドにカスタムコマンドパラメータを追加する (基本的にはデフォルトのオプションを追加する) 方法を示しています。この例では、Aws\Middleware::mapCommand ヘルパーメソッドを使用しています。

詳細については、「mapCommand」を参照してください。

CredentialsException とは何ですか?

AWS SDK for PHP の使用時に Aws\Exception\CredentialsException が発生する場合は、どの認証情報でも SDK が指定されていないために、SDK が環境内で認証情報を見つけることができなかったことを意味しています。

認証情報を使用せずにクライアントをインスタンス化する場合、サービスオペレーションの初回実行時に SDK は認証情報を見つけようとします。SDK は、特定の環境変数をチェックした後に、設定済みの Amazon EC2 インスタンスでのみ利用できるインスタンスプロファイルの認証情報を調べます。認証情報がまったく指定されていないかまたは見つからない場合に、Aws\Exception\CredentialsException がスローされます。

このエラーが発生した場合にインスタンスプロファイルの認証情報を使用するには、SDK が実行されている Amazon EC2 インスタンスに適切な IAM ロールを設定しておく必要があります。

このエラーが発生した場合にインスタンスプロファイルの認証情報を使用しない場合は、SDK に認証情報を適切に指定しておく必要があります。

詳細については、「AWS SDK for PHP バージョン 3 の認証情報」を参照してください。

AWS SDK for PHP は HHVM で動作しますか?

現時点では、AWS SDK for PHP は HHVM では実行されず、HHVM での yield セマンティクスに関する問題が解決されるまで実行できません。

SSL を無効にするにはどうすればいいですか?

クライアントのファクトリメソッドの scheme パラメータを「http」に設定することによって、SSL を無効にできます。一部のサービスでは http アクセスがサポートされていないことに注意する必要があります。リージョン、エンドポイント、およびサポートされているスキームの一覧については、AWS 全般のリファレンス の「AWS のリージョンとエンドポイント」を参照してください。

$client = new Aws\DynamoDb\DynamoDbClient([ 'version' => '2012-08-10', 'region' => 'us-west-2', 'scheme' => 'http' ]);
警告

SSL ではすべてのデータが暗号化される必要があり、接続ハンドシェイクを完了するために TCP のみの場合より多くの TCP パケットが必要であるため、SSL を無効にするとパフォーマンスが多少改善される可能性があります。ただし、SSL が無効になっている場合、すべてのデータは暗号化されずにネットワーク経由で送信されます。SSL を無効にする前に、ネットワークでのセキュリティへの影響と傍受の可能性を注意深く検討する必要があります。

「解析エラー」についてはどう対処すればいいですか?

PHP エンジンは、理解できない構文を検出したときに解析エラーをスローします。異なるバージョンの PHP 用に記述されたコードを実行しようとすると、ほとんどの場合にこのエラーが発生します。

解析エラーが発生した場合は、システムが AWS SDK for PHP バージョン 3 の要件と推奨事項を満たしていることを確認します。

Amazon S3 クライアントが gzip で圧縮されたファイルを解凍するのはなぜですか?

デフォルトの Guzzle 6 HTTP ハンドラーなどの一部の HTTP ハンドラーは、デフォルトでは、圧縮されたレスポンス本文を解凍します。decode_content HTTP オプションを false に設定することによって、この動作をオーバーライドできます。下位互換性のために、このデフォルトは変更できませんが、S3 クライアントレベルでのコンテンツのデコードを無効にすることをお勧めします。

コンテンツの自動デコードを無効にする方法の例については、「decode_content」を参照してください。

Amazon S3 での本文署名を無効にするにはどうすればよいですか?

コマンドオブジェクトの ContentSHA256 パラメーターを Aws\Signature\S3SignatureV4::UNSIGNED_PAYLOAD に設定することによって、本文署名を無効にすることができます。そうすると、AWS SDK for PHP では、その値が正規リクエストの「x-amz-content-sha-256」ヘッダーおよび本文チェックサムとして使用されます。

$s3Client = new Aws\S3\S3Client([ 'version' => '2006-03-01', 'region' => 'us-standard' ]); $params = [ 'Bucket' => 'foo', 'Key' => 'baz', 'ContentSHA256' => Aws\Signature\S3SignatureV4::UNSIGNED_PAYLOAD ]; // Using operation methods creates command implicitly $result = $s3Client->putObject($params); // Using commands explicitly. $command = $s3Client->getCommand('PutObject', $params); $result = $s3Client->execute($command);

AWS SDK for PHP では再試行スキームはどのように処理されますか?

AWS SDK for PHP には、再試行動作を処理する RetryMiddleware があります。サーバーエラーの HTTP ステータスコード 5xx で言えば、この SDK は 500、502、503、504 のステータスコードの場合に再試行します。

RequestLimitExceededThrottlingProvisionedThroughputExceededExceptionThrottlingExceptionRequestThrottledBandwidthLimitExceeded などのスロットリング例外も再試行で処理されます。

AWS SDK for PHP では、再試行間隔を指数関数的に増やす手法やジッター低減アルゴリズムも再試行スキームに組み込まれています。さらに、デフォルトの再試行動作は、Amazon DynamoDB (10 に設定) 以外のすべてのサービスで 3 に設定されています。

エラーコードがある例外を処理するにはどうすればいいですか?

AWS SDK for PHP でカスタマイズされている Exception クラスに加えて、AWS の各サービスには AwsExceptionAwsException から継承した独自の例外クラスがあります。より具体的なエラータイプを特定すると、各メソッドの Errors セクションに一覧が記載されている API 固有のエラーをキャッチできます。

エラーコードの情報は、getAwsErrorCode()Aws\Exception\AwsException を使用して取得できます。

$sns = new \Aws\Sns\SnsClient([ 'region' => 'us-west-2', 'version' => 'latest', ]); try { $sns->publish([ // parameters ... ]); // Do something } catch (SnsException $e) { switch ($e->getAwsErrorCode()) { case 'EndpointDisabled': case 'NotFound': // Do something break; } }