0
0

More than 3 years have passed since last update.

ElasticBeanstalk Worker Tierで定期バッチの構築する

Last updated at Posted at 2019-11-11

めもです。随時追記

TODO

  • エラーの時の動作
  • VPC等の設定
  • 監視周り

つくりたいもの

  • ElasticBeanstarkのWorker Tierで定期的にメール送信するバッチ
  • PlatformはDockerMultiContainer
  • Cronでx分に一回送信するメールあるかチェックして送信する

ざっくり

  • EBのWorkerはSQSのキューをEC2で監視してる
  • キューにPublishされたら監視Jobはlocalhostの80にHTTP/POSTする
  • WEBAPI作って処理すりゃいい
  • HTTP/POSTの実態はApache/httpdらしいのでデフォTimeoutは5分
  • 処理が長時間かかることが予想される場合は、Timeoutを延長するか,いったん200で返して、バックグラウンドで処理する
  • 200返すとキューから消えるので別途ステート管理が必要
  • EBはECSやらLBとか一括で設定できるアプリケーションプラットフォーム?でいいのかな

構築

aws-ebcliの導入

アプリケーション作成+環境作成

  1. eb initでアプリケーションを作る(プラットフォームはDocker Multi Container)
  2. ecr作ってAPIをPush
  3. aws-elasticbeanstalk-ec2-roleにECRのPullポリシーつける
  4. Dockerrun.aws.json書く
  5. Cron.yaml書く
  6. よくわかんないけど要Commit????
  7. eb create ${env-name} -t workerでWorker環境作成
  8. Deployまでいくはず、ダッシュボードからSQSに飛んでメッセージ送信してみる
  9. LogからAPIのLog確認して200で処理されてるの確認

dockerrun.aws.json

  • MultiContainerPlatformだけど確認だけなのでコンテナ1個
  • イメージ的にDockerComposeのJSON版
  • "AWSEBDockerrunVersion": 2はMultiContainer専用っぽい
  • imageにECRのURI 
{
    "AWSEBDockerrunVersion": 2,
    "containerDefinitions": [
        {
            "name": "python-caintainer",
            "image": "xxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/eb-worker-demo:latest",
            "essential": true,
            "memory": 256,
            "portMappings": [
                {
                    "containerPort": 80,
                    "hostPort": 80
                }
            ],
            "workingDirectory": "/var/app",
            "environment": [],
            "entryPoint": ["python", "app.py"]
        }

    ]
}

定期Job

  • cron.yamlで設定する(プロジェクトルートにおいときゃいい?)
  • urlに対応してPOSTされる
  • cron式通りにSQSがPusblishされる
version: 1
cron:
 - name: "batch_task_1"
   url: "/api/v1/sendmail"
   schedule: "*/30 * * * *"
 - name: "batch_task_2"
   url: "/api/v1/status"
   schedule: "*/5 * * * *"
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