パスワードを忘れた? アカウント作成
6492799 journal
日記

ninestarsの日記: [AWS][python]第3回 botoからS3を操作しよう

日記 by ninestars

EC2と並ぶAWSの提供するサービスの双璧はS3ではないでしょうか。

botoでは、bucket と key という概念で扱っています。
Management console やファイラー感覚で扱うツールではあたかもファイルシステムのように見えますが、S3 はディレクトリよりもKVSに近く、bucket/key のの組み合わせで URI を表現します。処理の流れとしては
・bucketの取得
・keyの取得または生成
・keyへ入出力
となります。

プログラム上から新規にbucketを作成することはあまり多くないと思うので、ここでは既に作成されたbucketに対する入出力を解説します。

>>> import boto
>>> conn = boto.connect_s3(AWS_ACCCESS_KEY, AWS_SECRET_KEY)
まずはモジュールのインポートと接続です。

EC2と異なり、regionの指定はありません。
これは bucket がグローバルでユニークである為、作成時のリージョンに向け接続を行っているからです。

・bucketの取得

明示的にbucket名を指定する場合は get_bucket(bucket名)、一覧の取得は all_buckets() です。
>>> bucket = conn.get_bucket('foobar')

>>> buckets = conn.get_all_buckets()
>>> buckets
[<Bucket: foobar>, <Bucket: bazz>]

これらは boto.s3.bucket オブジェクトです。

・keyの一覧
>>> keys = bucket.get_all_keys(prefix)
prefix を含む key のリストを取得します。
得られるリストの中身は boto.s3.key オブジェクトです。

・既存のkeyの取得
>>> key = bucket.get_key(key_name)
key_name に一致したkey を取得します。

・keyの内容をファイルへ書き出す
>>> key.get_contents_to_filename('foobar.txt')

・新規keyの作成
>>> new_key = boto.s3.key.Key(bucket)
>>> new_key.key = 'bazz/foobar.txt'

・keyへファイルを書き込む
>>> new_key.set_contents_from_filename('local_file.txt')

次回は応用編として、帯域制限の実装を紹介します。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

犯人は巨人ファンでA型で眼鏡をかけている -- あるハッカー

読み込み中...