STAY KOBE

[SolutionArchitect Pro] AWS Simple Queue Service – SQS –

Jayendra’s Blog

この記事は自己学習用に「AWS Simple Queue Service – SQS – Certification(Jayendra’s Blogより)」を日本語に訳した記事です。


Simple Queue Service – SQS

SQS FIFO キューの機能とキーポイント

SQS 標準キュー機能とキーポイント

SQS ユースケース

SQS キューのしくみ

キューとメッセージの識別子

キューの URL

メッセージ ID

受信ハンドル

可視性タイムアウト

メッセージライフサイクル

  1. コンポーネント1はメッセージ A をキューに送信し、メッセージは SQS サーバー間で冗長に分散されます。
  2. コンポーネント2がメッセージを処理する準備ができたら、キューからメッセージを取得し、メッセージ A が返されます。メッセージ A が処理されている間はキューに残りますが、可視性タイムアウトの継続時間に対する後続の受信要求には返されません。
  3. コンポーネント2では、メッセージ A をキューから削除して、表示タイムアウトの有効期限が切れると、受信および処理が行われないようにします。

SQS デザインパターン

優先キューパターン

  1. SQS を使用して、個々の優先度レベルに対して複数のキューを準備します。
  2. 優先度の高いキューで、直ちに実行するプロセス (ジョブ要求) を配置します。
  3. 優先度レベルに応じて、キューのジョブ要求を処理するためのバッチサーバーの数を準備します。
  4. キューは、プロセスを開始するための時間を遅らせるために使用することができるメッセージ “遅延送信” 機能を持っています。

SQS ジョブオブザーバパターン

  1. ジョブ要求を SQS メッセージとしてエンキューする。
  2. バッチサーバーは、SQS からメッセージをキューに取り出して処理します。
  3. 自動スケーリングを設定すると、CloudWatch を使用して、そのためのトリガとして、SQS メッセージの数を使って、バッチサーバーの数を自動的に増減します。

AWS認定試験の練習問題

  1. フライト中のトランザクションを永続化するためのアーキテクチャの設計に役立つ AWS サービスはどれですか。
    1. Elastic IP Address
    2. SQS
    3. Amazon CloudWatch
    4. Amazon ElastiCache
  2. 会社には、ビデオファイルをオンプレミスシステムから AWS に送信してトランスコードするワークフローがあります。これらは、SQS からトランスコードジョブを Pull する EC2 ワーカーインスタンスを使用します。SQS がこのシナリオに適したサービスであるのはなぜですか。
    1. SQS はメッセージの順序を保証します。
    2. SQS は、トランスコード出力を同期的に提供します。
    3. SQS は、ワーカーインスタンスの正常性をチェックします。
    4. SQS は、エンコードタスクの水平スケーリングを容易にします。
  3. Amazon SQS ユース・ケースについて最もよく説明するステートメントはどれですか。
    1. 運用サーバー (Amazon EC2 インスタンス) で CPU 使用率が 70% に達したときに管理者に電子メール通知を送信するプロセスを自動化する (CloudWatch + SNS + SES)
    2. 複数のコンポーネントが互いに通信する必要があるが、同じ量の作業を同時に処理できないビデオトランスコーディング web サイトを作成する (SQS は疎結合を提供します)
    3. 分散 web サービス間で作業を調整し、従業員の経費精算書 (SWF –手順を順番に処理し、手動の手順が必要になる場合があります)
    4. 複数の国で遅延の少ないエンドユーザーに静的 web コンテンツを配布する (CloudFront + S3)
  4. アプリケーションは、データ変換サービスを提供します。変換されるデータを含むファイルは、まず Amazon S3 にアップロードされ、その後、スポット EC2 インスタンスのフリートによって変換が行われます。プレミアム顧客が提出したファイルは、最優先で変換する必要があります。どのようにこのようなシステムを実装する必要がありますか?
    1. 優先度レベルを定義する属性を持つ DynamoDB テーブルを使用します。変換インスタンスは、タスクのテーブルをスキャンし、結果を優先順位レベルで並べ替えます。
    2. Route53遅延ベースのルーティングを使用して、最も近い変換インスタンスに優先度の高いタスクを送信します。
    3. 優先度の高いメッセージには、2つの SQS キューを使用し、もう1つは既定の優先度にします。変換インスタンスは、最初に優先度の高いキューをポーリングします。メッセージがない場合は、既定の優先度キューをポーリングします。
    4. 単一の SQS キューを使用します。各メッセージには、優先度レベルが含まれます。変換インスタンスは優先度の高いメッセージを最初にポーリングします。
  5. あなたの会社はアマゾンのウェブサービス (AWS) の大きい寄付のウェブサイトを催すことを計画する。多くのデータベース書き込みを作成するトラフィックの大規模で不確定な量を予測します。AWS でホストされているデータベースへの書き込みを削除しないことを確認します。どのサービスを使用する必要がありますか。
    1. 予想されるピーク書き込みスループットまでのプロビジョニングされた IOPS を持つ Amazon RDS。
    2. Amazon シンプルキューサービス (SQS) は、書き込みをキャプチャし、キューをデータベースに書き込むためのドレイン
    3. Amazon ElastiCache は、書き込みがデータベースにコミットされるまで書き込みを保存します。
    4. Amazon DynamoDB は、予想されるピーク書き込みスループットまで、プロビジョニングされた書き込みスループットを備えています。
  6. お客様には、Amazon エラスティックコンピュータクラウド (EC2) 上でホストされている web アプリケーションがある aws リージョンへ 10 GB の aws ダイレクトコネクション接続があります。アプリケーションは、acid (原子性、一貫性、分離、耐久性) の一貫性モデルではなく、ベース (基本使用可能、ソフト状態、最終的な一貫性) を使用するオンプレミスのメインフレームデータベースに依存しています。データベースが書き込みのボリュームを処理できないため、アプリケーションで望ましくない動作が発生しています。どのようにして、最も費用対効果の高い方法で、オンプレミスのデータベースリソースの負荷を軽減できますか。
    1. AWS の オンプレミスデータベースと Hadoop クラスター間の同期メカニズムとして、Amazon エラスティックマップの削減 (EMR) S3DistCp を使用します。
    2. Amazon SQS キューに書き込むようにアプリケーションを変更し、ワーカープロセスを開発して、キューをオンプレミスデータベースにフラッシュします。
    3. DynamoDB を使用して、マップ関数を使用してオンプレミスデータベースに書き込む EMR クラスターをフィードするようにアプリケーションを変更します。
    4. AWS で RDS のリードレプリカデータベースをプロビジョニングし、データパイプラインを使用して2つのデータベースの書き込みを処理して同期します。
  7. 組織は、SQS を使用して “modularqueue” という名前のキューを作成しました。組織は、キュー上の SendMessage、ReceiveMessage、DeleteMessage、GetQueueAttributes、SetQueueAttributes、AddPermission、および RemovePermission などの操作を実行していません。このシナリオでは何が起こるでしょうか。
    1. AWS SQS は、キューでの非アクティブの15日後に通知を送信します
    2. AWS SQS は、通知なしで30日後にキューを削除することができます
    3. AWS SQS は30日後にキューの非アクティブをマークします
    4. AWS SQS は、2週間後にユーザーに通知し、3週間後にキューを削除します。
  8. ユーザーが AWS SQS を使用してサービスを切り離す。以下のオペレーションのうち、SQS でサポートされていない操作はどれですか。
    1. SendMessageBatch
    2. DeleteMessageBatch
    3. createqueue
    4. DeleteMessageQueue
  9. ユーザーが SQS を使用して “awsmodule” という名前のキューを作成しました。キューのコンシューマの1つが3日間ダウンし、利用可能になります。そのコンポーネントはキューからメッセージを受信しますか?
    1. はい、デフォルトでは SQS は4日間のメッセージを格納するためです。
    2. いいえ、デフォルトでは SQS は1日のみメッセージを保存します。
    3. いいえ、SQS はその時点で利用可能なコンシューマにメッセージを送信するため、
    4. はい、SQS はすべてのコンシューマに配信されるまでメッセージを削除しません。
  10. ユーザーが AWS SQS を使用して、米国東部リージョンに “queue2” という名前のキューを作成しました。ユーザーの AWS アカウント ID は123456789012です。ユーザーがこのキューで何らかのアクションを実行する場合は、以下のキュー URL を使用する必要があります。
    1. http://sqs.us-east-1.amazonaws.com/123456789012/queue2
    2. http://sqs.amazonaws.com/123456789012/queue2
    3. http://sqs,123456789012.us-east-1.amazonaws.com/queue2
    4. http://123456789012.sqs.us-east-1.amazonaws.com/queue2
  11. ユーザーが SQS を使用して “myqueue” という名前のキューを作成しました。キューにパブリッシュされた4つのメッセージは、コンシューマによってまだ受信されていません。ユーザーがキューを削除しようとすると、どうなるでしょうか。
    1. ユーザーは、キューを手動で削除することはできません。AWS は、キューの非アクティブの30日後にそれを削除します
    2. これは、キューを削除します
    3. 削除を開始しますが、すべてのメッセージが自動的に削除されるまで、4日間削除します。
    4. これは、ユーザーにメッセージを最初に削除するように頼みます
  12. ユーザーは、NoSQL データベースにデータを送信するために必要なアプリケーションを開発しました。ユーザーは、アプリケーションがデータの処理と送信を保持するが、DB の受信確認を待たずに送信するデータを切り離す必要があります。このシナリオでは、以下に挙げるアプリケーションのうちどれが役立ちますか。
    1. AWS Simple Notification Service
    2. AWS Simple Workflow
    3. AWS Simple Queue Service
    4. AWS Simple Query Service
  13. SQS を使用して顧客の注文を処理するオンラインストアを AWS に構築しています。バックエンドシステムは、顧客の注文が置かれているのと同じ順序でこれらのメッセージを必要とします。どのように達成することができますか?
    1. SQS ではこれを行うことはできません。
    2. 各メッセージのシーケンス情報を使用できます。
    3. あなたは、SQS でこれを行うことができますが、また、SWF を使用する必要があります
    4. メッセージは既定で同じ順序で到着します
  14. ユーザーが写真編集ソフトウェアを作成し、EC2 でホストしました。ソフトウェアは、写真のフォーマットと解像度についてのユーザーからの要求を受け入れ、それに応じて画像を強化するために S3 にメッセージを送信します。以下の aws サービスは、このシナリオで aws インフラストラクチャを使用してスケーラブルなソフトウェアを作成するのに役立ちます。
    1. AWS Glacier
    2. AWS Elastic Transcoder
    3. AWS Simple Notification Service
    4. AWS Simple Queue Service
  15. バッチプロセッサとして使用される EC2 インスタンス間でメッセージキューを設定するには、単純なキューサービス (SQS) を使用したバッチ処理ソリューションのアーキテクチャ図を参照してください。クラウドウォッチは、ジョブ要求の数 (キューに置かれたメッセージ) を監視し、自動スケーリンググループは、クラウドウォッチアラームに設定されたパラメータに基づいて、バッチサーバーを自動的に追加または削除します。このアーキテクチャを使用して、コスト効果の高い効率的な方法で次の機能を実装できますか。
    1. メッセージを受信するビジー EC2 インスタンスがデイジーチェーンセットアップの次のインスタンスに渡されるようにすることにより、並列処理によるジョブ実行の全体的な時間を短縮できます。
    2. ec2 インスタンスの障害に対するフォールトトレランスの実装メッセージが sqs に残るため、ec2 インスタンスのリカバリを続行すると、メッセージを S3 にバックアップすることにより、sqs 障害に対するフォールトトレランスを実装できます。
    3. メッセージを SOS 経由で交換することによって、バッチ内の EC2 インスタンス間でのメッセージ受け渡しを実装します。
    4. ジョブ要求数を持つ EC2 インスタンスの数を自動的に調整するため、コスト効果が向上します。
    5. プライオリティ・メタデータ・フィールドを SQS メッセージに割り当てることにより、優先度の低いジョブの前に優先度の高いジョブを処理します。
  16. Amazon SQS では、複数の読者がメッセージを失うことなく同じメッセージキューにアクセスしたり、何度も処理したりできますか。
    1. ユーザーを一意の id で識別します。
    2. 独自の暗号化を使用します。
    3. Amazon SQS キューには、設定可能な可視性タイムアウトがあります。
    4. 複数のリーダーが同じメッセージキューにアクセスすることはできません。
  17. ユーザーは、写真編集ソフトウェアを作成し、EC2 上でホストしています。ソフトウェアは、写真のフォーマットと解像度についてのユーザーからの要求を受け入れ、それに応じて画像を強化するために S3 にメッセージを送信します。以下の aws サービスは、このシナリオで aws インフラストラクチャを使用してスケーラブルなソフトウェアを作成するのに役立ちます。
    1. AWS Elastic Transcoder
    2. AWS Simple Notification Service
    3. AWS Simple Queue Service
    4. AWS Glacier
  18. 長いメッセージ保持をサポートするために SQS をどのように構成しますか。
    1. SetQueueAttributes メソッドを使用して MessageRetentionPeriod 属性を設定します。
    2. ラムダ関数を使用します。
    3. できませんよ。14日に設定されており、変更することはできません。
    4. AWS からリクエストする必要があります。
  19. ユーザーは、NoSQL データベースにデータを送信するために必要なアプリケーションを開発しました。ユーザーは、アプリケーションがデータの処理と送信を保持するが、DB の受信確認を待たずに送信するデータを切り離す必要があります。このシナリオでは、以下に挙げるアプリケーションのうちどれが役立ちますか。
    1. AWS Simple Notification Service
    2. AWS Simple Workflow
    3. AWS Simple Query Service
    4. AWS Simple Queue Service
  20. Amazon SQS のキューからメッセージが取得された場合、既定では、他のユーザーがメッセージにアクセスできない時間はどのくらいですか。
    1. 0秒
    2. 1時間
    3. 1日
    4. 絶えず
    5. 30秒
  21. SQS に関する次のステートメントのうち、どれが当てはまりますか。
    1. メッセージは1回だけ配信され、メッセージは最初の順序で配信されます。
    2. メッセージは1回だけ配信され、メッセージ配信順序は不定です
    3. メッセージは1回以上配信され、メッセージは最初の順序で配信されます。
    4. メッセージが1回以上配信され、メッセージ配信順序が不定 (FIFO キューの導入前)
  22. amazon sqs キューの amazon sqs メッセージをどのくらいの期間保持できますか。
    1. 120秒から4週間まで
    2. 10秒から7日まで
    3. 60秒から2週間まで
    4. 30秒から1週間まで
  23. SQS メッセージが完了するのに5分かかるタスクをトリガーすると、次のプロセスは、メッセージの処理に成功し、重複処理の可能性を最小限に抑えながらキューから削除しますか。
    1. 可視性のタイムアウトが増加したメッセージを取得し、メッセージを処理し、キューからメッセージを削除します。
    2. 可視性のタイムアウトが増加したメッセージを取得し、キューからメッセージを削除し、メッセージを処理します。
    3. 増加した DelaySeconds でメッセージを取得し、メッセージを処理し、キューからメッセージを削除します。
    4. 増加した DelaySeconds でメッセージを取得し、キューからメッセージを削除し、メッセージを処理します。
  24. 長時間実行されるジョブは1回だけ処理する必要があります。どのようにこれを行うかもしれない?
    1. SNS キューを使用して、ジョブを処理するのに十分な長さの可視性タイムアウトを設定します。
    2. SQS キューを使用して、ジョブの処理に十分な時間を再処理タイムアウトを設定します。
    3. SQS キューを使用して、ジョブを処理するのに十分な長さの可視性タイムアウトを設定します。
    4. SNS キューを使用して、ジョブの処理に十分な時間を再処理タイムアウトを設定します。
  25. Amazon SQS を使用している場合は、空の受信要求が大量に取得されます。これは、あなたのインスタンスに不必要なネットワーク負荷をたくさん作っています。この負荷を軽減するには何ができますか?
    1. 代わりに、SNS トピックにキューをサブスクライブします。
    2. 短いポーリングの代わりに、可能な限りポーリングを長時間使用してください。(リンク参照)
    3. 表示のタイムアウトを短くするように変更します。
    4. EC2 インスタンスで sqsd を使用します。
  26. 自動スケーリンググループと SQS キューを使用して、非同期処理アプリケーションがあります。自動スケーリンググループは、ジョブキューの深さに従ってスケールされます。ジョブの完了速度が下がったため、自動スケーリンググループのサイズが限界に達しましたが、受信ジョブの速度は増加しませんでした。考えられる問題とは何ですか?
    1. 入ってくる新しいジョブの中には、不正な形式で処理できないものがあります。(他のオプションはジョブの処理を完全に停止させるので、唯一の合理的なオプションは、最近のメッセージの一部が不正な形式で処理不能でなければならないようです。)
    2. ルーティングテーブルが変更され、作業者はイベントをもう処理できません。(変更された場合、どのジョブも処理されません)
    3. 誰かが、ワーカーグループ内のインスタンスの IAM ロールポリシーを変更し、キューにアクセスするためのアクセス許可を破った。(IAM ロールが変更された場合、ジョブは処理されません)
    4. スケーリングメトリックが正しく機能していません。(スケーリングメトリックは、インスタンスが増加する原因となったため、正常に機能しました)
  27. B 社はオンライン画像認識サービスを提供し、SQS を利用してシステムコンポーネントをスケーラビリティに分離します。SQS コンシューマは、できるだけ頻繁にイメージングキューをポーリングして、エンドツーエンドのスループットを可能な限り高く保ちます。しかし、B 社は、タイトなループでのポーリングは、CPU サイクルを燃やし、空の応答でコストを増やすことを実現しています。どのように B 社は空の応答の数を減らすことができますか?
    1. イメージキューの可視性Timeout属性を20秒に設定します。
    2. イメージキューReceiveMessageWaitTimeSeconds属性を20秒に設定します。 (ロングポーリング、リンク参照
    3. イメージキューMessageRetentionPeriod属性を20秒に設定します。
    4. メッセージのDelaySecondsパラメータを20秒に設定します。

リファレンス