Pythonのbotoで遊んでみる

こんにちは、河野です。

今年はへび年でした。なので、Pythonをやりましょうといった話が年始に話題になっていたりしました。

http://anond.hatelabo.jp/20130101082333
はてブも現時点で934もありますね。

ちなみに、この記事の中では、2系と3系どっちにするか?というところが歯切れが悪かったのですが、ウェブアプリケーションを前提とすると、主要なウェブフレームワークはすでに3系に対応していますし、3系で良いと思います。

私は前職でPythonを使ってECを構築したりしてたんですが、転職後ほとんど触る機会がなかったし、今回はbotoで遊んでみようと思います。ぎりぎり今年中にPython触っとこうという感じです。

botoとは?

botoはAWSを操作するためのライブラリです。
aws-cliでも使用されていて、AWSではPython版のSDKとして紹介されています。
AWS SDK for Python | アマゾン ウェブ サービス(AWS 日本語)

botoのインストール

botoは、PyPIの情報を見た感じでは3系にはまだちゃんと対応してないようです。(aws-cliはpython3に対応しているのですが、どうやらbotoの開発版を使っているようです)

私の環境はcentosなので、まずは、pythonのパッケージ管理ツールであるpipをyumで入て、pip経由でbotoをインストールします。
ついでに対話的に操作しやすくなる、ipythonも入れておきます。

簡単ですね。

実際に使ってみる

早速ipythonを起動して、botoを触ってみましょう。

起動するとコンソールにpythonのコードが入力できるようになります。

とりあえず動作確認ということで、EC2のリージョン一覧を表示してみます。

ちゃんとリージョンの名称が表示されましたね。

botoの認証について

ここから先の操作は認証が必要になるので、IAMで認証情報を取得しておきます。
必要になるのは、AccessKeyIDとSecretAccessKeyです。

botoの認証方法については以下に詳細が書いてあります。
Boto Config — boto v2.21.1

今回は環境変数を使用します。

EC2インスタンス一覧の取得・起動・停止

では、EC2のインスタンス一覧を取得し、特定のインスタンスの起動と停止を行ってみます。

インスタンス一覧の取得

boto.ec2.connect_to_reginoでリージョンに接続します。boto.ec2.connection.EC2Connectionのオブジェクトが返ってきます。

このec2connに対して、get_all_instancesを呼び出すと、インスタンスの一覧が取得できそうですが、boto.ec2.instance.Reservationのリストが返ってきます。

Reservationはinstancesというプロパティでboto.ec2.instance.Instanceのリストを持っています。

なので、2重ループでEC2インスタンスのリストを生成しています。

最後に、取得したインスタンスのリストからインスタンスIDと起動の状態、プライベートアドレスを表示してみました。

インスタンスの起動

インスタンスを起動してみます。

インスタンスの起動も簡単ですね。stateで起動の状態が確認できますが、updateを実行しないと情報が更新されません。

インスタンスの停止

インスタンスの停止も簡単ですね。

まとめ

今回やったようなことであれば、aws-cliを使った方が手っ取り早いと思うのですが、自動化したりとか、細かな制御を行ったりする場合に使えるのかなと思います。

また、EC2インスタンスの起動・停止について言えば、コールバックなどを渡せなくて、自分でupdateしないといけないので、自動化したりする場合には、もう少し工夫が必要そうですね。

Comments are closed, but you can leave a trackback: Trackback URL.