AWSによるAmazon Marketing Streamのコスト最適化
Amazon Marketing Streamの実装を成功させるには、AWS SQSやAWS LambdaなどのAWSインフラストラクチャについて詳しく理解する必要があります。このドキュメントでは、Amazon Marketing Streamをスケーリングする際にAWSのコスト最適化に向けた推奨事項とベストプラクティスを複数ご紹介します。
注
AWSでは、ビジネスニーズに基づきカスタム設定が行えるよう、多数のオプションをご用意しています。このガイドには一般的な推奨事項を記載していますが、Stream統合を設計して実装する際には、AWSに詳しい担当者とご相談のうえ、作業されることをおすすめします。
AWS SQS
SQSの価格について
AWS Simple Queue Service(SQS)は、Amazon Marketing Streamに使用する必要がある主要なAWSツールです。SQSのコストを最適化するには、SQSの価格体系を理解することが重要です。
Streamオンボーディングプロセスの一環として、ユーザーはキューを設定し、そのキューをStreamデータセットに登録します。そうすると、Streamが、キャンペーンデータとイベントを含むレコードをそのSQSキューに送信します。
キューに対してアクションを実行するたびに料金がかかります。SQS API操作のリファレンスに記載されているアクションはすべて有料です。たとえば、メッセージがキューに入れられたら、メッセージを受け取るために(SQSコンソールを使用するか、プログラムでSQS APIのReceiveMessageリクエストを使用して)SQSにリクエストを送信する必要があります。
AWS SQS無料利用枠の中で、毎月100万件の無料リクエストを行うことができます。追加の100万件のリクエストごとに、地域に応じた料金が発生します(最新の価格については、SQS料金計算ツールをご覧ください)。
別々の地域のSQSとEC2またはLambdaの間で転送されるデータにも料金がかかります。詳細については、料金計算ツールをご覧ください。
ベストプラクティス
SQSのコストを最適化するには、AWSで推奨されているように、ロングポーリングとバッチ化を実装することをおすすめします。
ロングポーリング
空のメッセージに対する請求の可能性を低減するため、SQSキューでロングポーリングを設定することをおすすめします。
SQSには、キューからメッセージを受け取るための2つのオプション(ショートポーリングとロングポーリング)が用意されています。デフォルトでは、ショートポーリングが使用されます。つまり、キューにメッセージが見つからない場合でも、ReceiveMessage
リクエストはただちに応答を返します。ロングポーリングでは、ポーリング中にメッセージが見つかったか、ポーリング待機時間が経過した場合にのみメッセージを受け取ります。たとえば、ReceiveMessage
リクエストを送信したのに、キューにStreamメッセージが存在しない場合は、空の応答が返されます。SQSでは、空の応答でも有料のアクションとしてカウントされます。NumberOfEmptyReceivesCloudWatch指標を確認することで、パフォーマンスを検証できます。
詳細情報:
ReceiveMessage
リクエストのバッチ化
SQSの価格は、リクエストの送信数によって決まります。リクエスト数を減らすと、コストを抑えることができます。リクエストをバッチ化するのが、リクエストの実行回数を減らす1つの方法です。
次のような例を考えてみましょう。 Amazon Adsから5件の新規メッセージがキューに送信されたとします。個々にReceiveMessage
リクエストを5回、SQSに送信してメッセージを取得したとすると、5回分が請求されます。しかし、どれも比較的小さいメッセージであるとします。この例では、それぞれが10KBで合計が50KBだとしましょう。AWSではメッセージをバッチ化することができ、バッチが65KBを超えない限り、料金は1回分のみとなります。この例では、5件のメッセージをすべてまとめてバッチ化しても合計ペイロードサイズは50KBであるため、請求されるメッセージの総数を5件から1件に減らすことができます。
AWSでは、最大10件のメッセージをまとめてバッチ化できます。Streamから送信されるメッセージは常に6KB未満であるため、バッチ化に最大許容値の10を設定することで、確実に64KBのペイロードしきい値を超えないようにすることができます。
詳細情報:
ヒント
AWS Lambdaでキューからメッセージを取り込む場合は、デフォルトでロングポーリングとバッチ化を行うイベントソースマッピングを実装する必要があります。 Lambdaで使用するキューの設定について詳しくは、こちらをご覧ください。
地域間のデータ転送を回避する
データを転送する必要がある場合は、同じ地域内でのみデータを送信することをおすすめします。別の地域にデータを転送すると、コストが上がります。
AWS Lambda
AWS Lambdaを使用して、SQSで受け取ったメッセージに対して繰り返しプロセスを実行することもできます。
AWS Lambdaを使用する場合は、Lambdaのコスト管理に関するAWSの以下のブログ投稿をご覧ください。