この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
清水です。AWS Elemental MediaPackageでは2020年10月のアップデートでライブパッケージング機能に対してのアクセスログをサポートしました。
そこから数ヶ月、MediaPackageのユーザガイドのドキュメント履歴を確認してみたところVODパッケージング機能に対してもアクセスログがサポートされるようになっていました、2021年2月24日付のドキュメントアップデートです。本エントリではこのMediaPakcageのVODパッケージングでアクセスログを設定、確認してみたのでまとめてみます。
MediaPackageのVODパッケージングでアクセスログを設定してみた
それでは実際にMediaPackageのVODパッケージング機能でアクセスログを有効化し、その内容を確認していきます。
VODパッケージングを行う上での準備
MediaPackageでVODパッケージングを行うにあたり、MediaPackageからS3へのアクセス権を設定したIAMロールが必要となります。ユーザガイドのAmazon S3 access for VOD workflowsを参考にIAMポリシーを作成しIAMロールに紐付けます。このIAMロールは信頼ポリシー(信頼関係)で"Service": "mediapackage.amazonaws.com"
をPrincipalに持つように設定します。詳細はユーザガイドのAllowing AWS Elemental MediaPackage to access other AWS servicesを参照ください。また実際に設定した例をMediaPackageのVODパッケージング機能をまとめたエントリに記載しています。本エントリではこの際に作成したIAMロールMediaPackageVoD-Role
を使用します。
またVODパッケージングの入力はS3上にあるHLSまたはSMIL形式のコンテンツとなります。(VOD supported codecs and input types)今回はIAMロールと同様、MediaPackageのVODパッケージング機能をまとめたエントリ記載の際のHLS形式のコンテンツをそのまま使用します。iPhoneで撮影した動画(拡張子mov、QuickTime形式)をAWS Elemental MediaConvertのJob templates、System templates/System-Ott_Hls_Ts_Avc_Aacを使って変換したものになります。
Packaging groupの作成とアクセスログ有効化
MediaPackageのVODパッケージングにおけるリソース単位となるPackaging groupsをAWSマネジメントコンソールから作成します。この作成の際に、アクセスログ設定箇所があるので、こちらを有効にします。アクセスログの出力先はCloudWatch Logsです。Log group nameを指定可能ですが、デフォルトのVodEgressAccessLogs
のまま進めます。
[Create]を押下してpackaging groupを作成すると、AWSServiceRoleForMediaPackage
というIAMロールが作成されます。こちらはMediaPackageがCloudWatch Logsにアクセスログを書き込むために使用するもので、このIAMロールが存在していなければアクセスログ設定時に作成される、という挙動かと思います。
権限としてはAWS managed policy「MediaPackageServiceRolePolicy」がアタッチされ、信頼ポリシーで"Service": "mediapackage.amazonaws.com"をPrincipalに持つよう設定されていました。
AWS managed policyのMediaPackageServiceRolePolicyは現時点(2021/06/30)で以下の内容が設定されていました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "logs:PutLogEvents",
"Resource": "arn:aws:logs:*:*:log-group:/aws/MediaPackage/*:log-stream:*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:CreateLogGroup",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams"
],
"Resource": "arn:aws:logs:*:*:log-group:/aws/MediaPackage/*"
}
]
}
Packaging groupの設定とAssetsの作成
作成されたPackaging groupについて、Packaging configurationを作成します。実際にどんなパッケージングを行うかの設定ですね。[Manage configurations]ボタンから進みます。
Idを「mediapackage-vod-packaging-access-logging-hls-config」と設定、Package typeはデフォルトのApple HLS
のままとします。(ほか項目もデフォルトのまま進めます。)
もう一つ、Package typeをDASH-ISO
としたPackaging configurationも作成しておきます。Idを「mediapackage-vod-packaging-access-logging-dash-config」としました。Package type以外の項目はデフォルトとします。
続いてAssetsを作成します。先述の通り別エントリで準備していたVODコンテンツを使用します。格納されているS3バケットを選択、IAMロールはMediaPackageVoD-Role
を選択します。Asset detailsにて、S3バケット内のm3u8ファイルへのパスを入力します。
Packaging settingsでは、先ほど作成したPackaging group「mediapackage-vod-packaging-access-logging」を選択します。最後に[Ingest assets]ボタンでAssetsが作成されます。
VODの再生とアクセスログの確認
Assetの準備ができたら(CloudWatch Eventsで確認ができます)、Playback detailsの各configurationのURLを確認して、パッケージングされたVODを再生してみます。VideoJS HTTP Streaming (VHS)を使ってHLS、DASHとも数回再生をしてみました。
VODの再生後、AWSマネジメントコンソールのCloudWatchページ、Log groupsを確認してみます、以下のようにロググループ「/aws/MediaPackage/VodEgressAccessLogs」といくつかのログストリームができていますね。
実際のログエントリを2つほどひろってみました。(うまくマニフェストファイルへのアクセスがひろえました。)
HLSエンドポイント、マニフェストファイルへのアクセス
{
"timestamp": "2021-06-30T07:11:01.645302Z",
"clientIp": "XXX.XXX.XXX.XXX",
"processingTime": 0.09000000000000001,
"statusCode": "200",
"receivedBytes": 466,
"sentBytes": 623,
"method": "GET",
"request": "https://b56axxxxxxxxxxxxxxxxxxxxxxxxxxxx.egress.mediapackage-vod.ap-northeast-1.amazonaws.com:443/out/v1/ea69xxxxxxxxxxxxxxxxxxxxxxxxxxxx/1487xxxxxxxxxxxxxxxxxxxxxxxxxxxx/6648xxxxxxxxxxxxxxxxxxxxxxxxxxxx/index.m3u8",
"protocol": "HTTP/2.0",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
"account": "123456789012",
"domainName": "b56axxxxxxxxxxxxxxxxxxxxxxxxxxxx.egress.mediapackage-vod.ap-northeast-1.amazonaws.com",
"requestId": "Root=1-xxxxxxxxxxxxxxxxxxxxxxxxxxxx536ac",
"packagingConfigArn": "arn:aws:mediapackage-vod:ap-northeast-1:123456789012:packaging-configurations/mediapackage-vod-packaging-access-logging-hls-config",
"packagingGroupArn": "arn:aws:mediapackage-vod:ap-northeast-1:123456789012:packaging-groups/mediapackage-vod-packaging-access-logging",
"assetArn": "arn:aws:mediapackage-vod:ap-northeast-1:123456789012:assets/Sample-20190113-1-2"
}
DASHエンドポイント、マニフェストファイルへのアクセス
{
"timestamp": "2021-06-30T07:14:04.555375Z",
"clientIp": "XXX.XXX.XXX.XXX",
"processingTime": 0.149,
"statusCode": "200",
"receivedBytes": 447,
"sentBytes": 2112,
"method": "GET",
"request": "https://b56axxxxxxxxxxxxxxxxxxxxxxxxxxxx.egress.mediapackage-vod.ap-northeast-1.amazonaws.com:443/out/v1/ea69xxxxxxxxxxxxxxxxxxxxxxxxxxxx/c7b6xxxxxxxxxxxxxxxxxxxxxxxxxxxx/13ccxxxxxxxxxxxxxxxxxxxxxxxxxxxx/index.mpd",
"protocol": "HTTP/2.0",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
"account": "123456789012",
"domainName": "b56axxxxxxxxxxxxxxxxxxxxxxxxxxxx.egress.mediapackage-vod.ap-northeast-1.amazonaws.com",
"requestId": "Root=1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxec020",
"packagingConfigArn": "arn:aws:mediapackage-vod:ap-northeast-1:123456789012:packaging-configurations/mediapackage-vod-packaging-access-logging-dash-config",
"packagingGroupArn": "arn:aws:mediapackage-vod:ap-northeast-1:123456789012:packaging-groups/mediapackage-vod-packaging-access-logging",
"assetArn": "arn:aws:mediapackage-vod:ap-northeast-1:123456789012:assets/Sample-20190113-1-2"
}
MediaPackageユーザガイドのAccess logging - Read the access logs に例示されているサンプルをもとに、CloudWatch Logs Insightsでの確認もしてみましょう。Assetごと(といっても1つだけですが)、statusCodeでカウントしてみました。
fields @timestamp, @message
| filter assetArn like 'arn:aws:mediapackage-vod:ap-northeast-1:123456789012:assets/Sample-20190113-1-2'
| stats count() by statusCode
まとめ
AWS Elemental MediaPackageのVODパッケージングでアクセスログを設定してみました。ライブパッケージングでのアクセスログサポートのアップデートから、わずか約4ヶ月でのVODパッケージングでのサポートです、大変嬉しいですね。VODパッケージングではライブパッケージングとリソース構成などが異なることから(そもそもAPIなども異なりますね)、ログフィールドの中身もライブパッケージングと異なる項目があります。内容を確認する際には注意しましょう。