リアルタイムログを使用する
CloudFront リアルタイムログを使用すると、ディストリビューションに対するリクエストの情報をリアルタイムで取得できます (ログはリクエストを受信してから数秒以内に配信されます)。リアルタイムログを使用して、コンテンツ配信のパフォーマンスに基づいて監視、分析、アクションを実行できます。
CloudFront リアルタイムログは設定可能です。以下を選択することができます。
-
リアルタイムログのサンプリング率 (リアルタイムのログ記録を受信するリクエストの割合) を選択できます。
-
ログレコードで受信する特定のフィールド。
-
リアルタイムログを受信する特定のキャッシュ動作 (パスパターン)。
CloudFront リアルタイムログは、Amazon Kinesis Data Streams で選択したデータストリームに配信されます。独自の Kinesis データストリームコンシューマーを構築することも、Amazon Data Firehose を使用してログデータを Amazon Simple Storage Service (Amazon S3)、Amazon Redshift、Amazon OpenSearch Service (OpenSearch Service)、またはサードパーティーのログ処理サービスに送信することもできます。
Kinesis Data Streams の使用料金に加えて、CloudFront でのリアルタイムログの料金が発生します。料金の詳細については、「Amazon CloudFront の料金
重要
ログは、すべてのリクエストを完全に課金するためのものではなく、コンテンツに対するリクエストの本質を把握するものとして使用することをお勧めします。CloudFront はベストエフォートベースでリアルタイムのアクセスログを提供します。特定のリクエストのログエントリが、リクエストが実際に処理されてからかなり後に配信されることも、(まれに) 一切配信されないこともあります。ログエントリをリアルタイムログから省略すると、リアルタイムログ内のエントリ数は AWS の請求と使用状況レポートに表示される使用量と一致しなくなります。
リアルタイムログ設定を作成および使用する
ディストリビューションに対して行われたリクエストに関する情報をリアルタイムで取得するには、リアルタイムログ設定を使用できます。ログは、リクエストを受信してから数秒以内に提供されます。リアルタイムログ設定は、CloudFront コンソール、AWS Command Line Interface (AWS CLI)、または CloudFront API を使用して作成できます。
リアルタイムログ設定を使用するには、CloudFront ディストリビューションの 1 つ以上のキャッシュ動作にアタッチします。
リアルタイムログ設定を理解する
CloudFront リアルタイムログを使用するには、まずリアルタイムログ設定を作成します。リアルタイムログ設定には、受信するログフィールド、ログレコードの サンプリングレート、およびログを配信する Kinesis データストリームに関する情報が含まれます。
具体的には、リアルタイムログ設定には、次の設定が含まれます。
名前
リアルタイムログ設定を識別する名前。
サンプリングレート
サンプリングレートは、リアルタイムログレコードとして Kinesis Data Streams に送信されるビューワーリクエストの割合を決定する 1 ~ 100 の整数です。すべてのビューワーリクエストをリアルタイムログに含めるには、サンプリングレートに 100 を指定します。リクエストデータの代表的なサンプルをリアルタイムログに受信しながら、コストを削減するために、より低いサンプリングレートを選択することもできます。
フィールド
各リアルタイムログレコードに含まれるフィールドのリスト。各ログレコードには、最大 40 個のフィールドを含めることができます。使用可能なすべてのフィールドを受信するか、パフォーマンスのモニタリングと分析に必要なフィールドのみを受信するかを選択できます。
次のリストは、各フィールド名と、そのフィールドに保持される情報の説明を示しています。フィールドは、Kinesis Data Streams に配信されるログレコードに表示される順序で示されています。
フィールド 46~63 は、メディアプレーヤークライアントが各リクエストで CDN に送信できる一般的なメディアクライアントデータ (CMCD) です。このデータを使用して、メディアタイプ (オーディオ、動画)、再生速度、ストリーミング時間など、各リクエストを確認できます。これらのフィールドは、CloudFront に送信した場合にのみ、リアルタイムログに表示されます。
-
timestamp
エッジサーバーがリクエストへの応答を終了した日時。
-
c-ip
リクエスト元のビューワーの IP アドレス (
192.0.2.183
または2001:0db8:85a3::8a2e:0370:7334
など)。ビューワーが HTTP プロキシまたはロードバランサーを使用してリクエストを送った場合、このフィールドの値はプロキシまたはロードバランサーの IP アドレスです。x-forwarded-for
フィールドも参照してください。 -
s-ip
リクエストを処理した CloudFront サーバーの IP アドレス。例:
192.0.2.183
または2001:0db8:85a3::8a2e:0370:7334
。 -
time-to-first-byte
サーバー上で測定される、要求を受信してから応答の最初のバイトを書き込むまでの秒数。
-
sc-status
サーバーのレスポンスの HTTP ステータスコード (例:
200
)。 -
sc-bytes
サーバーがリクエストに応じてビューワーに送信したデータ (ヘッダーを含む) のバイトの合計数。WebSocket 接続の場合、これは接続を経由してサーバーからクライアントに送信した合計バイト数です。
-
cs-method
ビューワーから受信した HTTP リクエストメソッド。
-
cs-protocol
ビューワーリクエストのプロトコル (
http
、https
、ws
、wss
のいずれか)。 -
cs-host
ビューワーが、このリクエストの
Host
ヘッダーに追加した値。オブジェクトの URL に CloudFront ドメイン名を使用している場合 (d111111abcdef8.cloudfront.net など)、このフィールドにはそのドメイン名が含まれます。代替ドメイン名 (CNAME) をオブジェクト URL (www.example.com) に使用している場合、このフィールドにはその代替ドメイン名が含まれます。 -
cs-uri-stem
クエリ文字列 (存在する場合) を含むが、ドメイン名を含まないリクエスト URL 全体。例えば、
/images/cat.jpg?mobile=true
と指定します。注記
標準ログでは、
cs-uri-stem
値にクエリ文字列は含まれません。 -
cs-bytes
ビューワーがリクエストに含めたデータ (ヘッダーを含む) のバイトの合計数。WebSocket 接続の場合、これは接続でクライアントからサーバーに送信した合計バイト数です。
-
x-edge-location
リクエストを処理したエッジロケーション。各エッジロケーションは、3 文字コードと、割り当てられた任意の数字で識別されます (例: DFW3)。通常、この 3 文字コードは、エッジロケーションの地理的場所の近くにある空港の、国際航空運送協会 (IATA) の空港コードに対応します。(これらの略語は今後変更される可能性があります)。
-
x-edge-request-id
リクエストを一意に識別する不透明な文字列。CloudFront では、この文字列を
x-amz-cf-id
レスポンスヘッダーでも送信します。 -
x-host-header
CloudFront ディストリビューションのドメイン名 (d111111abcdef8.cloudfront.net など)。
-
time-taken
サーバーが、ビューワーのリクエストを受信してからレスポンスの最後のバイトを出力キューに書き込むまでの秒数。サーバーで 1,000 分の 1 秒単位まで測定されます (例: 0.082)。ビューワーから見た場合、レスポンス全体を取得する合計所要時間は、ネットワークのレイテンシーと TCP バッファリングにより、この値よりも長くなります。
-
cs-protocol-version
ビューワーがリクエストで指定した HTTP バージョン。指定できる値には、
HTTP/0.9
、HTTP/1.0
、HTTP/1.1
、HTTP/2.0
およびHTTP/3.0
などがあります。 -
c-ip-version
リクエストの IP バージョン (IPv4 または IPv6)。
-
cs-user-agent
リクエスト内の
User-Agent
ヘッダーの値。User-Agent
ヘッダーでリクエスト元 (リクエスト元のデバイスとブラウザのタイプなど) が識別されます。リクエスト元が検索エンジンの場合は、どの検索エンジンかも識別されます。 -
cs-referer
リクエスト内の
Referer
ヘッダーの値。これはリクエスト元のドメインの名前です。一般的なリファラーとして、検索エンジン、オブジェクトに直接リンクされた他のウェブサイト、ユーザー自身のウェブサイトなどがあります。 -
cs-cookie
名前と値のペアおよび関連属性を含む、リクエスト内の
Cookie
ヘッダー。注記
このフィールドは 800 バイトに切り捨てられます。
-
cs-uri-query
リクエスト URL のクエリ文字列の部分 (ある場合)。
-
x-edge-response-result-type
ビューワーにレスポンスを返す直前にサーバーがレスポンスを分類した方法。
x-edge-result-type
フィールドも参照してください。以下に示しているのは、可能な値です。-
Hit
– サーバーがキャッシュからビューワーにオブジェクトを渡しました。 -
RefreshHit
– サーバーはキャッシュ内でオブジェクトを検出しましたが、オブジェクトの有効期限が切れていたため、サーバーはオリジンに問い合わせて、キャッシュ内に最新バージョンのオブジェクトがあるかどうかを確認しました。 -
Miss
– キャッシュ内のオブジェクトでリクエストに対応できなかったため、サーバーはリクエストをオリジンサーバーに転送して結果をビューワーに返しました。 -
LimitExceeded
– CloudFront クォータ (以前は制限と呼ばれていました) を超えたため、リクエストは拒否されました。 -
CapacityExceeded
– リクエストの受信時にサーバーの容量不足でオブジェクトを渡すことができなかったために、サーバーから 503 エラーが返されました。 -
Error
– 通常、これはリクエストがクライアントエラーとなった (sc-status
フィールドが4xx
範囲内の値となる)、またはサーバーエラーになった (sc-status
フィールドが5xx
範囲内の値となる) ことを意味します。x-edge-result-type
フィールドの値がError
であり、このフィールドの値がError
でない場合、ダウンロードが完了する前にクライアントが切断されました。 -
Redirect
– サーバーは、ディストリビューション設定に従って HTTP から HTTPS にビューワーをリダイレクトしました。
-
-
x-forwarded-for
ビューワーが HTTP プロキシまたはロードバランサーを使用してリクエストを送信した場合、
c-ip
フィールドの値はプロキシまたはロードバランサーの IP アドレスです。この場合、このフィールドはリクエスト元のビューワーの IP アドレスです。このフィールドには、複数の IP アドレスをカンマで区切って含めることができます。各 IP アドレスは、IPv4 アドレス (192.0.2.183
など) または IPv6 アドレス (2001:0db8:85a3::8a2e:0370:7334
など) にすることができます。 -
ssl-protocol
リクエストが HTTPS を使用した場合、このフィールドには、リクエストとレスポンスを送信するためにビューワーとサーバーがネゴシエートした SSL/TLS プロトコルが含まれます。指定可能な値のリストについては、ビューワーと CloudFront との間でサポートされているプロトコルと暗号 でサポートされている SSL/TLS プロトコルを参照してください。
-
ssl-cipher
リクエストが HTTPS を使用した場合、このフィールドには、リクエストとレスポンスを暗号化するためにビューワーとサーバーがネゴシエートした SSL/TLS 暗号が含まれます。使用できる値のリストについては、「ビューワーと CloudFront との間でサポートされているプロトコルと暗号」で、サポートされている SSL/TLS 暗号化を参照してください。
-
x-edge-result-type
サーバーが、最後のバイトを渡した後で、レスポンスを分類した方法。場合によっては、サーバーがレスポンスを送る準備ができたときから、サーバーがレスポンスを送り終わるまでの間に、結果タイプが変わることがあります。
x-edge-response-result-type
フィールドも参照してください。例えば、HTTP ストリーミングで、サーバーがキャッシュ内でストリームのセグメントを検出するとします。そのシナリオでは、このフィールドの値は、通常
Hit
になります。この場合、サーバーがセグメント全体を配信する前にビューワーが接続を閉じると、最終結果タイプ (およびこのフィールドの値) はError
になります。WebSocket 接続の場合、コンテンツがキャッシュ可能ではなく、オリジンに直接プロキシされるため、このフィールドの値は
Miss
になります。以下に示しているのは、可能な値です。
-
Hit
– サーバーがキャッシュからビューワーにオブジェクトを渡しました。 -
RefreshHit
– サーバーはキャッシュ内でオブジェクトを検出しましたが、オブジェクトの有効期限が切れていたため、サーバーはオリジンに問い合わせて、キャッシュ内に最新バージョンのオブジェクトがあるかどうかを確認しました。 -
Miss
– キャッシュ内のオブジェクトでリクエストに対応できなかったため、サーバーはリクエストをオリジンに転送して結果をビューワーに返しました。 -
LimitExceeded
– CloudFront クォータ (以前は制限と呼ばれていました) を超えたため、リクエストは拒否されました。 -
CapacityExceeded
– リクエストの受信時にサーバーの容量不足でオブジェクトを渡すことができなかったために、サーバーから HTTP 503 ステータスコードが返されました。 -
Error
– 通常、これはリクエストがクライアントエラーとなった (sc-status
フィールドが4xx
範囲内の値となる)、またはサーバーエラーになった (sc-status
フィールドが5xx
範囲内の値となる) ことを意味します。sc-status
フィールドの値が200
であるか、このフィールドの値がError
で、x-edge-response-result-type
フィールドの値がError
でない場合は、HTTP リクエストは成功したが、クライアントがすべてのバイトを受信する前に切断されたことを意味します。 -
Redirect
– サーバーは、ディストリビューション設定に従って HTTP から HTTPS にビューワーをリダイレクトしました。
-
-
fle-encrypted-fields
サーバーが暗号化してオリジンに転送したフィールドレベル暗号化フィールドの数。CloudFront サーバーは処理されたリクエストをオリジンにストリーミングするときにデータを暗号化するため、
fle-status
の値がエラーであっても、このフィールドに値が渡されている場合があります。 -
fle-status
フィールドレベル暗号化がディストリビューション用に設定されている場合、このフィールドにはリクエストボディが正常に処理されたかどうかを示すコードが含まれます。サーバーがリクエストボディを正常に処理し、指定したフィールドの値を暗号化してリクエストをオリジンに転送すると、このフィールドの値は
Processed
になります。x-edge-result-type
の値は、この場合でもクライアント側またはサーバー側のエラーを示すことができます。このフィールドで使用できる値は次のとおりです。
-
ForwardedByContentType
– コンテンツタイプが設定されていないため、サーバーは解析や暗号化を行わずにリクエストをオリジンに転送しました。 -
ForwardedByQueryArgs
– フィールドレベル暗号化の設定にないクエリ引数がリクエストに含まれているため、サーバーは解析や暗号化を行わずにリクエストをオリジンに転送しました。 -
ForwardedDueToNoProfile
– フィールドレベル暗号化の設定でプロファイルを指定しなかったため、サーバーは解析や暗号化を行わずにリクエストをオリジンに転送しました。 -
MalformedContentTypeClientError
Content-Type
– ヘッダーの値が無効な形式であるため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。 -
MalformedInputClientError
– リクエストボディが無効な形式であるため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。 -
MalformedQueryArgsClientError
– クエリ引数が空であるか無効な形式であるため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。 -
RejectedByContentType
– フィールドレベル暗号化の設定でコンテンツタイプを指定しなかったため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。 -
RejectedByQueryArgs
– フィールドレベル暗号化の設定でクエリ引数を指定しなかったため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。 -
ServerError
– オリジンサーバーがエラーを返しました。
リクエストがフィールドレベル暗号化のクォータ (以前は制限と呼ばれていました) を超えた場合、このフィールドには次のいずれかのエラーコードが含まれ、サーバーは HTTP ステータスコード 400 をビューワーに返します。フィールドレベル暗号化に関する最新のクォータのリストについては、「フィールドレベル暗号化のクォータ」を参照してください。
-
FieldLengthLimitClientError
– 暗号化されるように設定されているフィールドが最大の長さを超えています。 -
FieldNumberLimitClientError
– ディストリビューションによって暗号化されるように設定されているリクエストがフィールド数の制限を超えています。 -
RequestLengthLimitClientError
– フィールドレベル暗号化が設定されている場合にリクエストボディが最大の長さを超えています。
-
-
sc-content-type
レスポンスの HTTP
Content-Type
ヘッダーの値。 -
sc-content-len
レスポンスの HTTP
Content-Length
ヘッダーの値。 -
sc-range-start
レスポンスに HTTP
Content-Range
ヘッダーが含まれている場合、このフィールドには範囲の開始値が含まれます。 -
sc-range-end
レスポンスに HTTP
Content-Range
ヘッダーが含まれている場合、このフィールドには範囲の終了値が含まれます。 -
c-port
閲覧者からのリクエストのポート番号。
-
x-edge-detailed-result-type
このフィールドには、以下の場合を除き、
x-edge-result-type
フィールドと同じ値が含まれます。-
オブジェクトが Origin Shield レイヤーからビューワーに渡された場合、このフィールドには
OriginShieldHit
が含まれています。 -
オブジェクトが CloudFront キャッシュに存在せず、レスポンスがオリジンリクエストの Lambda@Edge 関数によって生成された場合、このフィールドには
MissGeneratedResponse
が含まれます。 -
x-edge-result-type
フィールドの値がError
の場合、このフィールドにはエラーに関する詳細情報を含む次のいずれかの値が含まれます。-
AbortedOrigin
– サーバーでオリジンに関する問題が発生しました。 -
ClientCommError
– サーバーとビューワーとの通信の問題により、ビューワーへのレスポンスが中断されました。 -
ClientGeoBlocked
– ディストリビューションは、ビューワーの地理的位置からのリクエストを拒否するように設定されています。 -
ClientHungUpRequest
– リクエストの送信中にビューワーが途中で停止しました。 -
Error
– エラータイプが他のどのカテゴリにも適合しないエラーが発生しました。このエラータイプは、キャッシュからのエラーレスポンスをサーバーが渡すときに発生する可能性があります。 -
InvalidRequest
– サーバーがビューワーから無効なリクエストを受信しました。 -
InvalidRequestBlocked
– 要求されたリソースへのアクセスがブロックされます。 -
InvalidRequestCertificate
– ディストリビューションが、HTTPS 接続の確立に使用した SSL/TLS 証明書と一致しません。 -
InvalidRequestHeader
– リクエストに無効なヘッダーが含まれていました。 -
InvalidRequestMethod
– ディストリビューションは、使用された HTTP リクエストメソッドを処理するように設定されていません。これは、ディストリビューションがキャッシュ可能なリクエストのみをサポートしている場合に発生します。 -
OriginCommError
— オリジンに接続中、またはオリジンからデータを読み取るときに、リクエストがタイムアウトしました。 -
OriginConnectError
– サーバーがオリジンに接続できませんでした。 -
OriginContentRangeLengthError
– オリジンのレスポンスのContent-Length
ヘッダーが、Content-Range
ヘッダーの長さと一致しません。 -
OriginDnsError
– サーバーがオリジンのドメイン名を解決できませんでした。 -
OriginError
– オリジンが誤ったレスポンスを返しました。 -
OriginHeaderTooBigError
– オリジンから返されたヘッダーが大きすぎてエッジサーバーで処理できません。 -
OriginInvalidResponseError
– オリジンが無効なレスポンスを返しました。 -
OriginReadError
– サーバーがオリジンから読み取れませんでした。 -
OriginWriteError
– サーバーがオリジンに書き込めませんでした。 -
OriginZeroSizeObjectError
– オリジンから送信されたサイズゼロのオブジェクトがエラーになりました。 -
SlowReaderOriginError
– オリジンエラーの原因となったメッセージの読み取りに時間がかかりました。
-
-
-
c-country
ビューワーの IP アドレスによって決定される、ビューワーの地理的位置を表す国コード。国コードの一覧については、「ISO 3166-1 alpha-2
」を参照してください。 -
cs-accept-encoding
ビューワーリクエスト内の
Accept-Encoding
ヘッダーの値。 -
cs-accept
ビューワーリクエスト内の
Accept
ヘッダーの値。 -
cache-behavior-path-pattern
ビューワーリクエストに一致したキャッシュ動作を識別するパスパターン。
-
cs-headers
ビューワーリクエスト内の HTTP ヘッダー (名前と値)。
注記
このフィールドは 800 バイトに切り捨てられます。
-
cs-header-names
ビューワーリクエスト内の HTTP ヘッダーの名前 (値ではない)。
注記
このフィールドは 800 バイトに切り捨てられます。
-
cs-headers-count
ビューワーリクエスト内の HTTP ヘッダーの数。
-
origin-fbl
CloudFront とオリジン間の先頭バイトのレイテンシーの秒数。
-
origin-lbl
CloudFront とオリジン間の最終バイトのレイテンシーの秒数。
-
asn
ビューワーの AS 番号 (ASN)。
-
primary-distribution-id
継続的デプロイが有効になっている場合、この ID は、どのディストリビューションが現在のディストリビューションでプライマリであるかを識別します。
-
primary-distribution-dns-name
継続的デプロイが有効になっている場合、この値は、現在の CloudFront ディストリビューションに関連するプライマリドメイン名 (d111111abcdef8.cloudfront.net など) を示します。
リアルタイムログの CMCD フィールド
これらのフィールドの詳細については、「CTA Specification Web Application Video Ecosystem - Common Media Client Data CTA-5004
」ドキュメントを参照してください。 -
cmcd-encoded-bitrate
リクエストされたオーディオまたは動画オブジェクトのエンコードされたビットレート。
-
cmcd-buffer-length
リクエストされたメディアオブジェクトのバッファ長。
-
cmcd-buffer-starvation
前のリクエストからオブジェクトリクエストまでの特定の時点でバッファが不足していたかどうか。これにより、プレーヤーが再バッファリング状態になり、動画またはオーディオの再生が停止する可能性があります。
-
cmcd-content-id
現在のコンテンツを識別する一意の文字列。
-
cmcd-object-duration
リクエストされたオブジェクトの再生時間 (ミリ秒単位)。
-
cmcd-deadline
バッファアンダーラン状態やその他の再生問題を回避するために、このオブジェクトの最初のサンプルが利用可能でなければならない、リクエスト時点からの期限。
-
cmcd-measured-throughput
クライアントが測定した、クライアントとサーバー間のスループット。
-
cmcd-next-object-request
次のリクエストされたオブジェクトの相対パス。
-
cmcd-next-range-request
次のリクエストが部分的なオブジェクトリクエストである場合、この文字列はリクエスト対象のバイト範囲を示します。
-
cmcd-object-type
リクエスト対象の現在のオブジェクトのメディアタイプ。
-
cmcd-playback-rate
リアルタイムの場合は 1、倍速の場合は 2、再生しない場合は 0。
-
cmcd-requested-maximum-throughput
クライアントがアセットの配信に十分であると判断した、リクエストされた最大スループット。
-
cmcd-streaming-format
現在のリクエストを定義するストリーミングフォーマット。
-
cmcd-session-id
現在の再生セッションを識別する GUID。
-
cmcd-stream-type
セグメントの可用性を識別するトークン。
v
= すべてのセグメントが使用可能です。l
= セグメントは時間が経つと使用可能になります。 -
cmcd-startup
起動、シーク、またはバッファが空になった後の回復中にオブジェクトが緊急に必要になった場合は、値なしでキーが含まれます。
-
cmcd-top-bitrate
クライアントが再生できる最高ビットレートのレンディション。
-
cmcd-version
定義されたキーの名前と値を解釈するために使用する、この仕様のバージョン。このキーを省略した場合、クライアントとサーバーは、値がバージョン 1 で定義されたものとして解釈する必要があります。
エンドポイント (Kinesis Data Streams)
エンドポイントには、リアルタイムログを送信する Kinesis Data Streams に関する情報が含まれています。データストリームの Amazon リソースネーム (ARN) を指定します。
Kinesis データストリームの作成の詳細については、「Amazon Kinesis Data Streams 開発者ガイド」の以下のトピックを参照してください。
-
ストリームの作成 (AWS SDK for Java を使用)
データストリームを作成するときは、シャードの数を指定する必要があります。次の情報を使用して、必要なシャードの数を見積もることができます。
Kinesis データストリームのシャード数を推定するには
-
ご使用の CloudFront ディストリビューションが受信する 1 秒あたりのリクエスト数を計算 (または概算) します。
1 秒あたりのリクエストを計算するには、CloudFront の使用状況レポート
(CloudFront コンソール内) と CloudFront メトリクス (CloudFront コンソールおよび Amazon CloudWatch コンソール内) を使用します。 -
1 つのリアルタイムログレコードの一般的なサイズを決定します。
一般に、1 つのログレコードは約 500 バイトです。使用可能なすべてのフィールドを含む大きなレコードは、通常、約 1 KB です。
ログレコードのサイズが不明な場合は、サンプルレートを低く (1% などに) 設定して、リアルタイムログを有効化し、Kinesis Data Streams でのデータのモニタリングを使用して平均的なレコードサイズを割り出します (受信バイト数の合計をレコード数の合計で割ります)。
-
Amazon Kinesis Data Streams の料金ページ
の AWS Pricing Calculator の下にある [今すぐカスタム見積もりを作成する] をクリックします。 計算ツールで、1 秒あたりのリクエスト数 (レコード) を入力します。
単一のログレコードの平均レコードサイズを入力します。
[計算を表示] をクリックします。
料金見積りツールが、必要なシャード数と推定コストを表示します。
IAM ロール
Kinesis のデータストリームにリアルタイムログを配信するための許可を CloudFront に付与する AWS Identity and Access Management (IAM) ロールです。
CloudFront コンソールでリアルタイムログ設定を作成する場合、[新規サービスロールの作成] を選択して、コンソールで IAM ロールを作成させることができます。
AWS CloudFormation または CloudFront API (AWS CLI もしくは SDK) を使用してリアルタイムログ設定を作成する場合は、独自に IAM ロールを作成して、ロール ARN を提供する必要があります。IAM ロールを自分で作成するには、次のポリシーを使用します。
IAM ロール信頼ポリシー
次の IAM ロール信頼ポリシーを使用するには、111122223333
を AWS アカウント 数字に置き換えます。このポリシーの Condition
要素は、CloudFront が AWS アカウント 内のディストリビューションの代理としてのみこのロールを引き受けることができるため、「混乱した代理」問題を防止するのに役立ちます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "
111122223333
" } } } ] }
暗号化されていないデータストリーム用の IAM ロールアクセス許可ポリシー
次のポリシーを使用するには、arn:aws:kinesis:us-east-2:123456789012:stream/StreamName
を Kinesis Data Streams の ARN に置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:DescribeStreamSummary", "kinesis:DescribeStream", "kinesis:PutRecord", "kinesis:PutRecords" ], "Resource": [ "
arn:aws:kinesis:us-east-2:123456789012:stream/StreamName
" ] } ] }
暗号化されたデータストリーム用の IAM ロールアクセス許可ポリシー
次のポリシーを使用するには、arn:aws:kinesis:us-east-2:123456789012:stream/StreamName
を Kinesis Data Streams の ARN に、arn:aws:kms:us-east-2:123456789012:key/e58a3d0b-fe4f-4047-a495-ae03cc73d486
を AWS KMS key の ARN に置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:DescribeStreamSummary", "kinesis:DescribeStream", "kinesis:PutRecord", "kinesis:PutRecords" ], "Resource": [ "
arn:aws:kinesis:us-east-2:123456789012:stream/StreamName
" ] }, { "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:us-east-2:123456789012:key/e58a3d0b-fe4f-4047-a495-ae03cc73d486
" ] } ] }
Kinesis Data Streams コンシューマーを作成する
リアルタイムログを読み取って分析するには、Kinesis Data Streams コンシューマーを構築または使用します。CloudFront リアルタイムログ用のコンシューマーを構築する場合、すべてのリアルタイムログレコードのフィールドは、 フィールド セクションの一覧と常に同じ順序で配信されることを知っておくことが重要です。この固定注文に対応するためにコンシューマーを構築することを確認してください。
たとえば、time-to-first-byte
、sc-status
、および c-country
の 3 つのフィールドのみを含むリアルタイムログ設定を考えてみます。このシナリオでは、最後のフィールド、c-country
は、すべてのログレコードで常にフィールド番号 3 です。ただし、後でリアルタイムログ設定にフィールドを追加すると、レコード内の各フィールドの配置が変更される可能性があります。
たとえば、フィールド sc-bytes
と time-taken
をリアルタイムログ設定に追加した場合、これらのフィールドは、 フィールド セクションに示されている順序に従って各ログレコードに挿入されます。5 つのフィールドすべての順序は time-to-first-byte
、sc-status
、sc-bytes
、time-taken
、および c-country
です。c-country
フィールドはもともとフィールド番号 3 でしたが、現在はフィールド番号 5 です。リアルタイムログ設定にフィールドを追加する場合は、コンシューマーアプリケーションがログレコード内の位置を変更するフィールドを処理できることを確認してください。
リアルタイムログのトラブルシューティング
リアルタイムログ設定を作成した後、レコードが Kinesis Data Streams にまったく配信されない (または一部のレコードが配信されない) 場合があります。この場合、まず CloudFront ディストリビューションがビューワーリクエストを受信していることを確認する必要があります。その場合は、次の設定を確認してトラブルシューティングを続行できます。
- IAM ロールのアクセス許可
-
CloudFront では、リアルタイムログレコードを Kinesis データストリームに配信するために、リアルタイムログ設定の IAM ロールが使用されます。ロールの信頼ポリシーとロールのアクセス許可ポリシーが、IAM ロール に示されているポリシーと一致していることを確認してください。
- Kinesis Data Streams のスロットリング
-
CloudFront によってリアルタイムログレコードが Kinesis データストリームに書き込まれる速度が、ストリームで処理できる速度を上回る場合、Kinesis Data Streams は CloudFront からのリクエストを抑制することがあります。この場合、Kinesis データストリームのシャードの数を増やすことができます。各シャードは、1 秒あたり 1,000 レコードまでの書き込みをサポートし、1 秒あたり 1 MB の最大データ書き込みをサポートします。