2011年6月3日金曜日

S3のオブジェクトのユーザー独自ヘッダのキーの形式は"x-amz-meta-XXX"

スズキです。

ずっと任意のキー名が付けれると思っていたのですが、
実は、"x-amz-meta-XXX"といったフォーマットのキーしか
独自ヘッダとしては許されないとのことです。

詳しくはコチラに記載されています。

ちなみに、"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"の場合は、下記のように独自ヘッダを付けることができます。
("--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

こちらも以前紹介しましたが、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しかしてないはずなのに、まだ知らないことが多すぎる...
--------
http://www.suz-lab.com

0 コメント: