🤖
【Active Job】shoryuken + Amazon SQSを動かしてみた
Railsの非同期処理をActive Job + shoryuken + SQSで実装したのでメモを残します。
※RailsアプリケーションはDocker環境で構築済みの前提です。環境構築はこちら。
※Active Jobとバックエンドの比較はこちら。
環境
- Ruby 2.7.2
- Rails 6.0.3.4
- MySQL 8.0.20
- shoryuken 5.0.5
- Docker version 19.03.13
1. SQSの設定
まずAWSコンソールにログインし、画面上でSQSの設定をしていきます。
Amazon Simple Queue Service (SQS) は、完全マネージド型のメッセージキューイングサービスです。
画面や設定等は2020/11時点のものです。
キューを作成します。
ここでSQSの詳細な設定は割愛しますが、要件に応じて様々な設定はできそうです。
キューの名前だけ指定し、その他はデフォルト値で設定します。
これでSQS側の設定は完了です。
あとはローカル環境からアクセスするためのアクセスキーをIAMで発行しました。
2. shoryukenの設定
まずGemを入れていきます。
Gemfile
gem 'aws-sdk-sqs'
gem 'shoryuken'
bundle install
を実行し、shoryukenの設定ファイルも追加します。
AWSへの接続情報として、発行したアクセスキー等を環境変数に設定して利用します。
キーの管理はcredentialsでも良いかなと思いました。(プロダクトの方針次第)
config/shoryuken.yml
aws:
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
region: <%= ENV["AWS_REGION"] %>
concurrency: 1
logfile: ./log/shoryuken.log
:queues:
- development_default
3. Active Jobの設定
Active Jobで非同期処理を実装していきます。
config/application.rb
require "active_job/railtie"
module App
class Application < Rails::Application
...
config.active_job.queue_adapter = :shoryuken
...
end
end
4. ジョブの作成と動作確認
ようやくジョブを作成します。
rails g job shoryuken_sample
app/jobs/shoryuken_sample_job.rb
class ShoryukenSampleJob < ApplicationJob
queue_as :default
def perform
puts '--------------------------------'
puts '----------- 昇龍拳 ------------'
puts '--------------------------------'
end
end
続いて動作確認を行います。
$ bundle exec shoryuken -C config/shoryuken.yml
(↑僕の環境では特にコマンド実行後、特に何も表示されませんでしたが、キューイングしたら動きました。)
別タブのターミナルでRailsコンソールからShoryukenSampleJob
をキューイングしてみます。
$ rails c
Loading development environment (Rails 6.0.3.4)
> ShoryukenSampleJob.set(wait: 5.second).perform_later
Enqueued ShoryukenSampleJob (Job ID: ad754d56-8f50-4864-8b24-69479ef5c7f7) to Shoryuken(development_default) at 2020-11-25 11:32:39 UTC
=> #<ShoryukenSampleJob:0x000055821986c0b8
@arguments=[],
@exception_executions={},
@executions=0,
@job_id="ad754d56-8f50-4864-8b24-69479ef5c7f7",
@priority=nil,
@queue_name="development_default",
@scheduled_at=1606303959.7208154>
キューイングすると先ほど起動したshoryuken側でジョブが実行されたことが確認できました。
--------------------------------
----------- 昇龍拳 ------------
--------------------------------
Discussion