PHP用のAWS SDKを使用して、S3 Consoleで静的なWebサイトに設定されているバケットにファイルをプログラムでアップロードしようとしています。Amazon AWSのPHPクライアントで適切なエンドポイントを設定するPHP SDK
バケットの名前はfoo.ourdomain.comで、eu-westでホストされています。私はファイルをアップロードできるかどうか試してみて、テストするには、次のコードを使用しています:
:PHP Fatal error: Uncaught Aws\S3\Exception\PermanentRedirectException: AWS Error Code: PermanentRedirect, Status Code: 301, AWS Request ID: -, AWS Error Type: client, AWS Error Message: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint: "foo.ourdomain.com.s3.amazonaws.com"., User-Agent: aws-sdk-php2/2.4.8 Guzzle/3.7.4 curl/7.22.0 PHP/5.3.10-1ubuntu3.8
$client = \Aws\S3\S3Client::factory(array('key' => bla, 'secret' => bla));
$client->upload('foo.ourdomain.com', 'test.txt', 'hello world', 'public-read');
これはかなりそれはしかし、例にあるようなものですが、私は次の例外を受け取りました
この時点で私はS3 SDKのマニュアルにこれについて言及していないので驚いた。しかし、大丈夫、私は方法のsetEndpointを発見しにコードを調整する:
$client = \Aws\S3\S3Client::factory(array('key' => bla, 'secret' => bla));
$client->setEndpoint('foo.ourdomain.com.s3.amazonaws.com');
$client->upload('foo.ourdomain.com', 'test.txt', 'hello world', 'public-read');
私は仕事だろうとの仮定が、私は正確に同じエラーを取得しています。私は二重チェックして、例外のバイト・フォー・バイト例外に記載されているエンドポイントが、2行目で設定しているものと一致します。
私はまた、foo.ourdomain.com.s3-website-eu-west-1.amazonaws.comをエンドポイントとして使用しようとしました(これは、CNAMEがS3コンソールの指示に従ってポイントしているホストです)。どちらもうまくいきませんでした。
私は何かを逃しているに違いないが、どこにも見つからない。 「静的なウェブサイト」に設定されたバケットは、SDKで現在サポートされていない方法で動作が異なる可能性がありますか?もしそうなら、私はそれをdocsや管理コンソールで見つけることはできません。
右のとおり、SDKのデフォルトはグローバルリージョン/エンドポイントです。特定の地域にバケットを作成した場合は、その地域を使用するためにS3Clientを送信する必要があります。 –
奇妙なしかし、エラーでの発言は非常に具体的には、それを修正する方法に固有ですが、またかなり間違って:) – Nanne