ちょっとした事情があり、PythonでAmazon Web Servicesを操作するプログラムを作ることになりました。PythonでAWSを操作するにはbotoがよさそうです。
PythonでAWSプログラミングの手始めにメジャーなサービスであるAmazon S3でbotoの使い方を学習してみました。
■ botoについて
botoはAWSの公式SDKではありませんが、以下のAWSのAPIに対応したライブラリです。
- Simple Storage Service (S3)
- SimpleQueue Service (SQS)
- Elastic Compute Cloud (EC2)
- Mechanical Turk
- SimpleDB
- CloudFront
- CloudWatch
- AutoScale
- Elastic Load Balancer (ELB)
- Virtual Private Cloud (VPC)
- Elastic Map Reduce (EMR)
- Relational Data Service (RDS)
- Simple Notification Server (SNS)
- Identity and Access Management (IAM)
- Route53 DNS Service (route53)
公式SDKに迫るような対応サービスの多さですね。
それだけではなく、Google Storageにも対応しています。PythonとGoogle関連サービスとの相性がよいからでしょうか...。単純にS3とインタフェースが近しいからというのもありそうですが。
まあ、とにかくしっかりAWSプログラミングができそうなライブラリです。
■ botoインストール
Linux、Mac OS Xなどではeasy_installがあれば以下のような感じで簡単インストールです。オススメです。
1 | % sudo easy_install boto |
あるいは、ここからダウンロードして、展開して
以下のような感じでインストールでもよいかと。(easy_installつかったほうが簡単だと思いますが・・・)
1 | % wget http: / / boto.googlecode.com / files / boto - 2.0 .tar.gz |
3 | % sudo python setup.py install |
■ S3への接続とアクセスキー、秘密キーについて
環境変数としてAWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYをあらかじめセットしておけばプログラム中にアクセスキー、秘密キーを記述する必要はありません。以下のような感じで接続できます。
1 | from boto.s3.connection import S3Connection |
もし、プログラム中に記述する場合は以下のようにAWSとのAWSAuthConnectionを継承したクラス(この場合S3Connection)のインスタンスを作成するのですが、そこで引数にキー情報を入れます。
1 | from boto.s3.connection import S3Connection |
2 | conn = S3Connection( 'アクセスキー' , '秘密キー' ) |
■ バケット情報取得とバケット作成
すべてのバケット情報を取得して、バケット名を出力すると以下のような感じになります。簡単ですね。
01 | from boto.s3.connection import S3Connection |
06 | buckets = conn.get_all_buckets() |
続いて、バケットの有無を判定して、あればバケットオブジェクト取得、なければバケットオブジェクトを作成する、というのは以下のようにすれば動きます。ちなみにバケットのリージョンは東京リージョンを指定しています。
1 | bucket_name = 'flect-bucket-tokyo' |
5 | bucket = conn.get_bucket(bucket_name) |
7 | bucket = conn.create_bucket(bucket_name, location = Location.APNortheast) |
補足ですが、リージョン情報を取得するのは以下のように書けばできます。
1 | from boto.s3.connection import Location |
■ オブジェクトの作成と削除
続いて、先ほど作成したバケットにオブジェクトを出し入れしてみます。
まずは単純なテキストから。以下のように出し入れできます。
2 | from boto.s3.key import Key |
8 | k.set_contents_from_string( 'text content' ) |
9 | text_content = k.get_contents_as_string() |
また、ファイルとしてアップロード/ダウンロードも簡単です。
以下はローカルの画像ファイルをアップし、別名でダウンロードする例です。
(bucketはバケットオブジェクトが取得されているものとします)
3 | k.key = 'sample_image.jpg' |
4 | k.set_contents_from_filename( './sample.jpg' ) |
7 | k.get_contents_to_filename( './download.jpg' ) |
■ まとめと次の課題
内容が著しく浅い、という感はぬぐえないですが、今回はPythonでAWSを触る感触を学習してみたかった、ということでS3を操作するプログラムを通してbotoの使い方になじんでみました。
よく使っているからという理由でS3から学習してみたのですが、今回はAmazon SESなどほかに動かしたいサービスのウォーミングアップなので次回以降いろいろなサービスを動かしてみたいと思います。
http://1c-job.net
このサイトにはプログラマーとして必要だと思うことが載っています。
これをとっかかりにしてプログラムに興味が出てくること間違いないです。
投稿: 匿名がかり | 2012年4月19日 (木) 14:48