🍣

その他AWSサービス

2023/11/18に公開

SQS(Simple Queue Service)

SQSは情報の発信元であるプロデューサーと、それを受け取るコンシューマーといったメッセージキューサービスです。

メッセージ:
プロデューサーからコンシューマーへのデータの受け渡しはメッセージを通じて行われます。

キュー:
メッセージが蓄積される場所で、これを利用してシステムの疎結合設計を実現できます。メッセージが蓄積される場所を指して溜め場と呼びます。

ポーリング:
コンシューマーがメッセージを受け取るために要求と受信を繰り返す方法で、受け取るタイミングは受け取り側が制御します。

https://ya6mablog.com/aws-sqs/

キューの種類

スタンダードキュー:
メッセージ配信回数は1回以上。
順序が変わる可能性があります。
アプリケーションの設計によってはメッセージが重複する可能性があります。

FIFOキュー:
1回のみメッセージが配信されます。
メッセージの順序が保証されますが、スループットに制限があります。

特徴 スタンダードキュー FIFOキュー
メッセージ配信回数 1回以上 1回のみ
メッセージ順序 順序が変わる可能性がある メッセージの順序が保証される
スループット制限 制限なし あり(FIFOキューごとに制限がある)
メッセージ重複 アプリケーションの設計により重複する可能性 重複しない
使用ケース 順序が重要でない場合や高いスループットが必要な場合 メッセージの順序が重要で、順序保証が必要な場合

その他の概念

デッドレターキュー (DLQ):
キューが失敗したときに、そのメッセージをDLQに移動させる仕組みです。失敗したメッセージを蓄積することで障害の早期発見が可能です。

遅延キュー、メッセージタイマー:
メッセージがキューに入ってから指定の期間が経過するまで、コンシューマーがそのメッセージを取得できないようにすることができます。

ポーリングの種類:

ショートポーリング:
コンシューマーの要求をすぐにメッセージに返します。

ロングポーリング:
要求があっても一定期間待機があり、メッセージが到着するまで待機します。

SNS(Simple Notification Service)

SNSは発信元であるパブリッシャー(例: EC2、EventBridge)から、受信者であるサブスクライバー(例: Kinesis、Lambda、Mobile Client)に向けてメッセージを効率的に送信するサービスです。

SNSトピック:
SNSメッセージングモデルの中心であり、パブリッシャーがメッセージをトピックに発行し、サブスクライバーがそのトピックからメッセージを受け取ります。このモデルでは、送信者と受信者はお互いに知識を持たず、非常に疎結合です。

Pub/Subメッセージングモデル:
パブリッシャーとサブスクライバーが直接通信するのではなく、中間にトピックを介してメッセージが伝播します。これにより、システムの部品が互いに依存しないような設計が可能となります。

https://aws.amazon.com/jp/what-is/pub-sub-messaging/

例: CloudWatchアラームの通知:

  • CloudWatchアラームが発生した場合、SNSがそのアラームに応じたトピックにメッセージを発行します。
  • このメッセージは、メール通知やSlack通知などのサブスクライバーにプッシュベースで配信されます。
  • パブリッシャーとサブスクライバーは、アプリケーションやサービスの範囲を超えて疎結合で連携できます。

EventBridge

EventBridgeはサーバーレスのイベントバス型サービスであり、様々なイベントソースからの情報をもとに、状態変化に応じてAWSサービスなどの実行を行うことができるサービスです。

イベントとは?

イベントはJSON形式で表現され、例えばEC2の状態変化などがその中に記載されています。これにより、例えばEC2の起動や停止などのイベントをリアルタイムに検知できます。

https://dev.classmethod.jp/articles/cross-account-delivery-of-eventbridge-event-buts/

イベントバスの種類

AWSサービスのイベント:
AWSの各サービスが発行するイベントを捉え、それに対するターゲットの実行が可能です。

カスタムアプリケーションのイベント:
独自のアプリケーションが発行するイベントをEventBridgeで取り扱えます。

SaaSアプリケーションのイベント:
サードパーティのSaaSアプリケーションが発行するイベントもEventBridgeで統合できます。

アーカイブと再生

EventBridgeは発行されたイベントをアーカイブして保存することができ、過去のイベントを確認したり、特定のルールに基づいて再処理することが可能です。

定期実行

EventBridgeではcron式やrate式を使用して、定期的にイベントを発火させることができます。これにより、定期実行が必要なバッチ処理やリマインダーなどを簡単に実現できます。

Amazon Redshift

Amazon Redshiftはデータウェアハウスサービスであり、主にOLAP(Online Analytical Processing)の用途に特化しています。

OLTP と OLAP

OLTP(Online Transaction Processing):
主要なビジネスや業務のトランザクション処理を担当します。
例えば、RDSやDynamoDBなどがOLTPに該当し、短く単純なクエリを発行します。

OLAP(Online Analytical Processing):
Amazon RedshiftやEMRなどがOLAPに該当します。
ビジネスの意思決定など分析用途に利用され、データソースはOLTPから取得します。通常、長大で複雑なクエリを実行します。

https://aws.amazon.com/jp/compare/the-difference-between-olap-and-oltp/


Amazon Redshiftでは、RDSからデータをコピーし、そこで分析用のSQLクエリを発行する形式が一般的です。これにより、Quicksightなどの可視化ツールを用いてデータを分析しやすくなります。

Redshift Spectrum

Redshift Spectrumは、S3に直接SQLクエリを実行できる機能です。S3バケット内のデータに対して直接クエリを発行し、大規模で複雑なクエリに対応します。ただし、単純なクエリの場合はAmazon Athenaなどが適しています。

構成要素

リーダーノード:
クライアントからのクエリを受け付け、クエリの最適な実行計画を生成します。

コンピュートノード:
クエリを実際に実行するコンピューティングの部分です。
実際にはEC2で稼働しています。

Amazon Kinesis

Amazon Kinesisは継続的に発生するデータを収集、処理、分析するためのサービスです。主なコンポーネントとしては、Kinesis Data Stream、Kinesis Data Firehose、Kinesis Data Analytics、および Kinesis Video Streams があります。

Kinesis Data Stream

Kinesis Data Streamはデータをリアルタイムで取り込み、24時間から7日間までの間にわたってデータを保存できるサービスです。

プロデューサーとコンシューマー:
データを送信する側をプロデューサー、受信する側をコンシューマーと呼びます。

https://docs.aws.amazon.com/ja_jp/streams/latest/dev/key-concepts.html

Kinesis Data Streamの構成:

  • データはKinesis Data Streamエンドポイントに向かって送信されます。
  • データはシャードと呼ばれる領域に一時的に保存され、負荷に応じてシャードを増減できます。
    ^ シャードの集まりをデータストリームと呼びます。

KPL(Kinesis Producer Library)と KCL(Kinesis Client Library):

  • プロデューサー側でKPLを利用してデータの送信を行います。
  • コンシューマー側ではKCLを使用してデータを取得し、処理します。

Kinesis Data Firehose

Kinesis Data Firehoseは、データをS3、RedShiftなどの分析ツールに格納するためのサービスです。

データ配信:
エージェントがインストールされた場所からKinesis Data Firehoseエンドポイントへデータが送信されます。
データはKinesis内のデリバリーストリームを通り、ほぼリアルタイムで配信され、60秒以内には目的地に到達します。

Kinesis Data Analytics

Kinesis Data Analyticsは、SQLクエリを使用してリアルタイムでデータを分析するためのサービスです。

Kinesis Video Streams

Kinesis Video Streamsは、ストリーミング動画を処理、分析するためのサービスです。

Amazon API Gateway

Amazon API GatewayはAPIを作成し、管理するためのサービスであり、異なるバックエンドサービス(例: Lambda、ALB、Kinesis)との連携を容易にします。

設計例
API Gatewayを使用してAWSで構築されたREST API通信を行う際、API Gatewayを利用してバックエンドのLambdaやALB、Kinesisなどと連携が可能です。

https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/modernization-integrating-microservices/api-gateway-pattern.html

デプロイタイプ

エッジ最適化APIエンドポイント:
CloudFrontを通じて通信を受けます。
レイテンシーが低くなります。

リージョンAPIエンドポイント:
クライアントから直接API Gatewayを叩きます。

プライベートAPIエンドポイント:
Direct ConnectやVPC内から、またはセキュアな接続が必要な場合に使用します。

リクエストとレスポンス

Method リクエスト:
クライアントのリクエストを受け取り、APIキーの有無を確認できます。

Integration リクエスト:
バックエンドとの接続情報を指定し、データの受け渡し方法などを定義します。

Integration レスポンス:
バックエンドからのレスポンスを受け取り、どのように処理するかを指定します。

Method レスポンス:
最終的にクライアントに返す値やHTTPステータスコードを定義します。

プロキシ統合

プロキシ統合を有効にすると、統合リクエストと統合レスポンスの設定が不要になり、シンプルにAPI Gatewayをバックエンドとして利用できます。

キャッシュ

API Gatewayはエンドポイントからの通信を一時的にキャッシュできます。このキャッシュはAPI Cacheに保持され、ステージを分けて運用することができます。

使用量プランとAPIキー

使用量プラン:
プレミアムプランやスタンダードプランなどがあり、利用シナリオに応じて選択できます。
プレミアムプランでは高品質なサービスを提供するために、レート制限を調整し、スロットリングを設定できます。

APIキー:
利用者を判別するためにAPIキーが使用されます。
レート制限、クォータ、APIステージなどを設定して制限をかけることができます。

スロットリング

リクエスト制限があり、上限を超えると429番エラーになってしまう
それぞれのステージに上限を設定できる

バックアップ戦略

パイロットライト

パイロットライト戦略では、別の環境をバックアップ環境として構築しておきます。障害が発生した際には、スタンバイ環境に手動で切り替えたり、Auroraをプライマリに昇格させたり、EC2を起動させたりすることが求められます。障害が発生してから手動で対応するため、比較的少ないコストで済みます。

https://aws.amazon.com/jp/blogs/news/disaster-recovery-dr-architecture-on-aws-part-iii-pilot-light-and-warm-standby/

ウォームスタンバイ

ウォームスタンバイ戦略では、別の環境に最低限必要なリソースを構築しておきます。環境の切り替えが迅速に行え、すぐにアプリを利用できるようになります。障害が発生した場合、スタンバイ環境に環境を切り替え、データの同期など最低限の作業を行います。リソースが既に存在するため、トラフィックに応じてスケールアウトなども容易です。

https://aws.amazon.com/jp/blogs/news/disaster-recovery-dr-architecture-on-aws-part-iii-pilot-light-and-warm-standby/

アクティブアクティブ

アクティブアクティブ戦略では、複数のアクティブ環境を同時に稼働させます。コストは単純に2倍かかりますが、常に同じ数の台数で稼働しています。障害が発生した場合は、障害に備えた環境にDNSのトラフィックを切り替えるだけで対応できます。障害発生時のダウンタイムが最小限に抑えられますが、コストは高くなります。

https://aws.amazon.com/jp/blogs/news/disaster-recovery-dr-architecture-on-aws-part-iv-multi-site-active-active/

Discussion