AWS SQSを使ってお手軽にメッセージキューイング(MQ)をしよう!
  • facebookページ
  • twitterページ
  • 2018.11.08

    AWS SQSを使ってお手軽にメッセージキューイング(MQ)をしよう!

    「メッセージキューイング」という言葉をご存知でしょうか?

    ある処理から別の処理を起動したい、でも毎回引数(メッセージ)がちがうし、連続して別の処理へ指示が発生しても順番は守りたい。そもそも「別の処理」とは別システム内、別サーバーにあるし・・・という場合がよくあります。

    テキストファイルに引数を書いてメッセージを渡してもよいのですが、その方法ではどこまで終わったか管理するのが難しいし、他のプログラムや悪意のある人が内容を書き換えてしまうことも考えられます。

    そんなときに使うのが、メッセージキューイングという方法です。AWSでは、メッセージキューイングが簡単に実装できるサービスがあります。

    それが、今回解説するAWS Simple Queue Services (SQS)です!処理と処理の連携や、システム間連携でお悩みのエンジニアの方々、必見です。

    Amazon Simple Queue Service (SQS)とは

    AWS SQSを語る前に、メッセージキューイング(MQ)について触れておきましょう。

    メッセージキューイング(MQ)とは?

    冒頭で触れた「ある処理から別の処理を起動する」に沿って説明します。以降、ある処理を処理1、別の処理を処理2とします。

    処理1と処理2について、以下の前提条件を仮定します。

    • 処理1は処理2に対し、引数や値などなどの何らかの情報を渡す
    • 処理1は処理2を何度も連続して呼び出す
    • 呼び出し順に処理する

    処理1が処理2を起動するときの指示や渡す情報を「メッセージ」と呼びます。そしてメッセージは発生順に処理されなければいけないので、ちょうど筒状の入れ物にメッセージを入れていき、先に入れたものから押し出されて処理2へ渡される、と表現できます。先入れ先出し(First-In First-Out:FIFOと省略することもある)といいます。

    筒の中身、つまりメッセージが筒に入り順番を待って連なっていることを「キュー」といいます。後ろからメッセージをキューへ入れていき(キューイングといいます)、入れた順に処理をする、この仕組みをメッセージキューイング(MQ)というのです。

    処理2は、自分からキューを参照して、次に処理するメッセージはどれかを確認する必要があります。この作業をポーリングと呼びます。

    MQを導入するメリット

    MQを導入すると、処理間・システム間の連携が疎になります。

    先の例でいうと、処理1はメッセージをキューイングさえしてしまえば終わりです。処理2がメッセージを取得できない状態だったとしても、処理1には関係がありません。処理2のトラブルにひきづられて処理1がダウン、ということもありません。

    もちろん、処理1は処理2の戻り値をとったり、といった互いの関連性をもたせるような設計は避けるのが前提です。

    そもそも「メッセージ」とは何か

    メッセージとは何を意味するのでしょうか?

    先の例でいうと、メッセージとは処理1が処理2に渡すものです。例えば処理2が起動するにあたり何らかの引数が必要なら、それを渡さなくてはなりません。処理1がメッセージをキューイングするときに、その引数をメッセージに格納し、処理2がそれを拾う、といった感じです。

    単一の値を渡すときは何も考える必要はないのですが、複数の値を渡すときはJSONで渡せば何かと便利で今風ですね!

    そして、Amazon SQSとは何か

    MQについてひと通り解説したところで、今度はAmazon SQSのメリットを考えてみましょう。

    Amazon SQSは、AWSが提供するMQサービスです。

    前述のMQとしての最低限の機能はもちろん、AWSのサービスであるメリットを活かして、他のサービス(AWS CloudWatch等々)や、AWS内のID体系との連携も可能です。また、AWSの提供するSDKを利用して、さらに便利に活用できます。

    Amazon SQSのメリット

    簡単に導入できる、コードを試せる

    それでは、早速試してみましょう。

    AWSのコンソールから、Amazon SQSを選択し、必要な項目を入力していきます。難しければ、英語ながらチュートリアルが用意されています。

    でも、何をインストールして、というよりどうやって導入するんだろう…そう心配になった方もおられるでしょう。心配はまったく不要です!

    前払い金や手続きは一切不要で、何もインストールする必要はありません。サーバーインスタンスすら不要です!本当に試すだけなら、手動で(つまりAWSのマネジメントコンソールから)メッセージをキューイングできるし、ポーリングだって手動でできます。

    それ以上試したい、つまり自分でコードを書いてメッセージをキューイングしたり用が済めば削除したり、といったことを試したい方ももちろん大丈夫です。

    AWSではすでにAmazon SQSの開発用SDKを用意しています。Ruby、JavaScript、.Net、Python、Java、PHPで対応可能です。これらを使ってコードレベルで試すことも可能です。

    絶対転送します!確実なメッセージ配信

    AWSは、確実なメッセージ配信を約束しています。いかなる量のメッセージでもロスすることはありません。1つのメッセージは複数のコピーが作成され、複数のアベイラビリゾーンに配置して冗長化されています。必要に応じてユーザーがそれらを利用することも可能です。

    誰にも見せません!機密保護の観点

    Amazon SQSに保存されたメッセージは、暗号化して保存されます。システム間や機能間で、機密性の高いメッセージのやりとりが可能です。

    Amazon SQSでできること

    ここではAmazon SQSの機能面を重視して解説しましょう。

    何もインストールしません

    Amazon SQSを導入するにあたって、ミドルウェア等々、何もインストールする必要はありません!従来であればなにかミドルウェアをインストールして、保守して、ライセンス数をしたり運用体制を構築したり、ライセンスが切れたら継続契約をして・・・となりますよね。

    その点、Amazon SQSはAWSマネジメントコンソールで設定するだけです!

    自動でスケーリング

    Amazon SQSは、自動でスケーリングされます。よって事前のキャパシティ設計や監視、キュー数に応じたスケーリングなどは一切不要です!キューの急増が起こった際でも、何もせずに良いのは大きいですね。

    他のサービスと一緒にキー管理

    Amazon SQSはAWS Key Management Service (KMS) に対応しているので、SQSメッセージを保護するキーと、その他のAWSサービスにおけるリソースを保護するキーを一括して管理できます。

    それだけでなく、暗号化キーが使用されるたびにAWS CloudTrailに記録されます。その記録をさまざまな監査に対する証跡としても利用できますね。

    先入れ先出しでなくともよい

    Amazon SQSはMQ方式を踏襲しているためFIFO(先入れ先出し)という解説をしました。しかし、順番は特に重要な問題ない、という場合は順不同にすることもできます。これを標準キューといいます。

    料金

    毎月最初の100万件のリクエストまでは・・・なんと無料です!それ以降の料金は、すべてのリージョン共通で同じです。

    標準キューは100万件あたり0.40USD、つまり0.00000040 USD/リクエストです。しかも単位はリクエストです。1リクエストに10メッセージまで含めることができます。標準キューは100万件あたり0.50USD、つまり0.00000050 USD/リクエストです。

    基本的な使い方

    では、実際にメッセージをキューイングしてみましょう。まずはキューを作成するところからです。キューとは、以下の図の筒状の場所にあたります。

    キューの作成は、キュー名やタイプ(標準かFIFOか)、必要に応じてその他詳細を入力します。

    できました。以下のチェックボックスの付いた行です。

    ここにメッセージを送信してみましょう。先ほどの絵でいうと、ちょうど数字の箱をキューに送る操作に相当します。

    次に、たまったメッセージを確認しましょう。以下の選択肢の中の「メッセージの表示/削除」から可能です。

    これを選択すると、今からポーリングを開始するかどうかを確認するメッセージが開きます。

    ポーリングが終了後、キューイングされているメッセージが表示されます。

    同じPCから一気にやったのでイメージがつきにくいですが、本来はこの一連の流れを別サーバーや別システム間で、さらにAPI経由で行うのです。

    メッセージの受け渡しのイメージがつきましたでしょうか?

    まとめ

    この記事では、Amazon SQSを解説しました。システム間連携や機能間連携で、メッセージの受け渡しにお困りの方、ぜひ本記事を参考にして、Amazon SQSの導入を検討してみてくださいね。


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!フリーエンジニアになりたい方向けのコンテンツも盛りだくさんです。

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。年収800万円以上のハイスペック転職をご希望の方は「ポテパンプロフェッショナル」もご用意しておりますのでご利用下さいませ。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料10万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテクラバナー ポテプロバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE