- 製品›
- アプリケーション統合›
- Amazon SQS›
- Amazon SQS に関するよくある質問
Amazon SQS に関するよくある質問
概要
自社製や市販パッケージのメッセージキューイングシステムと比較して、Amazon SQS にはどのようなメリットがありますか?
Amazon SQS では、メッセージキューの管理のために独自のソフトウェアを構築したり、市販またはオープンソースのメッセージキューイングシステムを使用してシステムの開発や設定の初期作業に多くの時間を費やしたりする必要がありません。
また、自社製または市販のパッケージ化されたメッセージキューイングシステムでは、定期的なハードウェアのメンテナンスやシステム管理のためのリソースが必要です。ハードウェア障害の発生時にメッセージが失われないよう、冗長性のあるメッセージストレージを設定する必要もあるため、システムの設定や管理はさらに複雑になります。
対照的に、Amazon SQS では、管理オーバーヘッドが発生せず、必要な設定もわずかです。Amazon SQS は、毎日数十億件のメッセージを処理する巨大な規模で有効に機能します。Amazon SQS に送信されるトラフィック量の拡張や縮小にも、設定は必要ありません。また、Amazon SQS はメッセージの耐久性が非常に高いため、お客様や関係者に安心してお使いいただけます。
Amazon SQS は Amazon Simple Notification Service (SNS) とどのように異なりますか?
Amazon SNS を利用すれば、アプリケーションは「プッシュ」メカニズムを使用して、複数のサブスクライバーにタイミングが重要なメッセージを送信することができます。そのため、更新を定期的に確認したり、「ポーリング」したりする必要性がなくなります。Amazon SQS は、分散型アプリケーションが使用するメッセージキューサービスで、ポーリングモデルを経由してメッセージを交換し、コンポーネントの送受信を切り離すために使用することができます。
Amazon SQS は Amazon MQ とどのように異なりますか?
既存のアプリケーションで処理しているメッセージング機能をクラウドにすばやく簡単に移したい場合、Amazon MQ の使用をお勧めします。業界標準の API とプロトコルがサポートされているため、どのような標準に準拠したメッセージブローカーからでも、アプリケーション内のメッセージングコードを書き換えることなく Amazon MQ に切り替えられます。クラウド上でまったく新しいアプリケーションを構築される場合は、Amazon SQS と Amazon SNS のご検討をお勧めします。Amazon SQS と SNS は、ほぼ無制限にスケーリングでき、シンプルで使いやすい API を提供する、軽量な完全マネージド型のメッセージキューサービスおよびトピックサービスです。
Amazon SQS にはメッセージの順序付け機能がありますか?
はい。FIFO (先入れ先出し) キューではメッセージが送受信された正確な順序が保持されます。FIFO キューを使用する場合、メッセージ内に順序付けの情報を含める必要はありません。詳細については、「Amazon SQS デベロッパーガイド」の「FIFO キューのロジック」を参照してください。
標準キューには、メッセージの順序をできるだけ維持しようとする厳密ではない FIFO 機能が備わっています。ただし標準キューは、徹底して分散化されたアーキテクチャを使用して、非常にスケーラブルであるように設計されているため、送信されたのとまったく同じ順序でメッセージを受信することは保証されていません。
Amazon SQS では、メッセージの配信は保証されていますか?
標準キューでは配信が 1 回以上行われます。これは、各メッセージが少なくとも 1 回配信されることを意味します。
FIFO キューでは 1 回限りの処理が行われます。これは、各メッセージが 1 回配信され、コンシューマーが処理および削除するまでメッセージは使用可能な状態であることを意味します。キューでメッセージの重複が起きることはありません。
Amazon SQS と Amazon Kinesis Streams の違いは何ですか?
Amazon SQS では、メッセージがアプリケーション間またはマイクロサービス間を移動するときにメッセージを格納するため、信頼性が高く非常にスケーラブルなホスト型キューが提供されます。Amazon SQS は、分散アプリケーションのコンポーネント間でデータを移動し、これらのコンポーネントを分離する場合に役立ちます。Amazon SQS は、デッドレターキューやポイズンピルの管理など、共通のミドルウェアコンストラクトを提供します。汎用のウェブサービス API も提供され、これには AWS SDK がサポートしている任意のプログラミング言語でアクセスできます。Amazon SQS は標準キューと FIFO キューの両方をサポートしています。
Amazon Kinesis Streams では、ストリーミングの巨大なデータをリアルタイムに処理可能で、複数の Amazon Kinesis アプリケーションへのレコードを読み込んで再生する機能を利用できます。Amazon Kinesis クライアントライブラリ (KCL) では、特定のパーティションキーのすべてのレコードが同じレコードプロセッサに提供されるため、同じ Amazon Kinesis ストリームから読み取りを行う複数のアプリケーションを構築することが容易になります (カウント、集計、フィルタリングの実行など)。
詳細については、Amazon Kinesis のドキュメントを参照してください。
Amazon は Amazon SQS を自社アプリケーションに使用していますか?
はい。Amazon のデベロッパーは、毎日多数のメッセージを処理する必要があるさまざまなアプリケーションで Amazon SQS を使用しています。Amazon.com と AWS の両方の主要ビジネスプロセスで、Amazon SQS が使用されています。
請求
Amazon SQS にはどれくらいのコストがかかりますか?
使用した分にのみコストがかかります。最低料金はありません。
Amazon SQS の料金は、リクエストごとに計算される分に加えて、Amazon SQS から転送されるデータに対してデータ転送料金をお支払いいただきます (データが同じリージョン内の Amazon Elastic Compute Cloud (EC2) インスタンス、または AWS Lambda 関数に転送される場合を除きます)。キューの種類およびリージョンごとの詳細な料金明細については、「Amazon SQS の料金」を参照してください。
Amazon SQS の無料利用枠内で何ができますか?
Amazon SQS の無料利用枠では、毎月 100 万件のリクエストを無料でご利用いただけます。
多くの小規模アプリケーションは、完全にこの無料利用枠内で運用できます。ただし、データ転送料金は別途必要です。詳細については、「Amazon SQS の料金」を参照してください。
無料利用枠は月ごとに利用できます。無料利用枠は月をまたいで累積されることはありません。
Amazon SQS のすべてのリクエストに対して課金されますか?
はい、無料利用枠を超えるすべてのリクエストに対して課金されます。Amazon SQS のすべてのリクエストに対して課金され、一律単価で請求されます。
Amazon SQS のバッチ操作は、他のリクエストよりもコストが多くかかりますか?
いいえ。バッチオペレーション (SendMessageBatch、DeleteMessageBatch、ChangeMessageVisibilityBatch) のコストはすべて、Amazon SQS の他のリクエストと同じです。メッセージをバッチにグループ化することにより、Amazon SQS のコストを削減できます。
Amazon SQS を利用すると、どのように課金され、請求されますか?
Amazon SQS の使用を開始するための初期料金はありません。月末に、その月の使用料金が自動的にお客様のクレジットカードに請求されます。
現在の請求期間の料金は、AWS のウェブサイトでいつでも確認できます。
- AWS アカウントにログインします。
- [Your Web Services Account] で [Account Activity] を選択します。
Amazon SQS キューに関連するコストはどのように追跡および管理できますか?
リソースとコスト管理のキューは、コスト配分タグを使用してタグ付けして追跡できます。タグは、キーと値のペアで構成されるメタデータラベルです。たとえば、コストセンターでキューをタグ付けしてから、それらのコストセンターに基づいてコストを分類し、追跡することができます。
詳細については、Amazon SQS デベロッパーガイドの「Amazon SQS キューのタグ付け」を参照してください。AWS リソースのコスト配分タグ付けの詳細については、AWS 請求とコスト管理ユーザーガイドの「コスト配分タグの使用」を参照してください。
価格には税金が含まれていますか?
別途記載がない限り、表示される料金には VAT、売上税、その他取引に対して適用される一切の税金および関税は含まれません。
日本の請求連絡先をお持ちのお客様が AWS をご利用になった場合は、ご利用になったリージョンにかかわらず、料金とあわせて別途消費税をご請求させていただきます。詳細については、「アマゾン ウェブ サービス消費税率変更についてのよくある質問」を参照してください。
特徴、機能、インターフェイス
Amazon SQS を AWS の他のサービスと共に使用できますか?
はい。アプリケーションの柔軟性とスケーラビリティを向上させるために、Amazon SQS を、Amazon EC2、Amazon Elastic Container Service (ECS)、AWS Lambda といったコンピューティングサービス、および Amazon Simple Storage Service (Amazon S3)、Amazon DynamoDB といったストレージサービスやデータベースサービスと共に使用できます。
Amazon SQS とどのようにやり取りできますか?
AWS マネジメントコンソールを使用して Amazon SQS にアクセスすると、簡単に Amazon SQS キューを作成してメッセージを送信できます。
Amazon SQS はウェブサービス API も提供します。また、AWS SDK とも統合されているため、任意のプログラミング言語で作業することが可能になります。
Amazon SQS では、どのような API アクションが利用可能ですか?
メッセージキューのオペレーションの詳細については、「Amazon SQS API リファレンス」を参照してください。
メッセージキューに対するオペレーションを実行できるのは誰ですか?
AWS アカウントの所有者 (またはアカウント所有者が権限を委任した AWS アカウント) のみが、Amazon SQS メッセージキューでオペレーションを実行できます。
Java Message Service (JMS) と Amazon SQS を併用できますか?
はい。JMS クラスター運用のオーバーヘッドの高さについて心配することなく、Amazon SQS の規模、低いコスト、および高可用性を生かせます。
Amazon では、JMS 1.1 仕様を実装し Amazon SQS を JMS プロバイダーとして使用する Amazon SQS Java メッセージングライブラリを提供しています。詳細については、「Amazon SQS デベロッパーガイド」の「Amazon SQS での JMS の使用」を参照してください。
Amazon SQS ではメッセージがどのように識別されますか?
すべてのメッセージには、メッセージがメッセージキューに配信される際に Amazon SQS から返される、グローバルに一意の ID が割り当てられます。メッセージをさらに処理するためにこの ID が必要になるわけではありませんが、メッセージキューの特定のメッセージが受信状況を追跡するのに役立ちます。
メッセージキューからメッセージを受信すると、応答に受信ハンドルが含まれます。受信ハンドルは、メッセージを削除する際に入力する必要があります。
詳細については、「Amazon SQS デベロッパーガイド」の「キューとメッセージの識別子」を参照してください。
Amazon SQS では処理に失敗したメッセージはどのように扱われますか?
Amazon SQS では、API やコンソールを使用してデッドレターキューを設定できます。デッドレターキューは、他のソースキューからメッセージを受信します。デッドレターキューを設定する際には、RedriveAllowPolicy を使用してデッドレターキューのリドライブに適切な許可を設定する必要があります。
RedriveAllowPolicy には、デッドレターキューのリドライブ許可のパラメータが含まれています。どのソースキューが JSON オブジェクトとしてデッドレターキューを指定できるかを定義します。
一度デッドレターキューを作ると、そのキューは、完了できなかった処理試行が最大数に達した後にメッセージを受信します。デッドレターキューを使用すると、処理できないメッセージを後で分析するために分離できます。
詳細については、「Amazon SQS デベロッパーガイド」の「Amazon SQS デッドレターキューの使用」を参照してください。
可視性タイムアウトとは何ですか?
可視性タイムアウトは、Amazon SQS で、他の消費コンポーネントがメッセージの受信と処理を行わないようにする期間です。詳細については、「Amazon SQS デベロッパーガイド」の「可視性タイムアウト」を参照してください。
Amazon SQS はメッセージメタデータに対応していますか?
はい。Amazon SQS のメッセージには、最大 10 件のメタデータ属性を含めることがきます。メッセージ属性を使用して、メッセージの本文と本文を記述するメタデータを分離できます。これにより、アプリケーション側で処理方法を判断するためにメッセージ全体を調査する必要がなくなり、情報を処理して保存する速度と効率が向上します。
Amazon SQS メッセージ属性の形式は、名前-タイプ-値の 3 部から構成されます。サポートされるタイプには、文字列、バイナリ、および数値 (整数、浮動小数点、および倍精度浮動小数点数を含む) があります。詳細については、「Amazon SQS デベロッパーガイド」の「Amazon SQS メッセージ属性の使用」を参照してください。
どのように "キューされていた時間" の値を判断できますか?
"キューされていた時間" の値を判断するため、メッセージの受信時に SentTimestamp 属性をリクエストできます。"キューされていた時間" の値で、現在の時間の結果からその値を差し引きます。
Amazon SQS のレイテンシーは通常どれくらいですか?
SendMessage、ReceiveMessage、DeleteMessage の各 API リクエストの場合、レイテンシーは通常数十ミリ秒~数百ミリ秒です。
匿名アクセスの場合、メッセージの SenderId 属性の値はどうなりますか?
AWS アカウント ID を利用できない場合 (メッセージの送信元が匿名ユーザーの場合など) は、Amazon SQS から IP アドレスが提供されます。
Amazon SQS ロングポーリングとは何ですか?
Amazon SQS ロングポーリングは、Amazon SQS キューからメッセージを取得する方法です。通常のショートポーリングは、ポーリングされたメッセージキューが空であっても直ちに応答を返しますが、ロングポーリングではメッセージがメッセージキューに達するか、ロングポーリングがタイムアウトになるまで応答を返しません。
ロングポーリングの場合、Amazon SQS キューでメッセージを利用できるようになった時点ですぐに、そのメッセージを低コストで取り出せます。ロングポーリングを使用すると、何も受信しない回数が減るため、SQS の使用コストが下がります。詳細については、「Amazon SQS デベロッパーガイド」の「Amazon SQS ロングポーリング」を参照してください。
Amazon SQS ロングポーリングを使用するには追加料金がかかりますか?
いいえ。ロングポーリングの ReceiveMessage 呼び出しに対して請求される料金は、ショートポーリングの ReceiveMessage 呼び出しの場合と同額です。
Amazon SQS ロングポーリングと Amazon SQS ショートポーリングを使用する必要があるのは、それぞれどのような場合ですか?
ほとんどの場合、Amazon SQS ショートポーリングではなく、Amazon SQS ロングポーリングを使用することをお勧めします。ロングポーリングリクエストを使用すると、メッセージがキューに達した時点ですぐに、キューの消費コンポーネントがそのメッセージを受信でき、また ReceiveMessageResponses インスタンスが空で返される回数が減ります。
ほとんどのユースケースで、Amazon SQS ロングポーリングはパフォーマンスの向上とコスト削減につながります。ただし、アプリケーションが ReceiveMessage 呼び出しから直ちに応答を受け取る必要がある場合は、アプリケーションに多少の変更を加えないとロングポーリングのメリットを活用できない可能性があります。
例えば、複数のキューを単一スレッドでポーリングするアプリケーションの場合は、ショートポーリングからロングポーリングへの切り替えが機能しない可能性があります。単一スレッドは、すべての空のキューでロングポーリングタイムアウトを待機し、メッセージが含まれる可能性のあるキューの処理が遅れるためです。
このようなアプリケーションで複数のキューを処理する場合は、単一スレッドを使用しないようにすることができます。これにより、そのアプリケーションで Amazon SQS ロングポーリングのメリットを活用できるようになります。
ロングポーリングタイムアウトにはどのような値を指定できますか?
通常は、ロングポーリングタイムアウトの上限値である 20 秒を指定できます。ロングポーリングタイムアウト値を大きくすると、ReceiveMessageResponses インスタンスが空で返される回数が減るので、ロングポーリングタイムアウトはできるだけ大きい値に設定するようにしてください。
アプリケーションが最大値の 20 秒で動作しない場合 (前の質問の例を参照)、ロングポーリングタイムアウトを最小で 1 秒まで減らせます。
AWS SDK はすべて、デフォルトの 20 秒のロングポーリングで動作します。Amazon SQS へのアクセスに AWS SDK を使用しない場合、または AWS SDK に短いタイムアウトを特別に設定した場合は、長いリクエストを許可するように、または短いロングポーリングタイムアウトを使用するように、Amazon SQS クライアントを変更しなければならないことがあります。
AmazonSQSBufferedAsyncClient for Java とは何ですか?
AmazonSQSBufferedAsyncClient for Java には AmazonSQSAsyncClient インターフェイスが実装され、以下のようないくつかの重要な機能が追加されています。
- アプリケーションに変更を加えることなく、複数の SendMessage、DeleteMessage、または ChangeMessageVisibility といったリクエストに対して自動バッチ処理を実行する。
- ローカルバッファにメッセージをプリフェッチする。アプリケーションは、Amazon SQS からメッセージが取り出されるのを待たずに直ちにメッセージを処理できる。
こうした自動バッチ処理とプリフェッチの連携によって、スループットが向上してアプリケーションのレイテンシーが減少するほか、Amazon SQS リクエストが減り、コストが削減されます。詳細については、「Amazon SQS デベロッパーガイド」の「クライアント側のバッファリングとリクエストのバッチ処理」を参照してください。
AmazonSQSBufferedAsyncClient for Java はどこでダウンロードできますか?
AmazonSQSBufferedAsyncClient は、AWS SDK for Java の一部としてダウンロードできます。
AmazonSQSBufferedAsyncClient for Java を使用する際にアプリケーションを書き換える必要がありますか?
いいえ。AmazonSQSBufferedAsyncClient for Java は、既存の AmazonSQSAsyncClient のドロップインリプレースメントとして実装されています。
最新の AWS SDK を使用できるようアプリケーションを更新し、クライアントを AmazonSQSAsyncClient から AmazonSQSBufferedAsyncClient for Java に変更されるなら、ご使用のアプリケーションで自動バッチ処理とプリフェッチの追加のメリットを利用できるようになります。
Amazon SNS のトピックから通知を受信するために Amazon SQS メッセージキューをサブスクライブするにはどうすればよいですか?
- Amazon SQS コンソールで Amazon SQS 標準キューを選択します。
- [Queue Actions] で、ドロップダウンの一覧から [Subscribe Queue to SNS Topic] を選択します。
- ダイアログボックスで、[Choose a Topic] ドロップダウンの一覧からトピックを選択して、[Subscribe] をクリックします。
詳細については、「Amazon SQS デベロッパーガイド」の「Amazon SNS トピックへのキューのサブスクライブ」を参照してください。
メッセージキュー自体は削除せずにメッセージキュー内のメッセージすべてを削除できますか?
はい。PurgeQueue アクションを使用して Amazon SQS メッセージキューのすべてのメッセージを削除できます。
メッセージキューを消去すると、それまでにそのキューに送信されたすべてのメッセージが削除されます。メッセージキューとその属性は残るため、再設定しなくてもメッセージキューを使い続けることができます。
特定のメッセージのみを削除するには、DeleteMessage アクションまたは DeleteMessageBatch アクションを使用します。
詳細については、チュートリアル: Amazon SQS キューからメッセージを消去するを参照してください。
FIFO キュー
FIFO キューは、どのリージョンで利用できますか?
FIFO キューは、Amazon SQS が利用可能なすべての AWS リージョンで利用できます。Amazon SQS が利用可能なリージョンについては、こちらをご覧ください。
メッセージのコピーは何回送られてきますか?
FIFO キューは、重複メッセージがないように設計されています。ただし、特定のシナリオではメッセージのプロデューサーによって重複が起きることもあります。例えば生産者がメッセージを送信し、応答がない場合に、同じメッセージを再送信する場合などです。Amazon SQS API には、メッセージのプロデユーサーが重複して送信しないようにする重複排除機能が用意されています。メッセージの生産者によって発生した重複は、5 分間の重複排除間隔で削除されます。
標準キューについては、重複したメッセージのコピーを受信することもあります (少なくとも 1 回の配信)。標準キューを使用する場合は、アプリケーションがべき等性を持つように設計する必要があります (つまり、同じメッセージを複数回処理したときにアプリケーションが悪影響を受けてはいけません)。
詳細については、「Amazon SQS デベロッパーガイド」の「1 回だけの処理」を参照してください。
以前使用していた Amazon SQS キューは FIFO キューに変わるのですか?
いいえ。Amazon SQS 標準キュー (既存のキューの新しい名称) は変わらず、標準キューをこれまで通りに作成できます。これらのキューでは引き続き、最高レベルのスケーラビリティとスループットが提供されますが、順序保証はなく、重複が発生することがあります。
標準キューは、複数のべき等消費者との作業配分など、多くのシナリオに適しています。
既存の標準キューを FIFO キューに変換できますか?
いいえ。作成時にキューのタイプを選択する必要があります。ただし、FIFO キューに移行することはできます。詳細については、「Amazon SQS デベロッパーガイド」の「標準キューから FIFO キューへの移行」を参照してください。
Amazon SQS FIFO キューには下位互換性がありますか?
FIFO キューの機能を利用するには、最新の AWS SDK を使用している必要があります。
FIFO キューでは、標準キューと同じ API アクションが使用され、メッセージの受信と削除の仕組みや可視性タイムアウトの変更も同じです。ただし、メッセージの送信時には、メッセージグループ ID を指定する必要があります。詳細については、「Amazon SQS デベロッパーガイド」の「FIFO キューのロジック」を参照してください。
Amazon SQS FIFO キューではどのような AWS CloudWatch メトリクスをサポートしていますか?
FIFO キューでは、標準キューでサポートされているすべてのメトリクスをサポートしています。FIFO キューでは、すべての近似メトリクスで正確な数が戻されます。例えば、以下の AWS CloudWatch メトリクスがサポートされています。
- ApproximateNumberOfMessagesDelayed – キュー内の、遅延が発生したためにすぐに読み取ることができないメッセージの数。
- ApproximateNumberOfMessagesVisible – キューから取得可能なメッセージの数。
- ApproximateNumberOfMessagesNotVisible – 転送中の (クライアントに送信されたが、まだ削除されていない、または可視性ウィンドウの末尾にまだ到達していない) メッセージの数。
メッセージグループとは何ですか?
メッセージは FIFO キュー内で別個の、順序が付けられた「バンドル」にグループ化されます。メッセージグループ ID ごとに、すべてのメッセージが厳密な順序で送受信されます。ただし、異なるメッセージグループ ID 値のメッセージは、送信および受信の順序が入れ替わる場合があります。メッセージグループ ID をメッセージに関連付ける必要があります。メッセージグループ ID を指定しないと、アクションは失敗します。
複数のホスト (または同じホスト上の異なるスレッド) が、同じメッセージグループ ID を持つメッセージを FIFO キューに送信した場合、Amazon SQS は到着順にメッセージを配信して処理に回します。Amazon SQS でメッセージが送信および受信された順序が確実に保持されるように、複数の送信者はそれぞれすべてのメッセージ送信で一意のメッセージグループ ID を使用するようにしてください。
詳細については、「Amazon SQS デベロッパーガイド」の「FIFO キューのロジック」を参照してください。
Amazon SQS FIFO キューでは複数のプロデューサーをサポートしていますか?
はい。1 つまたは複数のプロデューサーが FIFO キューにメッセージを送信できます。メッセージは Amazon SQS で正常に受信された順序で保管されます。
複数のプロデューサーが、SendMessage アクションまたは SendMessageBatch アクションからの成功応答を待たずに、メッセージを並行に送信する場合、そのプロデューサー間の順序が保たれない場合があります。SendMessage アクションまたは SendMessageBatch アクションの応答には最終的な順序シーケンスが含まれます。FIFO キューはこれを使用してキューにメッセージを配置します。そのため複数の並行の生産者コードによってキューにおける最終的なメッセージの順序を決定できます。
Amazon SQS FIFO キューでは複数のコンシューマーをサポートしていますか?
設計上、Amazon SQS FIFO キューでは、同じメッセージグループからのメッセージを同時に複数のコンシューマーに提供することはありません。ただし、FIFO キューに複数のメッセージグループが存在する場合、並列の消費者を利用して、別のメッセージグループからのメッセージを別のコンシューマーに提供するよう Amazon SQS を設定できます。
Amazon SQS FIFO キューのスループットクォータはどのくらいですか?
デフォルトでは、FIFO キューはバッチ処理ありで 1 秒あたり最大 3,000 件のメッセージを、またはバッチ処理なしで最大 300 件のメッセージを (1 秒あたり 300 件の送受信または削除) をサポートしています。より高いスループットが必要な場合は、Amazon SQS コンソールで FIFO の高スループットモードを有効にできます。これにより、バッチ処理なしで 1 秒あたり最大 70,000 件のメッセージがサポートされ、バッチ処理ではさらに多くのメッセージがサポートされます。リージョンごとの FIFO ハイスループットモードクォータの詳細な内訳については、AWS ドキュメントを参照してください。
FIFO キュー属性に固有の制限はありますか?
FIFO キューの名前は .fifo サフィックスで終わる必要があります。.fifo サフィックスは、キュー名の制限である 80 文字には含まれます。キューが FIFO であるかどうかを確認するには、キュー名がサフィックスで終わるかどうかをチェックします。
セキュリティと信頼性
データを保存している Amazon SQS のストレージの信頼性はどの程度ですか?
Amazon SQS では、すべてのメッセージキューとメッセージを、可用性の高い単一の AWS リージョン内で、冗長性のある複数のアベイラビリティーゾーン (AZ) に保存しています。そのため単一のコンピュータ、ネットワーク、AZ などの障害により、SQS メッセージがアクセスできなくなることはありません。詳細については、「Amazon Relational Database Service ユーザーガイド」の「リージョンとアベイラビリティーゾーン」を参照してください。
メッセージキューにあるメッセージのセキュリティを確保するにはどうすればよいですか?
認証メカニズムにより、Amazon SQS メッセージキューに保存されているメッセージが不正アクセスから保護されます。誰がメッセージをメッセージキューに送信できるか、またメッセージキューから誰がメッセージを受信できるかを制御できます。セキュリティを強化するため、メッセージキューに配置する前にメッセージを暗号化するアプリケーションを構築できます。
Amazon SQS には独自のリソースベースのアクセス権限システムがあり、AWS Identity and Access Management (IAM) のポリシーと同じ言語で記述されたポリシーが使用されます。たとえば、IAM ポリシーと同様に変数を使用できます。詳細については、「Amazon SQS デベロッパーガイド」の「Amazon SQS ポリシーの例」を参照してください。
Amazon SQS は、SSL プロトコルおよび Transport Layer Security (TLS) プロトコル経由の HTTP (HTTPS) に対応しています。ほとんどのクライアントでは、コードまたは設定を変更することなく、TLS の新しいバージョンに自動的にネゴシエートできます。Amazon SQS では、すべてのリージョンで Transport Layer Security (TLS) プロトコルのバージョン 1.0、1.1、1.2 に対応しています。
ReceiveMessage オペレーションと DeleteMessage オペレーションが別にあるのはなぜですか?
Amazon SQS がお客様にメッセージを返すと、実際にメッセージが受信されたかどうかにかかわらず、そのメッセージはメッセージキューに残ります。メッセージの削除はお客様の側で行ってください。削除リクエストで、お客様がメッセージの処理を終えたことを確認します。
メッセージを削除しないと、Amazon SQS は別の受信リクエストを受信したときに、そのメッセージを再配信します。詳細については、「Amazon SQS デベロッパーガイド」の「可視性タイムアウト」を参照してください。
削除したメッセージを再受信することはできますか?
いいえ。FIFO キューでは重複メッセージは発生しません。
標準キューの場合、ごくまれに以前に削除したメッセージを再受信することがあります。
以前削除したメッセージに対して DeleteMessage リクエストを発行するとどうなりますか?
以前に削除したメッセージに対して DeleteMessage リクエストを発行すると、Amazon SQS は成功という応答を返します。
サーバー側の暗号化 (SSE)
Amazon SQS に対する SSE の利点は何ですか?
サーバー側の暗号化を使うと、機密データを暗号化されたキューで送信できます。SSE を使用すると、AWS Key Management Service (AWS KMS) で管理されているキーを使用して、Amazon SQS キューのメッセージの内容が保護されます。SSE では、Amazon SQS でメッセージを受信した時点ですぐに暗号化します。メッセージは暗号化された形式で保存され、Amazon SQS は許可された消費者に送信された場合のみメッセージを復号化します。
詳細については、Amazon SQS デベロッパーガイドのサーバー側暗号化 (SSE) および AWS KMS を使用したデータの保護を参照してください。
SNS、CloudWatch Events、S3 イベントを、暗号化されたキューと共に使用できますか?
はい。そうするには、SSE を使用して AWS のサービス (Amazon CloudWatch Events、Amazon S3、Amazon SNS など) とキューの間の互換性を有効にする必要があります。詳細な手順については、「SQS デベロッパーガイドの互換性に関するセクション」を参照してください。
SSE のキューは、どのリージョンで利用できますか?
Amazon SQS のサーバー側の暗号化 (SSE) は、Amazon SQS が利用できる全 AWS リージョンで使用可能です。Amazon SQS が利用可能なリージョンについては、こちらをご覧ください。
新規または既存の Amazon SQS キューで SSE を有効にするには、どうすればよいですか?
Amazon SQS API を使用して新規または既存のキューで SSE を有効にするには、CreateQueue または SetQueueAttributes アクションの KmsMasterKeyId 属性を設定して、AWS 管理の CMK またはカスタム CMK のカスタマーマスターキー (CMK) ID (エイリアス、エイリアス ARN、キー ID、またはキー ARN) を指定します。
詳細な手順については、「Amazon SQS デベロッパーガイド」の「サーバー側の暗号化 (SSE) を使用して Amazon SQS キューを作成する」および「既存の Amazon SQS キューにサーバー側の暗号化 (SSE) を設定する」を参照してください。
どの Amazon SQS キュータイプで SSE を使用できますか?
標準キューと FIFO キューの両方で SSE をサポートしています。
Amazon SQS で SSE を使用するには、どのような権限が必要ですか?
SSE を使用するには、AWS KMS のキーポリシーを設定し、キューの暗号化とメッセージの暗号化/復号化を許可する必要があります。
キューで SSE を有効にするには、Amazon SQS またはカスタム CMK の AWS 管理のカスタマーマスターキー (CMK) を使用できます。詳細については、「AWS KMS デベロッパーガイド」の「カスタマーマスターキー」を参照してください。
暗号化されたキューにメッセージを送信する場合、生産者には CMK に対する kms:GenerateDataKey および kms:Decrypt 権限が必要です。
暗号化されたキューからメッセージを受信する場合、コンシューマーには、指定されたキューのメッセージを暗号化するのに使用される CMK に対して、kms:Decrypt 権限が必要です。キューがデッドレターキューとして使用される場合、コンシューマーには、ソースキューのメッセージを暗号化するのに使用される CMK に対しても kms:Decrypt アクセス許可が必要です。
詳細については、「Amazon SQS デベロッパーガイド」の「SSE を使用するのに必要な許可」を参照してください。
Amazon SQS で SSE を使用するには料金がかかりますか?
追加の Amazon SQS 料金はありません。ただし、Amazon SQS から AWS KMS への呼び出しには料金が発生します。詳細については、「AWS Key Management Service の料金」を参照してください。
AWS KMS の使用料金は、キューに設定されているデータキーの再利用期間によって異なります。詳細については、「Amazon SQS デベロッパーガイド」の「AWS KMS の使用料を見積もる方法」を参照してください。
Amazon SQS の SSE によって暗号化される対象と、その暗号化方法はどのようなものですか?
SSE は、Amazon SQS キュー内のメッセージ本文を暗号化します。
SSE は以下のコンポーネントを暗号化しません。
- キューのメタデータ (キュー名と属性)
- メッセージのメタデータ (メッセージ ID、タイムスタンプ、属性)
- キュー単位のメトリクス
Amazon SQS では、Amazon SQS またはカスタム CMK の AWS 管理のカスタマーマスターキー (CMK) を基にデータキーが生成され、設定可能な時間範囲 (1 分~24 時間) でメッセージのエンベロープ暗号化および複合化が行われます。
詳細については、「Amazon SQS デベロッパーガイド」の「Amazon SQS 用 SSE による暗号化の対象」を参照してください。
Amazon SQS の SSE では、メッセージの暗号化にどのようなアルゴリズムを使用していますか?
SSE では AES-GCM 256 アルゴリズムを使用しています。
SSE では、1 秒あたりのトランザクション (TPS) や、Amazon SQS で作成できるキューの数を制限していますか?
SSE では Amazon SQS のスループット (TPS) を制限していません。作成できる SSE キューの数は、以下によって制限されます。
- データキーの再利用期間 (1 分~24 時間)。
- AWS KMS アカウント単位のクォータ (デフォルトでは 100 TPS)。
- キューにアクセスする IAM ユーザーまたはアカウントの数。
- サイズの大きいバックログの存在 (バックログが大きくなると AWS KMS の呼び出しが増えます)。
たとえば、以下の設定を想定してみましょう。
- データキーの再利用期間を 5 分 (300 秒) に設定します。
- KMS アカウントのデフォルトの AWS KMS TPS クォータは 100 TPS です。
- バックログなしで Amazon SQS キューを使用しており、すべてのキューへの SendMessage または ReceiveMessage アクション用に 1 名の IAM ユーザーがいます。
この場合、SSE を使用した Amazon SQS キューの理論上の最大値は以下のように計算できます。
300 秒 × 100 TPS / 1 名の IAM ユーザー = 30,000 キュー
AWS KMS の使用料金をどのように見積もることができますか?
コストを予測し、AWS の請求額をより正確に把握するには、Amazon SQS で CMK が使用される頻度を調べることができます。
注: 以下の計算式を使用することで予想されるコストを大まかに把握することができますが、Amazon SQS の分散性により、実際のコストはもっと高くなる可能性があります。
キューごとの API リクエスト数 (R) を計算するには、以下の数式を使用します。
R = B / D * (2 * P + C)
B は請求期間 (秒) です
D は、データキー再利用期間 (秒) です
P は、Amazon SQS キューに送信する、プロデューサー側のプリンシパル数。
C は、Amazon SQS キューから受信する、コンシューマー側のプリンシパル数です。
重要: 一般的に、プロデューサー側プリンシパルで発生するコストはコンシューマー側プリンシパルの倍程度になります。詳細については、「Amazon SQS デベロッパーガイド」の「データキー再利用期間のしくみ」を参照してください。
プロデューサーとコンシューマーの IAM ユーザーが異なる場合は、コストが高くなります。
詳細については、「Amazon SQS デベロッパーガイド」の「AWS KMS の使用料を見積もる方法」を参照してください
コンプライアンス
Amazon SQS は PCI DSS 認定を受けていますか?
はい。Amazon SQS は PCI DSS レベル 1 の認定を受けています。詳細については、「PCI コンプライアンス」を参照してください。
Amazon SQS は HIPAA に対応していますか?
はい。AWS では HIPAA 準拠プログラムを拡張し、Amazon SQS を HIPAA 対応サービスとして追加しました。AWS と事業提携契約 (BAA) を締結している場合は、Amazon SQS を使用して独自の HIPAA 準拠アプリケーションの構築、通信中のデータの保存、および (保護医療情報 (PHI) が含まれるメッセージを含む) メッセージの送信を行うことができます。
すでに AWS と BAA を締結している場合は、今すぐ Amazon SQS の使用を開始することができます。BAA を締結していない場合、またはお使いの HIPAA 準拠アプリケーションへの AWS の使用に関してご質問がある場合は、詳細をお問い合わせください。
注: Amazon SQS 経由での PHI の転送を望まない場合 (または 256 KB より大きなメッセージがある場合) は、代わりに Java 用 Amazon SQS 拡張クライアントライブラリを使用して Amazon S3 経由で Amazon SQS メッセージペイロードを送信することもできます (Amazon S3 は HIPAA 対応サービスです (Amazon S3 Transfer Acceleration の使用を除く))。詳細については、「Amazon SQS デベロッパーガイド」の「Java 用 Amazon SQS 拡張クライアントライブラリの使用」を参照してください。
制限と規制
Amazon SQS メッセージキューにはどのくらいの期間メッセージを保持できますか?
メッセージの保持期間を延長すると柔軟性が向上し、メッセージの作成から消費までの間隔を延ばすことができます。
Amazon SQS メッセージを保持する期間を、1 分間~14 日間の範囲内で設定できます。デフォルトでは 4 日間になっています。メッセージの保持クォータが終了すると、お客様のメッセージは自動的に削除されます。
メッセージをより長い期間保持するには Amazon SQS をどのように設定すればよいですか?
メッセージ保持期間を設定するには、コンソールまたは Distributiveness メソッドを使用して MessageRetentionPeriod 属性を設定します。この属性を使用して、メッセージが Amazon SQS に保持される秒数を指定します。
MessageRetentionPeriod 属性を使用すると、メッセージの保持期間を 60 秒間 (1 分間)~1,209,600 秒間 (14 日間) の範囲内で設定できます。このメッセージ属性の使い方の詳細については、Amazon SQS API リファレンスを参照してください。
Amazon SQS の最大メッセージサイズを設定するにはどうすればよいですか?
最大メッセージサイズを設定するには、コンソールまたは SetQueueAttributes メソッドを使用して MaximumMessageSize 属性を設定します。 この属性で、Amazon SQS メッセージに含めることができるバイト数を指定します。1,024 バイト (1 KB)~262,144 バイト (256 KB) の範囲内の値を設定できます。詳細については、「Amazon SQS デベロッパーガイド」の「Amazon SQS メッセージ属性の使用」を参照してください。
256 KB を超えるメッセージを送信するには、Java 用 Amazon SQS 拡張クライアントライブラリを使用します。このライブラリにより、Amazon S3 のメッセージペイロードへの参照を含む Amazon SQS メッセージを送信できます。S3 のメッセージペイロードは最大 2 GB です。
メッセージにはどのような種類のデータを使用できますか?
Amazon SQS のメッセージとして送信できるのは、最大 256 KB のテキストデータ (XML、JSON、未フォーマットのテキストなど) です。以下の Unicode 文字を使用できます。
#x9 | #xA | #xD | [#x20~#xD7FF] | [#xE000~#xFFFD] | [#x10000~#x10FFFF]
詳細については、「XML 1.0 仕様」を参照してください。
Amazon SQS メッセージキューはどのくらいのサイズにすることができますか?
単一の Amazon SQS メッセージキューに含めるメッセージの数に制限はありません。ただし、転送中メッセージの数については標準キューで 120,000、FIFO キューで 120,000 のクォータが設定されています。メッセージは、消費コンポーネントによるキューから取得されたものの、キューからまだ削除されていない場合に転送中になります。
作成できるメッセージキューの数はいくつですか?
作成できるメッセージキューの数は無制限です。
Amazon SQS メッセージキューの名前にサイズ制限はありますか?
キュー名は 80 文字に制限されています。
Amazon SQS メッセージキューの名前に対する制約はありますか?
英数字、ハイフン (-)、および下線 (_) を使用できます。
メッセージキュー名は再利用できますか?
メッセージキューの名前は AWS のアカウントとリージョンに対して一意である必要があります。同じ名前のメッセージキューを削除した後に、メッセージキューの名前を再利用できます。
キューの共有
メッセージキューを共有するにはどうすればよいですか?
共有するメッセージキューとアクセスポリシーステートメントを関連付けます (また、付与する権限を指定します)。Amazon SQS では、アクセスポリシーステートメントを作成および管理するため、以下の API を利用できます。
- AddPermission
- RemovePermission
- SetQueueAttributes
- GetQueueAttributes
詳細については、「Amazon SQS API リファレンス」を参照してください。
共有されたキューアクセスの料金は誰が支払いますか?
共有されたキューアクセスについては、メッセージキュー所有者にお支払いいただきます。
メッセージキューを共有できる別の AWS ユーザーをどのように識別できますか?
Amazon SQS API では、AWS アカウント番号により AWS ユーザーを識別できます。
メッセージキューの共有先の AWS ユーザーに何を伝える必要がありますか?
他の AWS ユーザーとメッセージキューを共有するには、共有するメッセージキューの完全 URL を伝える必要がありますCreateQueue オペレーションや ListQueues オペレーションは、応答でこの URL を返します。
Amazon SQS は匿名アクセスに対応していますか?
はい。匿名ユーザーによるメッセージキューへのアクセスを許可するアクセスポリシーを設定できます。
Permissions API を使用するのはどのような場合ですか?
Permissions API は、デベロッパーがメッセージキューへのアクセスを共有するためのインターフェイスとなります。ただし、この API では、条件付きアクセスやより高度なユースケースを許可できません。
JSON オブジェクトと共に SetQueueAttributes オペレーションを使用するのはどのような場合ですか?
SetQueueAttributes オペレーションは、フルアクセスポリシー言語に対応しています。たとえば、このポリシー言語を使用すると、メッセージキューへのアクセスを IP アドレスや時間帯によって制限できます。詳細については、「Amazon SQS デベロッパーガイド」の「Amazon SQS ポリシーの例」を参照してください。
サービスアクセスおよびリージョン
Amazon SQS は、どのリージョンで利用できますか?
対象となるサービスリージョンについては、「AWS グローバルインフラストラクチャのリージョン表」を参照してください。
異なるリージョンのキュー間でメッセージを共有できますか?
いいえ。Amazon SQS メッセージキューはリージョンごとに独立しています。
リージョン間に料金の違いはありますか?
Amazon SQS は、中国 (北京) を除いたすべてのリージョンで同一料金です。詳細については、Amazon SQS 料金ページを参照してください。
さまざまなリージョン間での料金構成はどのようなものですか?
Amazon SQS と同じリージョンにある Amazon EC2 や AWS Lambda の間でデータを転送する場合は無料です。
Amazon SQS と別のリージョンにある Amazon EC2 や AWS Lambda の間でデータを転送する場合は、通常のデータ転送料金が課金されます。詳細については、Amazon SQS 料金ページを参照してください。
デッドレターキュー
デッドレターキューとは何ですか?
デッドレターキューは、ソースキューのコンシューマアプリケーションがメッセージを正常に使用できない場合にソースキューがメッセージを送信できるようにする Amazon SQS キューです。デッドレターキューを使用すれば、メッセージの使用時に失敗を処理し、未使用メッセージのライフサイクルを管理しやすくなります。デッドレターキューに配信されたメッセージのアラームを設定し、キューに配信された可能性のある例外ログを調べ、メッセージの内容を分析してコンシューマアプリケーションの問題を診断できます。コンシューマーアプリケーションが回復すると、メッセージをデッドレターキューからソースキューにリドライブできます。
デッドレターキューはどのように機能しますか?
ソースキューを作成するときに、Amazon SQS では、デッドレターキュー (DLQ) と、SQS がメッセージを DLQ に移動する条件を指定できます。条件は、消費者がキューからメッセージを受信できる回数であり、maxReceiveCount として定義されます。ソースキューと maxReceiveCount を使用したデッドレターキューのこの構成は、リドライブポリシーといいます。メッセージの ReceiveCount がキューの maxReceiveCount を超えると、Amazon SQS はメッセージを (元のメッセージ ID を使用) 配信不能キューに移動するように設計されています。たとえば、ソースキューに maxReceiveCount が 5 に設定されたリドライブポリシーがあり、ソースキューのコンシューマがメッセージを正常に使用せずに 6 回受信した場合、SQS はメッセージをデッドレターキューに移動します。
リドライブポリシーは、未使用メッセージをソースキューから配信不能キューに移動することにより、メッセージのライフサイクル前半を管理します。これで、以下に示すように、ソースキューへのデッドレターキューのリドライブは、これらのメッセージをソースキューに戻すことにより、サイクルを効率的に完了します。
デッドレターキューのソースキューへのリドライブはどのように機能しますか?
まず、メッセージ属性と関連するメタデータを表示することにより、配信不能キューで使用可能なメッセージのサンプルを調査できます。次に、メッセージを調査したら、それらをソースキューに戻すことができます。リドライブ速度を選択して、Amazon SQS がメッセージをデッドレターキューからソースキューに移動する速度を設定することもできます。
FIFO キューではデッドレターキューを使用できますか?
はい。ただし、FIFO キューでは FIFO デッドレターキューを使用する必要があります。(同様に、標準デッドレターキューは標準キューでのみ使用できます。)