boto.s3で大文字を含むバケットにアクセスする
大文字を含むバケットをUS Standardでは作ることができるのですが、そのバケットにbotoでアクセスしようとすると以下のように怒られます。
Bucket names cannot contain upper-case characters when using either the sub-domain or virtual hosting calling format.
言ってることは解りますが、じゃ、どうしたらアクセスできるのか。というと、calling_formatというオプションを明示的に指定する必要があります。
calling format とは
S3へのアクセススタイル。以下が定義されている。 詳しくは s3/connection.py を参照。
- SubdomainCallingFormat: サブドメイン。これがデフォルト
- VHostCallingFormat: 独自ドメインだと思う
- OrdinaryCallingFormat: パススタイル
- ProtocolIndependentOrdinaryCallingFormat: Ordinaryだけどscheme (http/https) を明示しない何か
大文字を含んでいる場合は OrdinaryCallingFormat を利用すればよいです。
指定方法
設定ファイル
[s3] calling_format = boto.s3.connection.OrdinaryCallingFormat
S3Connectionのコンストラクタ
from boto.s3.connection import OrdinaryCallingFormat, S3Connection conn = S3Connection(calling_format=OrdinaryCallingFormat)
2.13.2 以前のboto
仕様が変わっていて、設定ファイルでの指定は不可。また、クラスもしくはクラス名ではなく、インスタンスを渡す必要がある。
from boto.s3.connection import OrdinaryCallingFormat, S3Connection conn = S3Connection(calling_format=OrdinaryCallingFormat())