LoginSignup
1
1

RailsアプリでAmazon SQS のメッセージを受信しよう

Posted at

aws-sdk-rails というgemを使うと、SQSをキューにしてActiveJobsを動かすことができます。
今回はsidekiqユーザーに向けてその使い方を紹介したいと思います。

とはいえsidekiqを使わないというわけではないです。

受信設定

AWSの認証設定をしているとして、受信の設定をします。

config/aws_sqs_active_job.yml
queues:
  my_queue: 'https://sqs.ap-northeast-1.amazonaws.com/1234567890/sqs_queue'

みたいな感じでQueueを設定します。このURLはAWS上で作成したSQSのエンドポイントを指定します。

でもって、Jobは普段通り、

app/jobs/my_job.rb
class MyJob < ApplicationJob
  queue_as :sqs_queue
  def perform(x, y)
    ...
  end
end

という感じで作ります。
SQSでポストするデータは、こんな感じで作ればよいです。

{"queue_name":"sqs_queue",
 "job_class":"MyJob",
 "job_id":"<id>",
 "arguments":["<custom_id>", ...]}

あとは、Rails.root で以下を実行すれば処理できます。

bundle exec aws_sqs_active_job --queue sqs_queue

ここでのミソは、ActiveJobの設定はしていないってところです。

なので、これまで通りsidekiqを使い続けられます。

応用 SES受信

やっぱり一番の応用は、メール受信ですね。

  • SESでメール受信
  • S3にメールを保存
  • EventBridgeに保存イベントを通知
  • EventBridgeで通知されたイベントを上記のメッセージフォーマットに書き換えてSQSへポスト
  • SQSをリスンしてS3に保存されたメールを解析し、処理を行う。

こんな感じでメール受信が実装できます。
個人的には Action Mailboxよりコントロールしやすい感じがします。

そのほかにも、動画のエンコードなどlambdaの処理の完了通知とか、そういった応用が考えられます。

AWSでできることはやってもらって終わったら通知してもらうっていうのが楽に安定するシステムを作るコツかなぁなんて思います。

1
1
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
1
1