[アップデート] AWS Elemental MediaLiveとAWS Elemental MediaPackageの連携がこれまでよりも簡単になりました

AWS Elemental MediaLiveの出力グループとしてAWS Elemental MediaPackageのチャンネルを指定できるようになり、チャンネルID等を指定するだけで連携が可能になりました。
2019.03.31

はじめに

清水です。AWS Media Servicesの細かなアップデートを追っていくコーナーです。本エントリで紹介するのはこちら、AWS Elemental MediaLiveでチャンネル出力先にAWS Elemental MediaPackageのチャンネルを選択できるようになり、これら2つのサービス間連携がこれまでよりも簡単になりました。(2019/03/08にポストされたアップデート情報です。)

これまで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": "*"
            }
        ]
    }
}