この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
清水です。AWS Media Servicesの細かなアップデートを追っていくコーナーです。本エントリで紹介するのはこちら、AWS Elemental MediaLiveでチャンネル出力先にAWS Elemental MediaPackageのチャンネルを選択できるようになり、これら2つのサービス間連携がこれまでよりも簡単になりました。(2019/03/08にポストされたアップデート情報です。)
- AWS Elemental MediaLive Simplifies Sending Live Streams to AWS Elemental MediaPackage
- AWS Elemental MediaLive から AWS Elemental MediaPackage へのライブストリーミング送信が簡単に
これまでAWS Elemental MediaLiveからAWS Elemental MediaPackageの連携は、AWS Elemental MediaPackgeのチャンネルのInput URLならびにその認証情報を、AWS Elemental MediaLiveのHLS group destinationに設定する必要がありました。今回のアップデートでAWS Elemental MediaLiveの出力グループとしてAWS Elemental MediaPackageのチャンネルを指定できるようになり、チャンネルID等を指定するだけで連携が可能になりました。本エントリではこれまでの連携方法とアップデートで簡単になった連携方法それぞれを確認してみたいと思います。
これまでのAWS Elemental MediaLiveからAWS Elemental MediaPackageの連携方法を振り返ってみる
まずはこれまでのAWS Elemental MediaLiveとAWS Elemental MediaPackageの連携方法を振り返ってみましょう。例えばAWS Media Services(含むMediaLive、MediaPackage)リリース直後にに公開した下記エントリで当時のようすを確認できます。
この2017年12月当時では、まずAWS Elemental MediaPackageで2つのチャンネルを作成し、そのInput URLならびにその認証情報をAWS Elemental MediaLiveのチャンネルのHLS Output groupのdestination A、destination Bのそれぞれに入力して設定していました。この際の認証情報は、AWSマネージメントコンソール上では意識しなくても設定できるのですが、裏側ではEC2 System Managerと連携しておりちょっとわかりにくいポイントでもありました。
その後、2018年8月にはAWS Elemental MediaPackageのアップデートがあり、MediaPackageの1つのチャンネルを作成すると冗長構成された2つのInputが作成されるようになりました。このためMediaPackage側のチャンネルリソースとして作成は1つとなりました。しかし、MediaPackageのEndponit(Input)ならびに認証情報は相変わらず2種類をMediaLive側に設定する、ということが必要でした。
簡単になったAWS Elemental MediaLiveとAWS Elemental MediaPackageの連携方法を確認してみる
では、今回のアップデートで簡単になったAWS Elemental MediaLiveとAWS Elemental MediaPackageの連携方法を実際にAWSマネジメントコンソールの画面で確認してみましょう。まずは通常どおりAWS Elemental MediaPackageのチャンネルを作成します。MediaPackageが冗長入力に対応しているので(2018年8月のアップデート)作成が必要なチャンネルは1つだけです。またInput typeは従来どおりApple HLS
を選択しておきます。
続いてAWS Elemental MediaLiveの設定作業です。ここで各リソースの設定前に、IAMロールを設定、もしマネジメントコンソール上に下記のようなIAMロールをアップデートするメッセージが出た場合は、右側UpdateボタンでIAMロールのアップデートを行っておきましょう。
続いて、MediaLiveのリソース作成に移ります。MediaLiveのチャンネルを作成の際、Output groupsで[Add]ボタンを押下しOutputリソースを作成しようとすると、下記のように選択できるoutput group typeでMediaPackage
が追加されていることがわかります。このMediaPackage
を選択して次に進みます。
次の画面では、MediaPackage destinationとしてMediaPackageのチャンネルIDを入力します。これだけでMediaPacakgeの出力先チャンネルの設定としては完了です! MediaPackage outputsの項目で出力映像の解像度やコーデック、アスペクト比とフレームレートなどを適切に設定して、MediaLiveのチャンネルを作成しましょう。
その後、いつもの通りMediaLiveのチャンネルをStartさせて、配信エンコーダから映像を流せばMediaLiveからMediaPackageへと連携され、映像の視聴ができました!
まとめ
AWS Elemental MediaLiveでチャンネル出力先にAWS Elemental MediaPackageのチャンネルを選択できるようになったアップデートについて確認してみました。これまでの、MediaPackageのチャンネルのInput URLならびにその認証情報をMediaLiveのHLS outputの出力先に指定する方法でも、設定方法が変わってしまえば問題はないのですが、やはり多少の煩わしさはあったかと思います。今回のアップデートで、MediaPackageのチャンネルIDの入力のみ済むため、設定が本当に簡単になったかと思います。また特に、裏側でEC2 Systems Managerと連携することもこの方法ではないようですので、シンプルになった印象が強いです。引き続き、AWS Elemental MediaLive含めたAWS Media Servicesの機能アップデートに注目していきたいと思います。
補足: IAMロールのアップデート内容情報
私の環境では以下のように、インラインポリシー「MediaLiveCustomPolicy」がアップデートされました。以前も下記のエントリでアップデートをしているのですが、さらに各AWSサービスとの連携が図られているようですね。
Update前
$ aws iam list-role-policies --role-name MediaLiveAccessRole
{
"PolicyNames": [
"MediaLiveCustomPolicy"
]
}
$ aws iam get-role-policy --role-name MediaLiveAccessRole --policy-name MediaLiveCustomPolicy
{
"RoleName": "MediaLiveAccessRole",
"PolicyName": "MediaLiveCustomPolicy",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"mediastore:ListContainers",
"mediastore:PutObject",
"mediastore:GetObject",
"mediastore:DeleteObject",
"mediastore:DescribeObject"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams",
"logs:DescribeLogGroups"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"mediaconnect:ManagedDescribeFlow",
"mediaconnect:ManagedAddOutput",
"mediaconnect:ManagedRemoveOutput"
],
"Resource": "*"
}
]
}
}
Update後
$ aws iam list-role-policies --role-name MediaLiveAccessRole
{
"PolicyNames": [
"MediaLiveCustomPolicy"
]
}
$ aws iam get-role-policy --role-name MediaLiveAccessRole --policy-name MediaLiveCustomPolicy
{
"RoleName": "MediaLiveAccessRole",
"PolicyName": "MediaLiveCustomPolicy",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"mediastore:ListContainers",
"mediastore:PutObject",
"mediastore:GetObject",
"mediastore:DeleteObject",
"mediastore:DescribeObject"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams",
"logs:DescribeLogGroups"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"mediaconnect:ManagedDescribeFlow",
"mediaconnect:ManagedAddOutput",
"mediaconnect:ManagedRemoveOutput"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:describeSubnets",
"ec2:describeNetworkInterfaces",
"ec2:createNetworkInterface",
"ec2:createNetworkInterfacePermission",
"ec2:deleteNetworkInterface",
"ec2:deleteNetworkInterfacePermission",
"ec2:describeSecurityGroups"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"mediapackage:DescribeChannel"
],
"Resource": "*"
}
]
}
}