S3のオブジェクトのユーザー独自ヘッダのキーは、任意のキー名が付けれると思っていたのですが、実際は、x-amz-meta-XXXといったフォーマットのキーしか、独自ヘッダとしては許されないようです。
詳細は、Object Key and Metadataに記載されています。
ちなみに、AWS Management Consoleでは、下記のように設定することができます。
実際にヘッダを確認すると、下記のように追加されていることが確認できます。
# telnet s3.amazonaws.com 80 Trying 207.171.187.117... Connected to s3-2.amazonaws.com. Escape character is '^]'. GET /cdn.suz-lab.com/test.txt HTTP/1.0 HTTP/1.1 200 OK x-amz-id-2: m+2B6TDviSCu71iGMVYVAOpkTJ23cmS47cpmlNSeRqTgGDEvkREZJmdBJG9iA6+D x-amz-request-id: 7205A2D5660FA45B Date: Thu, 02 Jun 2011 13:55:20 GMT x-amz-meta-test: test Last-Modified: Thu, 02 Jun 2011 13:53:49 GMT ETag: "a56f703539f4182f33ae6d8d83910c49" Accept-Ranges: bytes Content-Type: text/plain Content-Length: 945 Connection: keep-alive Server: AmazonS3 ... Connection closed by foreign host.
s3cmdでヘッダの追加で紹介したs3cmdの場合、 下記のように独自ヘッダを付けることが可能です。
(–add-headerオプションにkey:valueで指定します)
# s3cmd --add-header=x-amz-meta-test2:test2 put /tmp/test.txt s3://cdn.suz-lab.com/test.txt /tmp/test.txt -> s3://cdn.suz-lab.com/test.txt [1 of 1] 5 of 5 100% in 1s 2.71 B/s done
こちらも、AWS SDK for PHPでS3にファイルアップロードにて紹介しましたが、
PHP(AWS SDK)の場合は次のとおりです。
require_once("/opt/aws/php/sdk.class.php"); define("AWS_KEY" , "AAAAAAAA"); define("AWS_SECRET_KEY", "SSSSSSSS"); $s3 = new AmazonS3(); $s3->set_region(AmazonS3::REGION_US_E1); $response = $s3->create_object("cdn.suz-lab.com", "test.txt", array( "fileUpload" => "test.txt", "acl" => AmazonS3::ACL_PUBLIC, "contentType" => "text/plain", "meta" => array( "test3" => "test3" ) )); var_dump($response);
metaの配列に、独自ヘッダのkeyとvalueを連想配列で指定していますが、注意する点は、keyとしてtest3を指定しても、実際に追加される独自ヘッダのキーはx-amz-meta-test3となります。
一年間、業務でAWSにしか携わっていないはずなのに、まだ知らないことだらけです。。。