続 カッコの付け方

AWSを始めとしたクラウドコンピューティング全般と、唯一神emacsにおける()の付け方についてだらだら書きます

健気に頑張るElasticBeanStalk

ElasticBeanStalkのマネージメントコンソールから行っていることを、botoやAPIで行う場合、どうやるかをメモっておきます。botoもaws cliもほぼ同じだと思いますが、プログラミング言語のほうが色々便利なので、boto & pythonでやります

やることは、アプリケーションのアップロードと、環境へのデプロイです。実はこの作業は、マネジメントコンソールならば、1ステップで出来てしまいます。

eb.png
これをbotoでやる場合、下記の手順になります。
1. applicationごとの、アーカイブ(zip or git)の保存先S3バケットを取得
2. 取得したS3にファイルをアップロード
3. アップロードしたファイルにversion_labelを付け、application-versionとして登録
4. 3で登録したアプリケーションを環境へデプロイ


ね、めんどくさいでしょ?これをマネジメントコンソールは健気に1ステップでやってくれているのです。コードにするとこんな感じ。

eb_conn = boto.beanstalk.connect_to_region(region>)

# get S3 bucket name
cvs = eb_conn.describe_application_versions(<eb_appname>)
app_info = cvs['DescribeApplicationVersionsResponse']['DescribeApplicationVersionsResult']['ApplicationVersions'][0]
bucketname = app_info['SourceBundle']['S3Bucket']

# upload to s3
s3_conn = boto.s3.connect_to_region(<region>)
bucket = s3_conn.get_bucket(bucketname)

s3fn = os.path.basename(filepath)
key = bucket.new_key(s3fn)
key.set_contents_from_filename(filepath)

# S3上のファイルをアプリケーションとして登録
eb_conn.create_application_version(cfg.EB_APP_NAME,
                                   version_label=<version_label>,
                                   description="hogehoge",
                                   s3_bucket=bucketname,
                                   s3_key=,s3fn)

# 環境へデプロイ
res = eb_conn.update_environment(environment_name=<eb-envname>,
                                 version_label=<version_label>,)

botoで開発するときは、ipythonの使用をオススメします。