あめがえるのITブログ

頑張りすぎない。ほどほどに頑張るブログ。

Amazon Elastic Beanstalk(Worker環境)をPython構築してみた

Elastic BeanstalkにはServer環境ともう一つ、Worker環境があるがよくわからないので調べてみた。ついでに使ってみた。

Amazon Elastic Beanstalk Worker環境とは

完了するまでに長い時間がかかるオペレーションまたはワークフローを実行する場合、それらのタスクを専用のワーカー環境にオフロードできる。
長い時間実行されるタスクとは、イメージやビデオの処理、Eメールの送信、Zipアーカイブの生成など、リクエストの完了までに時間を要するタスクです。

Server環境はELBとEC2のセットのようなサービスだが、Worker環境はSQSとEC2のセットのようなサービスの模様。aws-sqsdデーモンがおり、SQSからメッセージの読み取りとアプリケーションへのPOSTリクエストの生成、処理が完了し200OKを受信した際にはメッセージの削除を自動で行ってくれる。こりゃ便利そう!

Worker環境構成


やること


実践!

1.サンプルアプリケーションダウンロード
 1-1.下記サイトからpython.zipをダウンロード
  https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/tutorials.html
※この子はServer環境ではサイトを表示し、Worker環境ではPOSTを受信してログを出力してくるアプリケーションなのでどちらでも使える優秀なやつです。
 1-2.Elastic Beanstalk-[アプリケーションを作成]
 1-3.下記を入力
  ・環境枠:ワーカー環境
  ・アプリケーション名:sample-python-worker-app
  ・環境名:sample-python-worker-env
  ・プラットフォームタイプ:マネージドプラットフォーム
  ・プラットフォーム:Python
  ・プラットフォームブランチ:Python 3.11 running on 64bit Amazon Linux 2023
  ・プラットフォームのバージョン:4.0.0(Recommended)
  ・アプリケーションコード:コードをアップロード
  ・バージョンラベル:1.0
  ・ソースコード:ローカルファイル
  ・ファイル名:python.zip
  ・プリセット:単一インスタンス(無料利用枠の対象)

 1-4.[次へ]
 1-5.サービスアクセスの設定が表示されたら、下記を入力
  ・EC2キーペア:任意のものを指定
 1-6.[レビューまでスキップ]
 1-7.レビューが表示されたら[送信]

※キューを指定しなければ自動で作成される模様。
※上はデッドレターキュー、下がサービス用のキュー


2.動作確認
 2-1.SQS-[キュー]
 2-2.サービス用のキューを選択し、[メッセージを送受信]
 2-3.メッセージ本文に[test]と入力し、[メッセージを送受信]
 2-4.キューに戻り、サービス用のキューの[利用可能なメッセージ]を確認
  ※aws-sqsdデーモンがすぐ取得するためメッセージ数は増えない
 2-5.作成されたEC2インスタンスSSH接続
 2-6.下記を実行してtestログが存在していることを確認

# cat /tmp/sample-app.log | grep test
2023-05-18 04:52:57,198 - application - INFO - Received message: b'test'



感想

正直SQSを組み込んだアプリケーションは手間がかかると思ってたけど、これだとプログラムに注力できるので楽ですね!