LoginSignup
0

More than 5 years have passed since last update.

Elasticbeanstalk(EC2)の1インスタンスでウェブアプリとワーカー実行をしたい

Last updated at Posted at 2017-07-15

Elasticbeanstalk(以下EB)で動かしているウェブアプリ。今はたいして負荷があるわけじゃないので、1インスタンスで動かしてます。このウェブアプリが参照するデータを、生成するワーカーの実装が必要になりました。こういう時、真面目にやるならEBでワーカー環境を別に作成し、別インスタンスで起動する方法を取るのでしょう。

しかし、お金もったいないので1インスタンスでやりたい(笑)

そこでウェブアプリにワーカー起動用のHTTPリクエストを受け取るようにした。リクエストを受け取ったらバックグラウンド処理を開始し、HTTPレスポンスは即座に返すようにする。一応、外部からむやみに叩かれるのを防ぐために、URLパラメータにGUIDなど長くて予想不能な固定文字列が指定されていた時のみワーカー実行するものとする。

あとはこのURLを定期的にキックしてくれればいい。そこでLambdaとCloudWatchの出番。

Lambdaの関数作成

  • Lambda関数の作成
  • Blank Functionを選択
  • 名前とかロールは適当につける

コードのサンプル(node.js)

var https = require ('https');
exports.handler = function(event, context) {
    https.get("https://example.com/worker/sample?guid=XXXXXXXXXXXXXXXXXXXXX", function(res) {
        if (res.statusCode == 200) {
            console.log("SUCCESS!");
            context.done(null);
        } else {
            var message = "error: status_code:" + res.statusCode;
            context.done(message);
        }
    }).on('error', function(e) {
        context.done('error', e);
    });

これで呼び出されるとhttps://example.com/worker/sample をキックするLambda関数はできた。

CloudWatchのスケジュール作成

  • イベント > ルールを選択
  • ルールの作成でスケジュールを選択
  • 何分おきかとかcron形式で設定できるので設定する
  • ターゲットの追加で作成したLambda関数を選択する

これで、定期的にワーカー実行のURLをキックしてくれる。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0