skillup

技術ブログ

サーバー・ネットワーク

SQSについて

投稿日:2019年1月2日 更新日:

以前、少しQueueの登録について書きましたが、今回はAWSのキューサービスであるSQSについて。

以前のリンク

Queueの登録と実際の処理に関して

SQSのポイントについて簡単にまとめて置きたいことなど。

Queueとは?

以前のリンクでも書きましたが、ある処理をあらかじめ登録しておき、処理自体はまた別の機会に行うようなケースです。

一般的には非同期的な処理をしたいとき(具体的には時間のかかる処理や分散する必要のある処理をしたいケース)が多いと思われます。DBがらみのでデータを大量に登録するとか、ネットワークがらみなどですかね・・・スクレイピングアプリとか作ったら色々使えるケースが多そうです。

昔、倉庫管理アプリを作っていた時にこの話題によくなりましたね。倉庫管理アプリでは引き当てという処理が必要になるケースが多いのですが、結構時間のかかる処理でユーザーはこれが終わるまで画面の前で待ってなければいけなかったりします。

それをキューに登録しておき、夜間に実行するようにすれば、いちいち待たなくていいというような話題が当時出ていました。結局実現しませんでしたが・・

SQSについて

Queue自体の登録

自分が実行したのは以下のケースです。

AWSのSNS

エンドポイントにSQSのarnを書いておき、SNS→SQSと連携させる方法です。

プログラムから

メジャーな言語であればAPIが実装されていますので、プログラムの中でこれを書く方法もあります。

ちなみにテストで実行する場合は、AWSのshellが一番便利かと思います。(下記参照)

AWS CLIを使ったSQSトリガーとの連携

どの方法でも後述するアクセス制限が必要になってきます。

アクセス制限

AWSではQueueの処理に関して権限があります。

画面側で設定することになりますが、権限を解放していないとQueueの処理が適切にできません。「アクセス許可」というタブで適切に設定しましょう。

AWSアカウントでSNSとSQSを連携させるには

ポーリング

メッセージのチェック自体のことをポーリングというようです。

ショートポーリングとロングポーリングについて

ポーリングの時間が長いか短いかの違い。一般的にはロングポーリングの方がメリットが大きいため、ロングポーリングが推奨される。

【AWS公式ドキュメントを噛み砕く】SQSとは?

Queueのタイプ(FIFO or スタンダード)

FIFO

要するに登録された順番と実行する順番を守るタイプです。順番を守る代わりにややスピードは落ちるようです。

スタンダードタイプ

登録された順番と実行される順番を必ずしも保障しないパターンです。行列に並んだ順番と処理される順番が必ずしも一致しないのと似ています。

可視性タイムアウト

排他制御の時間です。要はあるキューが実行中にこの時間が短いと二重に処理をしてしまう可能性があります。処理がどのくらいで終わるかを考えましょう。SQSの場合、設定時間は1秒から12時間まであるようです。

エラーが起こった場合のキューの処理

実務でハマりました・・・あるキューが正常に終わった時のみ、キューの削除をするようにしたんですが、そうするとエラー起こしたキューは、

  1. キューの取得
  2. エラーで削除されない
  3. 再度キューの取得
  4. 以下永久ループ

となってしまうんですよね・・・

この場合、一度削除して別の処理をするか、デッドレターキューという別のキューにする仕組みが必要のようです。

Amazon SQSを使う前に知っておきたい基本的なこと

 

-サーバー・ネットワーク
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

nginxインストール(サブディレクトリでcakePHPを使いたいとき)

以前nginxのインストールを行いましたが、理解が浅かったようで今回すげーはまりました(汗) ガチンコ塾でもいっていますが、覚え始めの時はコピペでもいいですが(最初から100%の理解は非現実的)、慣れ …

no image

chefのインストール

以前からずっと課題になっていたchefのインストールについてです。 まだ全然わかっていませんが、なんとかvagrantからのインストールをすることができましたのでメモします。 chefでの環境構築とい …

no image

シェルの基礎+ユーザー切り替え関連

雑誌を見ていたらシェルの特集があったので、ちょっとメモリます。 補強したいところのみ要点をチェック。 Contents0.1 実行パスについて0.2 ビルドインコマンド0.3 シェル変数・環境変数0. …

no image

クロスドメインがらみのajax

ajaxで別ドメインに対して、プログラムを実行したい時に注意すべきことなどを。 Contents1 ログ、レスポンスヘッダをとにかく追う2 特定ドメインからの許可3 フレームワーク側での認証ロジック( …

no image

dockerでの環境構築 〜コンテナ作成し、実作業ができるまで(mac編)

今や環境構築の保存や移行などが比較的自由にできるようにはなってきていると思います。 自分の場合は未だにvagrantのイメージフォルダを移行してやっていますが(汗)。 参考リンク vagrantで仮想 …