健気に頑張るElasticBeanStalk
ElasticBeanStalkのマネージメントコンソールから行っていることを、botoやAPIで行う場合、どうやるかをメモっておきます。botoもaws cliもほぼ同じだと思いますが、プログラミング言語のほうが色々便利なので、boto & pythonでやります
やることは、アプリケーションのアップロードと、環境へのデプロイです。実はこの作業は、マネジメントコンソールならば、1ステップで出来てしまいます。
これを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の使用をオススメします。