読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

Elastic Beanstalkを使ったバッチインフラの構築

概要

AWS上にバッチ実行環境をElastic BeansTalkを使って構築する
Elastic BeansTalkについては以下記事参考
Elastic Beanstalkによる動的サイトを構築レスに構築 - うさがにっき

詳細

WEBアプリ環境だけでなくバッチ実行環境もAWS上に作成することができる

EC2を立てて自分で作ってもいいけど、Elastic BeansTalkを使うとバッチプログラムに応じた環境を自動で作成してくれる
またAuto Scalingによってサーバが自動でスケーリングされるので、サーバスケールも気にする必要がないので運用が楽

またElasticBeanstalkのworkerを使ってバッチを構築するとSQSによって実行されるジョブを自動で管理してくれるので、複数台でバッチサーバを構築しても実行するジョブの順番を管理する必要がない

TopからAWSからElastic Beanstalkを選択
右上のCreate New Applicationをクリック

Application Nameを入力
f:id:tiro105:20150802230201p:plain

Workerを選択
f:id:tiro105:20150802230227p:plain

IAMロールを選択、Ceate an ~を選択
既存のaws-elasticbeanstalk-ec2-roleを選ぶと、何で使っているかはわからないがdynamoDBの認証でコケるので、注意
f:id:tiro105:20150802230423p:plain

IAMロールのポリシードキュメントの中にdynamoDBの記述があることを確認し許可を押下
f:id:tiro105:20150802230840p:plain

使う言語を選択し、Auto Scalingを選択し次へ
f:id:tiro105:20150802230931p:plain

作成したバッチアプリケーションをここでアップロードし、Auto Scalingを選択したのでdeploy時のサービスの可用性を選択
今回は30%を選択
f:id:tiro105:20150802231206p:plain

以前の記事と同じようにElastic Beanstalkの設定
f:id:tiro105:20150802231253p:plain
f:id:tiro105:20150802231308p:plain
f:id:tiro105:20150802231320p:plain
f:id:tiro105:20150802231331p:plain

Workerを選択したので、Worker Detailを設定する
ジョブを受け付けるSQSを新たに作るのでAutogenerate queueを選択
また、timeoutなどを設定
f:id:tiro105:20150802231542p:plain

preview
f:id:tiro105:20150802232024p:plain

ビルド
f:id:tiro105:20150802232042p:plain

ビルド成功
f:id:tiro105:20150802232057p:plain

感想

既存で用意されているIAMロールのaws-elasticbeanstalk-ec2-roleを使うとDynamoDBでAccessDeniedExceptionが発生しビルド失敗するところが苦戦した
その既存で用意されているロールを元に新たにロールを作成すると、中にDynamoDBのアクセス権が入っていることが確認できたのでそれをIAMロールで設定するとうまくいった

参考

Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド