はじめに
Workerを使ってなんかつくってみたという内容が主となってます。
ElasticBeanstalk Workerについて
Workerは、インスタンス内にsqsdというデーモンが動き、指定したSQSにキューがたまるとそのキューを取得し、インスタンス内の指定したパスにメッセージをpostするしくみが付いている。
メッセージ → SQS → sqsd → アプリケーションみたいな流れ。
Worker環境作成時にSQSも同時に作成することができる。
下記のリンクの図をみるとイメージしやすいと思います。
http://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html
Workerで環境をつくってみる
SQSにメッセージをpostしたらメッセージをDynamoDBに登録するというアプリケーションを作ってみようと思います。
事前準備
Railsアプリケーションを作成してzipにする
jsonでpostされたらDynamoDBに登録する実装をする。
Rails.application.routes.draw do
post '/sqs_test', to: 'sqsd#add_dynamo'
end
class SqsdController < ApplicationController
require 'aws-sdk-core'
def add_dynamo
json_request = JSON.parse(request.body.read)
p json_request
dynamo_cli = Aws::DynamoDB::Client.new(
region: 'us-west-2'
)
# sqsd_testテーブルに登録する
dynamo_cli.put_item(
table_name: 'sqsd_test',
item: {
id: json_request['id'],
message: json_request['message']
})
end
end
DynamoDBのテーブルを作成する
以下の内容でテーブルを作成しました。
Worker作成
アプリケーションに事前に作成したzipを指定します。
ワーカーキュー に自動生成キューを指定。
HTTPパス に上のRailsで設定したパスを指定。
MIMEタイプ にapplication/jsonを指定。
他の設定を最低限行い、作成しました。
これで、インスタンス1台とSQSが作成されました。
sqsdの動作を確認する
自動生成されたSQSに以下の内容をpublishする。
{"id":"1234", "message":"worker test"}
すると、インスタンスで動いているsqsdがキューを取得し、メッセージをローカルの**/sqs_test** にpostすることで、
作成したRailsアプリケーションによって、dynamoDBに登録されます。
まとめ
ElasticBeanstalkのworkerというものを使ってみた。
実際にSQSにメッセージを送信し、sqsdがそれをsubscribeしてアプリケーションにpostするというのをログとともに確認することができた。
batch処理など、アプリケーションの裏側でいろいろと使えそうだと感じた。もう少し何かしらで使ってみたい。
また、ElasticBeanstalkだとアプリケーションの管理などがとても楽に感じた。
一度つかってみると感覚がわかるので、ElasticBeanstalk使ってみたい人はなにかしら作ってみると楽しいと思った。
また今度、途中経過の内容やElasticBeanstalkの概要などをまとめてみようと思います。