0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Elastic Beanstalkのワーカー環境のPythonサンプル

Posted at

はじめに

以前、Elastic Beanstalkのワーカー環境だけ作る方法を記事にしました。

その際用意できなかったサンプルコードを作成しましたので記事にしました。

コード

以下のサンプルを拝借して作りました。

python.zipを解凍してコードを少し書き換えます。welcomeの中身を空文字にしただけです。

application.py
import logging.handlers

# Create logger
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# Handler 
LOG_FILE = '/tmp/sample-app.log'
handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes=1048576, backupCount=5)
handler.setLevel(logging.INFO)

# Formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# Add Formatter to Handler
handler.setFormatter(formatter)

# add Handler to Logger
logger.addHandler(handler)

welcome = "" # ここを空文字にしただけ


def application(environ, start_response):
    path = environ['PATH_INFO']
    method = environ['REQUEST_METHOD']
    if method == 'POST':
        try:
            if path == '/':
                request_body_size = int(environ['CONTENT_LENGTH'])
                request_body = environ['wsgi.input'].read(request_body_size)
                logger.info("Received message: %s" % request_body)
            elif path == '/scheduled':
                logger.info("Received task %s scheduled at %s", environ['HTTP_X_AWS_SQSD_TASKNAME'],
                            environ['HTTP_X_AWS_SQSD_SCHEDULED_AT'])
        except (TypeError, ValueError):
            logger.warning('Error retrieving request body for async work.')
        response = ''
    else:
        response = welcome
    start_response("200 OK", [
        ("Content-Type", "text/html"),
        ("Content-Length", str(len(response)))
    ])
    return [bytes(response, 'utf-8')]

圧縮

他のファイル、フォルダを削除します。

  • .ebextensions/
  • cron.yaml
  • EBSampleApp-Python.iml

残ったapplication.pyだけを選択してzipファイルにします。
image.png

デプロイ

Elastic Beanstalkにて、環境からデプロイします。
環境を作成していない場合は、以前の記事を参考に作成してください。
image.png

”ファイルを選択”にて、先ほど作成したzipファイルを指定して、デプロイします。
image.png

デプロイが終わるまで、少し待ちます。
image.png

デプロイが終わりました。
image.png

終わらない場合は右上の更新を押して確認してみてください。
image.png

確認

インスタンスの中に入ります。インスタンスへのアクセスについては前回の手順になります。

cat /tmp/sample-app.logで、ログが確認可能です。
image.png

確認するファイルを抑えたら、実際にキューにメッセージを入れてみます。

コンソールでSQSのサービスを表示します。Elastic Beanstalkの環境の画面からリンクもあります。
image.png

2つ作成されていますので、WorkerQueueを選びます。
image.png

「メッセージを送受信」から、メッセージ本文を入力して、「メッセージを送信」をクリックします。
image.png
image.png

キューに入ったことを確認するため、同画面の下部でポーリングを行えますが、すぐに処理されてしまうため、メッセージは取得できませんでした。
image.png

処理されたことを確認するために、EC2に戻りcat /tmp/sample-app.logを実行しログを見てみます。
ワーカーインスタンスで取得され、ログに出ていることを確認できました。
image.png

おわりに

以前の際はサンプルコードがわからず載せられませんでしたが、いろいろやってみて調べがつきましたので記事にしました。
同様の課題をお持ちの方の力になれれば幸いです。

0
0
0

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?