
ninestarsの日記: [AWS][python]第3回 botoからS3を操作しよう
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')
次回は応用編として、帯域制限の実装を紹介します。
[AWS][python]第3回 botoからS3を操作しよう More ログイン