アプリケーション間連携を疎結合で実現。「Amazon SQS」をグラレコで解説
Author : 安田 茂樹
※ 本連載では、様々な AWS サービスをグラフィックレコーディングで紹介する awsgeek.com を、日本語に翻訳し、図の解説をしていきます。awsgeek.com は Amazon Web Services, Inc. プリンシパル・テクニカル・エバンジェリスト、ジェリー・ハーグローブが運営しているサイトです。
近年、「モノリス」と呼ばれる単一の大きなアプリケーションから、複数のモジュールで構成される「マイクロサービス」あるいは「サーバーレス」と呼ばれるアーキテクチャへ移行するケースが増えてきています。
今回ご紹介する Amazon Simple Queue Service (Amazon SQS) は、マイクロサービス や サーバーレスアーキテクチャ において、アプリケーション間をつなぐ、コーディネーターのような役割を担うサービスです。具体的には、送信側が送ったメッセージをいったん処理待ちリスト (キューと呼びます) に溜めておき、その後、受信側がキューに問い合わせてメッセージを受信するサービスとなります。
ここまで読まれてみて、「Amazon SQSを間に挟まなくても、直接、送信側が受信側にメッセージを送れば良いのでは ?」と思われた方もいらっしゃるかもしれません。
メッセージの送信側 (以降、プロデューサーと呼びます) と受信側 (以降、コンシューマーと呼びます) の間にわざわざ Amazon SQS を挟むのには、一体どのようなメリットがあるのでしょうか ?
メリットは複数挙げられますが (図を参照)、1 番のメリットはプロデューサーとコンシューマーを完全に切り離して、お互いの独立性を保てる点が挙げられます。Amazon SQS を間に挟むことで、プロデューサーとコンシューマーがデータの送受信のためにお互いと同期を取る必要が無くなり、プロデューサーがキューに送信したメッセージを、コンシューマーが任意のタイミングで取得できるようになります。
このように、Amazon SQS を間に挟む事で、各アプリケーションの独立性を保ったまま、疎結合でつなぐことができます。

1. キューの種類について
Amazon SQS には以下の 2 種類のキューがあります。
- 各メッセージが、送信した順序通りかつ 1 回のみ受信される「FIFO キュー」
- 各メッセージが、送信した順序通りに受信されるとは限らず、かつ 1 回以上受信される可能性のある「標準キュー」
キューを作成する際に、システム要件に合わせていずれかの種類を選択します。なお、「FIFOキュー」は、「標準キュー」に比べ、100 万リクエストあたりの料金が若干高くなっています (料金に関しては後述します)。

2. メッセージの流れについて
ここで、Amazon SQS のメッセージの流れを見てみましょう。
図では、アプリケーションがAmazon SQS 経由で AWS Lambda 関数にメッセージを送る場合の処理の流れを表しています。図の 1~5 の流れは以下のようになります。
- アプリが Amazon SQS のキューにメッセージを追加
- Lambda サービスがキューに問い合わせ (ポーリング) を行い、メッセージを受信する
- Lambda サービスが Lambda 関数を呼び出し、メッセージを渡す
- Lambda関数が処理を実行し、Lambdaサービスに「Success」を返す
- Lambda サービスが、Amazon SQS のキューから当該メッセージを削除する
Amazon SQS のキューにいったん入ったメッセージは、メッセージ保持期間中 (デフォルトでは 4 日間) は自動的に削除されることはありません。そのため、5. で示すように、コンシューマー側から削除する必要があります。

3. セキュリティについて
次に、Amazon SQS のセキュリティについて見てみましょう。
アクセス許可について
Amazon SQS では、許可されたユーザーのみがキューへアクセスできるよう設定することができます。以下のいずれかの方法、あるいは両方の方法でアクセス許可を設定することが可能です。
- IAM ポリシーを使う方法
- Amazon SQS ポリシーを使う方法 (IAM ポリシーに似たリソースベースのアクセス許可)
暗号化について
機密データをやり取りする際には、暗号化が欠かせません。
Amazon SQS では、転送時 (Amazon SQS とデータを送受信する時)、および保管時 (Amazon SQS データセンター内のディスクに格納されているとき) の両方において、メッセージの暗号化に対応しています。
転送時の暗号化には、SSL/TLS またはクライアント側の暗号化を使用して、転送時のデータを暗号化できます。一方、保管時のデータの暗号化には、メッセージをデータセンターのディスクに保存する前に、AWS Key Management Service を使ってサーバー側の暗号化 (SSE) を行います。サーバー側の暗号化 (SSE) を行ったメッセージは、認可されたコンシューマーへメッセージを送信するタイミングで復号されます。
ログ記録について
AWS CloudTrail を使用して Amazon SQS API コールのログを記録することができます。
なお、Amazon SQS は、PCI DSS レベル 1 に準拠しており、お客様にて必要な追加の実装を行なっていただくことで、PCI DSS の要件を満たせるようになっています。

4. キューの正常性の監視
キューの正常性を監視するには、Amazon CloudWatch を使用します。Amazon CloudWatch を使用することで、Amazon SQS キューの CloudWatch メトリクスが自動的に収集され、1 分間隔で CloudWatch にプッシュされます。Amazon SQS メトリクスに CloudWatch アラームを設定することもでき、例えば 「1 分間あたりのメッセージ数が一定のしきい値を超えた場合に運用チームに通知し、同時に Auto Scaling アクションを実行して Amazon EC2 インスタンスを追加する」 といった動作を設定できます。

5. サービスクォータについて
他の AWS サービス同様、Amazon SQS にもサービスクォータと呼ばれる制限があり、制限の範囲内で利用できます。ただし、最大メッセージサイズに関しては、拡張クライアントライブラリ と Amazon S3 を併用することで、最大 2 GB のメッセージまで扱うことが可能となります。

6. 料金について
Amazon SQS の料金は、基本料金なしの完全従量制の料金体系となっており、リクエスト数に対する課金 + データ転送量に対する課金が発生します。
- リクエスト数に対する課金に関しては、月間 100 万リクエストまでは無料、超えた部分に対して 100 万リクエスト単位で課金されます。
- データ転送量に対する課金に関しては、Amazon SQS が送信するデータに対し、月間 1 GB までは無料、超えた部分に対し 1 GB 単位で課金されます。(Amazon SQS が受信するデータは無料)
また、Amazon S3 や AWS KMS を使用する場合は各サービスの料金が別途発生します。
Amazon SQS の料金の詳細に関しましては、こちら をご確認ください。

7. アプリケーション統合のための主要な AWS サービス
今回ご紹介した Amazon SQS 以外にも、マイクロサービスやサーバーレスアプリケーションを統合する AWS サービスとして、図のようなサービスがあります。
用途に合ったサービスをお使いいただくことで、アプリケーションを適切に統合することができます。

最後に、全体の図を見てみましょう。

今回は、アプリケーション間連携を疎結合で実現する「Amazon SQS」をご紹介しました。
サービスの詳細に関しましては、こちら をご覧ください。
AWS グラレコ解説のその他の記事はこちら
- 選択
- 今話題のブロックチェーンをAWSで実現する仕組みをグラレコで解説 »
- サーバーレスって何が便利なの ? AWS でサーバーレスを構築するためのサービスをグラレコで解説 »
- 機械学習のワークフローってどうなっているの ? AWS の機械学習サービスをグラレコで解説 »
- 外部から AWS のバックエンドサービス利用を実現する仕組みをグラレコで解説 »
- AWS でデプロイの自動化を実現するベストプラクティスをグラレコで解説 »
- コンテナを使ってモノリスを分割する方法をグラレコで解説 »
- クラウドへ移行する理由とそのステップをグラレコで解説 »
- Windows ワークロードをクラウドへ移行するためのベストプラクティスをグラレコで解説 »
- サーバーレスのイベントバスって何 ? Amazon EventBridge をグラレコで解説 »
- サーバーレスで SaaS を構築する方法をグラレコで解説 »
- 「あなたへのおすすめ」はどう生成するの ? Amazon Personalize で簡単に実現する方法をグラレコで解説 »
- クラウド設計・運用のベストプラクティス集「AWS Well-Architectedフレームワーク」をグラレコで解説 »
- 特定の顧客セグメントにメッセージ送信。「Amazon Pinpoint」の仕組みをグラレコで解説 »
- アプリにユーザー認証機能を簡単に追加できる「Amazon Cognito」をグラレコで解説 »
- わずか数分で WordPress サイトを構築できる「Amazon Lightsail」をグラレコで解説 »
- 異なるアプリケーション同士の疎結合を実現。「Amazon SQS」をグラレコで解説 »
- Web アプリを高速に開発できる「AWS Amplify」をグラレコで解説 »
- 機械学習の知識ゼロでもテキストデータを分析。Amazon Comprehend をグラレコで解説 »
- ビジネスデータをまとめて可視化 & 分析。Amazon QuickSight をグラレコで解説
- 人工衛星の地上局を 1 分単位で利用。AWS Ground Station をグラレコで解説
- カオスエンジニアリングで本当にカオスにならないための進め方をグラレコで解説
- GraphQL API を簡単に作成 & 運用。AWS AppSync をグラレコで解説
- IoT 環境を必要な機能を選択するだけで構築。AWS IoT をグラレコで解説
- 高い可用性と耐久性のオブジェクトストレージ。Amazon S3 をグラレコで解説
- サーバーレスでイベント駆動型アプリケーションを実現。AWS Lambda をグラレコで解説
- データサイエンス教育の強い味方。Amazon SageMaker Studio Lab をグラレコで解説
- 高速で柔軟な NoSQL データベースサービス。Amazon DynamoDB をグラレコで解説
- リレーショナルデータベースを簡単・迅速に実現。Amazon RDS をグラレコで解説
- アプリのワークフローを視覚的に構成。 AWS Step Functions をグラレコで解説
- データ保護に使う暗号化キーを一元管理。AWS KMS をグラレコで解説
- アプリケーションへのトラフィックを効率的に負荷分散。Application Load Balancer をグラレコで解説
- AWS で簡単にコンテナアプリケーションを構築 ! Amazon ECS をグラレコで解説
- 大規模データセットも簡単クエリ! Amazon Athena をグラレコで解説
- キャッシュ機能でアプリの高速化を実現 ! Amazon ElastiCache をグラレコで解説
- 使い慣れたプログラミング言語でクラウド環境を構築 ! AWS CDK をグラレコで解説
- ストリーミングデータを簡単にキャプチャ、処理、保存 ! Amazon Kinesis Data Streams をグラレコで解説
- AWS で始める機械学習はじめの一歩 ! AWS の主要な AI/ML サービスをグラレコで解説
- リレーショナルデータベースをサーバーレス化 ! Amazon Aurora Serverless をグラレコで解説
- ML 駆動の検索エンジンで企業の情報管理を革新! Amazon Kendra をグラレコで解説
- オンプレミス、エッジ、どこでも楽々コンテナ管理 ! Amazon EKS Anywhere をグラレコで解説
- 生成 AI アプリケーション開発をもっと身近に、簡単に ! Amazon Bedrock をグラレコで解説
- わずか数クリックで多様な脅威を監視しクラウドを保護 ! 脅威検出サービス Amazon GuardDuty をグラレコで解説
- データの改ざん耐性と変更履歴の検証可能性を実現 ! 台帳データベース Amazon QLDB をグラレコで解説
- 生成 AI x クラウドがもたらす次世代のイノベーション ! AWS Summit Japan Day 1 基調講演をグラレコで解説
- ビジネス向け生成 AI アシスタント Amazon Q Business をグラレコで解説
- 生成 AI コーディングアシスタント Amazon Q Developer をグラレコで解説
- フロントエンドとバックエンドを統合開発 ! フルスタック TypeScript 開発環境 AWS Amplify Gen 2 をグラレコで解説
- AWS へのスムーズな移行を強力サポート ! マイグレーションサービス AWS Application Migration Service をグラレコで解説
- あらゆるワークロードに適応する仮想サーバー Amazon EC2 をグラレコで解説
筆者プロフィール

安田 茂樹
アマゾン ウェブ サービス ジャパン合同会社
テクニカルコンテンツマネージャー
2014 年にアマゾンジャパン合同会社に入社後、デバイス試験部門にて発売前の数多くの Amazon デバイスの試験に携わる。2019 年より現職。
趣味は新しいガジェットを試すこと、旅行、食べ歩き。
AWS を無料でお試しいただけます