Help us understand the problem. What is going on with this article?

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

めもです。随時追記

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 * * * *"
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away