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