Edited at

ElasticBeanstalkのWorkerつかってみる

More than 3 years have passed since last update.


はじめに

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に登録する実装をする。


routes.rb

Rails.application.routes.draw do

post '/sqs_test', to: 'sqsd#add_dynamo'
end


sqsd_controller.rb

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のテーブルを作成する

以下の内容でテーブルを作成しました。

dynamo.PNG


Worker作成

アプリケーションに事前に作成したzipを指定します。

app_zip.PNG

ワーカーキュー に自動生成キューを指定。

HTTPパス に上のRailsで設定したパスを指定。

MIMEタイプ にapplication/jsonを指定。

worker.PNG

他の設定を最低限行い、作成しました。

created_env.PNG

これで、インスタンス1台とSQSが作成されました。


sqsdの動作を確認する

自動生成されたSQSに以下の内容をpublishする。

{"id":"1234", "message":"worker test"}

すると、インスタンスで動いているsqsdがキューを取得し、メッセージをローカルの/sqs_test にpostすることで、

作成したRailsアプリケーションによって、dynamoDBに登録されます。

dynamo_result.PNG


まとめ

ElasticBeanstalkのworkerというものを使ってみた。

実際にSQSにメッセージを送信し、sqsdがそれをsubscribeしてアプリケーションにpostするというのをログとともに確認することができた。

batch処理など、アプリケーションの裏側でいろいろと使えそうだと感じた。もう少し何かしらで使ってみたい。

また、ElasticBeanstalkだとアプリケーションの管理などがとても楽に感じた。

一度つかってみると感覚がわかるので、ElasticBeanstalk使ってみたい人はなにかしら作ってみると楽しいと思った。

また今度、途中経過の内容やElasticBeanstalkの概要などをまとめてみようと思います。