はじめる前に
- 必須AWS アカウントを持っていること
- 必須マネジメントコンソールにサインインできること
- あると良い「非同期処理」という言葉のイメージがある
※ コマンドラインや SSH などの操作は一切ありません。すべてブラウザのコンソール上で完結します。
参照する公式ドキュメント
手順に迷ったときや、用語の意味を確かめたいときに開きましょう。
※ リンク切れの場合は、ページタイトルで検索してください。
背景・シナリオ
プログラム同士が直接やり取りすると、相手が処理中の間は送信側が待たされたり、相手が落ちていると届かなかったりします。こうした「直接つながっている」関係は、片方の都合がもう片方にすぐ影響してしまう点が弱みです。
そこで間にキュー(メッセージを一時的に溜めておく場所)を置くと、送信側はキューにメッセージを置くだけで処理が完了し、受信側は都合のいいタイミングで取りに行けます。この「時間差があっても成立する」関係が、非同期処理の基本の形です。今回は Amazon SQS(Simple Queue Service)を使って、この感覚を実際に体験します。
送ったメッセージはどこに行くの?すぐ消える?
キューの中に一定期間(デフォルトで4日間)保持されます。受信側が取りに来るまで消えません。
メッセージを受信したら、自動でキューから消えるの?
いいえ、受信しただけでは消えません。一定時間(可視性タイムアウト)は他の受信者から見えなくなるだけで、本当に削除するには明示的な「削除」操作が必要です。これにより、処理に失敗したメッセージを取り逃さない仕組みになっています。
SQS 標準キューを 1 つ作り、コンソールからメッセージを送信したあと、別の操作としてメッセージを受信・内容確認・削除する一連の流れを行う。
つくる構成
送信と受信が別々の操作として行われ、その間をキューが受け止めている様子を示します。
(送信)
メッセージを送信
一定期間保持
(受信・削除)
内容確認後に削除
要件
以下の要件を満たし、送信から受信・削除までの一連の流れを行ってください。
| No | 要件 |
|---|---|
| 1 | リージョンは「東京(ap-northeast-1)」を使用する。 |
| 2 | SQS 標準キューを 1 つ作成する(名前は自由、例:my-first-queue)。 |
| 3 | コンソールの「メッセージを送信」から、本文を自由に決めて送信する。 |
| 4 | 「メッセージをポーリング」で受信し、内容を確認したのち、そのメッセージを削除する。 |
構築の進め方
「キューを作る → 送信する → 受信して確認する → 削除する」という順番で進みます。
-
マネジメントコンソールにサインインし、リージョンを東京に合わせる
ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが「アジアパシフィック(東京)ap-northeast-1」になっていることを確認します。
-
SQS 標準キューを作成する
画面上部の検索バーに
SQSと入力してコンソールを開き、「キューを作成」を選びます。タイプは「標準」を選び、名前を自由に決めます(例:my-first-queue)。それ以外の設定はデフォルトのままで構いません。設定はデフォルトで十分このハンズオンの目的は、送受信の流れを体感することです。可視性タイムアウトやメッセージ保持期間などの細かい設定は、最初は変更せずに進めましょう。
-
メッセージを送信する
作成したキューを選択し、「送受信」画面(またはキューの詳細から「メッセージを送信」)を開きます。メッセージ本文を自由に決めて入力し、「メッセージを送信」をクリックします。
-
「メッセージをポーリング」を実行し、内容を確認する
同じ画面で「メッセージをポーリング」をクリックします。少し待つと、送信したメッセージが一覧に表示されます。メッセージをクリックして、本文の内容を確認しましょう。
受信=削除ではないここで表示されているのは「受信した」状態です。まだキューから削除されたわけではないことを覚えておきましょう。
-
確認したメッセージを削除する
確認したメッセージを選び、「削除」を実行します。削除後、もう一度「メッセージをポーリング」を実行し、そのメッセージが出てこないことを確認します。
つまずきポイント
初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直せばよいか」の手がかりとして使ってください。
「送信したはずなのに、一覧に表示されない」
送信からポーリングに反映されるまで、わずかに時間がかかることがあります。少し待ってから再度ポーリングしてみましょう。また、直前のポーリングで既にそのメッセージを受信していて、可視性タイムアウトの間だけ見えなくなっている可能性もあります。少し時間をおいて再確認してみましょう。
「受信したのに、もう一度ポーリングすると同じメッセージが出てくる」
受信しただけでは、メッセージはキューから削除されません。一度見えなくなっても、可視性タイムアウトが過ぎれば再び他の受信に表示される対象になります。本当にキューから取り除くには、どの操作を行う必要があったか見直してみましょう。
完了チェック
要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。SQS コンソールを開いて、次を順に確かめましょう。
- キューの一覧に、自分が作成したキューが表示されている。
- キューの詳細画面で、「利用可能なメッセージ」の数が送信に応じて増減している。
- 「メッセージをポーリング」を実行すると、送信した本文の内容を確認できる。
- 削除を実行したあとにポーリングしても、そのメッセージが一覧に出てこない。
考えてみよう
手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。
- キューに溜める方式は、直接送る方式と比べてどんな場面で有利でしょうか。
ヒント
受信側の処理が一時的に遅い、あるいは落ちている場面を考えてみましょう。送信側がその間ずっと待たされたり、メッセージが失われたりする状況と、キューがある場合の違いを比べてみましょう。 - 同じメッセージを2回処理してしまう可能性はあるでしょうか。あるとしたら、何が原因として考えられるでしょうか。
ヒント
受信してから削除するまでの間に、何らかの理由で削除操作が行われなかった場合を考えてみましょう。可視性タイムアウトが過ぎると、そのメッセージは再びほかの受信対象になります。 - このキューを複数のプログラムが同時に受信しようとしたら、同じメッセージを2つのプログラムが両方受け取ってしまうことはあるでしょうか。
ヒント
可視性タイムアウトの仕組みが、1つのメッセージに対してどのように働くかを思い出してみましょう。受信中のメッセージが、他の受信者からはどう見えているかがポイントです。
後片づけ
作成したキューを削除して片づけます。
- 作成した SQS キューを削除する:SQS コンソールのキュー一覧から、このハンズオンで作成したキュー(手順 2 で付けた名前)を選び、「削除」を実行する。
削除するのは、このハンズオンで自分が作ったキューだけ
キューの一覧には、すでに他の用途で使っているキューが並んでいるかもしれません。間違えて削除しないよう、このハンズオンのために付けた名前のキューだけを選んで削除してください。
コストに関する注意: Amazon SQS には無料利用枠(月100万リクエストが目安)があり、今回の範囲は無料です。最新の料金については、AWS の公式料金ページで確認してください。キュー自体やメッセージの送受信には、この範囲を超えない限り料金はかかりません。