【参考としてAWS SDK for Ruby V2を利用する場合は、こちらを参考にしてください。】
最近メタボリック症候群になりました。現実を受け止め、筋肉SEを目指してトレーニング中の、どうも千葉です。
今日はSQSについてのハンズオンです。
SQSとは、メッセージキューを提供するサービスで、バッチ等非同期処理時が実施可能になります。
今日はAmazon SQSを使って、キューの登録・取得・削除等をやってみたいと思います。
言語は、最近rubyを使っているので、「AWS SDK for Ruby」を使用します。
おそらく、Java・PHP・Python等でもAWSのSDKがあるため、同じような感じで実行できるのではないかと思います。
料金
お金取られない範囲でやりたい方も多いはずなので、一応記載しておくと無料のはずです。
ユーザ登録後の無料期間にかかわらず(無料期間以外でも)2014年10月現在、月100万リクエストは無料で受信できるということです。
※Amazonは、結構料金面で改定があるので別途自分で確認してくださいね
バッチ概要
「batch1.rb」でキュー登録。
「batch2.rb」でキューを取得して文字列を表示。そして、キューを削除。
という感じでやってみます。
前提
- AWSアカウント作成済み
- Rubyが利用できる環境になっている
AWS SDK for Rubyのインストール
まずは、AWSのAPIを使えるようにSDKをインストールします。
gem install aws-sdk
または、バイナリ落としてきて入れてください。
http://aws.amazon.com/jp/sdkforruby/
API用ユーザの作成とキーの取得
IAMにてAPI用ユーザを作成し、アクセス用のキーを取得します。
- IAM画面にアクセス
- 「Users」をクリック
- アクセスキーとシークレットアクセスキーを取得
- 「Create New Users」をクリック
- 作成するユーザ名を入れて、「Create」を選択。今回私は、api-userを作成。
- 「Generate an access key for each user」にチェックを入れたままにする。このチェックは、API用の鍵を作成するかどうか。
- 「Download Credentials」で鍵をダウンロードして任意の場所に保存しておく。
作成したユーザをグループに追加
アクセス権限を設定するため、グループを作成し、先ほど作成したユーザを追加します。
- IAM画面にアクセス
- 「Groups」をクリック
- 「Create New Group」をクリック
- Group名を入力し、「Next Step」をクリック
- 「Administrator Access」をセレクト※ここは適宜権限を選択してください
- 「Next Step」をクリック
- 内容確認して「Create Group」をクリック
- 「Users」をクリックし、先ほど作成したユーザをクリック
- 「Add User to Groups」をクリックし、先ほど作成したグループを選択し、「Add to Groups」をクリック
Queueを作成
SQSに、Queueを作成します。
- SQSにアクセス
- 「Create New Queue」をクリック。
- Queue名を入れて「Create Queue」をクリック。
各パラメータの意味は以下になります。
- Queue Name : queueの名前
- Default Visibility Timeout : 受信バッチが複数ある場合に、同じキューを複数のバッチが取得するのを避けるために、使用するパラメータ。メッセージ受信したら、他のバッチからキューが見えないように非表示にする時間。デフォルト30秒
- Message Retention Period : メッセージを保持期間
- Maximum Message Size :1メッセージの最大サイズ
- Delivery Delay : メッセージ登録後、メッセージ取得できるようになるまでの時間。例えば10秒に設定した場合、メッセージ登録、10秒経過後にメッセージが取得できるようになる。
- Receive Message Wait time : ロングポーリング時間を指定。例としてこの値を20秒にし、* キューが空の場合。キューが空だと20秒間待って、空メッセージを返す。もし、20秒の間にメッセージを受信した場合は、直ちにメッセージ受信できる。
※Dead Letter Queueとは、実行失敗したキューを、別キューに退避でる設定 - Receive Message Wait time:Dead Letter Queueを有効にする
- Dead Letter Queue:退避用のキュー名を指定
- Maximum Receives::Dead Letterと判定する失敗回数
メッセージ登録バッチ
それでは早速メッセージを登録してみます。
APIの詳細はこちら
require 'aws-sdk'
sqs = AWS::SQS.new(
:access_key_id => 'ダウンロードした鍵のAccess Key Id',
:secret_access_key => 'ダウンロードした鍵のSecret Access Key'
)
# キューのURL(AWS SQSコンソール画面のしたDetailsのURL)
queue_url = "https://sqs.ap-northeast-1.amazonaws.com/XXXXXXX/キュー名"
# メッセージ入力
p "登録するメッセージを入力してください:"
q_msg = gets.chop
# メッセージの登録
sqs.queues[queue_url].send_message(q_msg)
このスクリプトを実行後に、AWSコンソールにてキューのアクションよりViewを選択してみるとメッセージが登録されています。
メッセージの表示&削除
登録したメッセージを表示して、削除します。
require 'aws-sdk'
sqs = AWS::SQS.new(
:access_key_id => 'ダウンロードした鍵のAccess Key Id',
:secret_access_key => 'ダウンロードした鍵のSecret Access Key'
)
# キューのURL(AWS SQSコンソール画面のしたDetailsのURL)
queue_url = "https://sqs.ap-northeast-1.amazonaws.com/XXXXXXX/キュー名"
# メッセージの取得
msg = sqs.queues[queue_url].receive_message
# メッセージの表示
puts msg.body
# メッセージの削除
msg.delete
スクリプト実行時に、先ほど登録したメッセージ「abcdefg」が出力されます。
このスクリプトを実行後に、AWSコンソールにてキューのアクションよりViewを選択してみるとメッセージが削除されています。
以上、これでSQSをrubyよりごにょごにょ終了です。