【やってみた】AWS Elemental MediaLiveの情報をAWS CLIで取得してみた #reinvent
はじめに
清水です。AWS Media Servicesの特長の1つは他のAWSサービスと同様にAWS CLIや各種SDKなどからAPIを通して利用できる点ではないでしょうか。AWS Media ServicesのAWS CLIコマンドについてはサービスリリース時から使用できることが中山(順)のエントリにてレポートされています。本エントリではAWS Elemental MediaLiveについて、実際にAWS CLIを用いて各リソースの情報取得などを行ってみたのでまとめてみます。
やってみた
AWS Elemental MediaLiveは大きく以下の3つのリソースから構成されます。
- Input
- Input Security Group
- Channel
マネージメントコンソールの画面でもこちらの3つが表示されていますね。
この各リソースについて、AWS CLIを使って情報を取得していきます。まず準備として、AWS CLIを最新バージョンにアップデートしておきましょう。本エントリではmac OS Sierra上の以下の環境で検証を行いました。
$ aws --version aws-cli/1.14.17 Python/2.7.10 Darwin/16.7.0 botocore/1.8.21
また本エントリではAWS Elemental MediaLiveの各リソースの作成についてはマネージメントコンソールなどで行っていることを前提とし、基本的には情報の取得のみをAWS CLIで実行してみます。各リソース作成については下記のエントリなどをご参照ください。
- 【やってみた】AWS Elemental MediaLiveとAWS Elemental MediaPackageでライブ配信してみた #reinvent
- 【やってみた】AWS Elemental MediaLiveとAWS Elemental MediaStoreでライブ配信してみた #reinvent
またAWS CLIのaws medialiveの使用方法の詳細については下記のAWS CLI Command Referenceページからリンクされているドキュメントを参照しています。
Input
まずInputです。Inputに関連するのは以下の4つのコマンドですね。
- create-input
- delete-input
- describe-input
- list-inputs
このうちlist-inputsとdescribe-inputを使ってInputの情報を確認してみます。
aws medialive list-inputs
以下のようにオプション引数なしで実行しました。(出力数が多くなる場合などは引数で調整ができるようです。)
$ aws medialive list-inputs
出力は以下のようになりました。マネージメントコンソールのInputs一覧画面で表示できる情報プラスアルファが確認できる具合ですね。
{ "Inputs": [ { "Name": "MediaLiveInput1222", "AttachedChannels": [ "6607XXX" ], "Sources": [], "State": "ATTACHED", "SecurityGroups": [ "954XXX" ], "Type": "RTMP_PUSH", "Id": "7036XXX", "Arn": "arn:aws:medialive:us-west-2:[AWS-Account-ID]:input:7036XXX", "Destinations": [ { "Url": "rtmp://35.165.XXX.XXX:1935/live/myStream", "Ip": "35.165.XXX.XXX", "Port": "1935" }, { "Url": "rtmp://52.32.XXX.XXX:1935/live/myStream", "Ip": "52.32.XXX.XXX", "Port": "1935" } ] }, { "Name": "MediaLive-akiba-aws-3-Input-2", "AttachedChannels": [ "8778XXX" ], "Sources": [], "State": "ATTACHED", "SecurityGroups": [ "954XXX" ], "Type": "RTMP_PUSH", "Id": "1360XXX", "Arn": "arn:aws:medialive:us-west-2:[AWS-Account-ID]:input:1360XXX", "Destinations": [ { "Url": "rtmp://34.216.XXX.XXX:1935/akiba/aws", "Ip": "34.216.XXX.XXX", "Port": "1935" }, { "Url": "rtmp://35.167.XXX.XXX:1935/akiba/aws", "Ip": "35.167.XXX.XXX", "Port": "1935" } ] }, { "Name": "MediaLive-akiba-aws-3-Input", "AttachedChannels": [], "Sources": [], "State": "DETACHED", "SecurityGroups": [ "954XXX" ], "Type": "RTMP_PUSH", "Id": "558820", "Arn": "arn:aws:medialive:us-west-2:[AWS-Account-ID]:input:558820", "Destinations": [ { "Url": "rtmp://34.210.XXX.XXX:1935/akiba/aws", "Ip": "34.210.XXX.XXX", "Port": "1935" }, { "Url": "rtmp://34.216.XXX.XXX:1935/akiba/aws", "Ip": "34.216.XXX.XXX", "Port": "1935" } ] } ] }
以下のようにqueryオプションを使用すれば、マネージメントコンソールと同様の形式で情報をまとめられます。
$ aws medialive list-inputs --query Inputs[].[Name,State,Id,Arn,Type,Destinations[].Url] --output text MediaLiveInput1222 ATTACHED 7036XXX arn:aws:medialive:us-west-2:[AWS-Account-ID]:input:7036XXX RTMP_PUSH rtmp://35.165.XXX.XXX:1935/live/myStream rtmp://52.32.XXX.XXX:1935/live/myStream MediaLive-akiba-aws-3-Input-2 ATTACHED 1360XXX arn:aws:medialive:us-west-2:[AWS-Account-ID]:input:1360XXX RTMP_PUSH rtmp://34.216.XXX.XXX:1935/akiba/aws rtmp://35.167.XXX.XXX:1935/akiba/aws MediaLive-akiba-aws-3-Input DETACHED 558820 arn:aws:medialive:us-west-2:[AWS-Account-ID]:input:558820 RTMP_PUSH rtmp://34.210.XXX.XXX:1935/akiba/aws rtmp://34.216.XXX.XXX:1935/akiba/aws
aws medialive describe-input
続いてliset-inputsで得られてたInputのうちの1つについて、describe-inputコマンドで詳細情報を取得してみます。InputのIDが引数として必要な点に注意します。
$ aws medialive --describe-input --input-id <value>
結果は以下となりました。1つの要素のみですが、内容はlist-inputsの情報と同じようですね。
{ "Name": "MediaLiveInput1222", "AttachedChannels": [ "6607XXX" ], "Sources": [], "State": "ATTACHED", "SecurityGroups": [ "954XXX" ], "Type": "RTMP_PUSH", "Id": "7036XXX", "Arn": "arn:aws:medialive:us-west-2:[AWS-Account-ID]:input:7036XXX", "Destinations": [ { "Url": "rtmp://35.165.XXX.XXX:1935/live/myStream", "Ip": "35.165.XXX.XXX", "Port": "1935" }, { "Url": "rtmp://52.32.XXX.XXX:1935/live/myStream", "Ip": "52.32.XXX.XXX", "Port": "1935" } ] }
Input Security Group
続いてInput Security GroupについてもAWS CLIで情報を取得してみます。Input Security Groupに関連するコマンドもInputと同じように以下の4つで構成されています。
- create-input-security-group
- delete-input-security-group
- describe-input-security-group
- list-input-security-group
list-input-security-groupとdescribe-input-security-groupを使用してみます。
aws medialive list-input-security-group
list-inputと同様、以下のようにオプション引数なしで実行しました。
$ aws medialive list-input-security-groups
結果は以下のようになりました。
{ "InputSecurityGroups": [ { "WhitelistRules": [ { "Cidr": "211.2.XXX.XXX/32" }, { "Cidr": "59.146.XXX.XXX/32" } ], "Id": "4097XXX", "Arn": "arn:aws:medialive:us-west-2:[AWS-Account-ID]:inputSecurityGroup:4097976" }, { "WhitelistRules": [ { "Cidr": "0.0.0.0/0" } ], "Id": "954XXX", "Arn": "arn:aws:medialive:us-west-2:[AWS-Account-ID]:inputSecurityGroup:954XXX" } ] }
describe-input-security-group
続いてdescribe-input-security-groupです。実行時に以下のようにInput Security GroupのIDが必要となります。
$ aws medialive describe-input-security-group --input-security-group-id <value>
liset-input-security-groupで得られた結果の1つ目、ID「4097XXX」を使って実行してみます。
{ "WhitelistRules": [ { "Cidr": "211.2.XXX.XXX/32" }, { "Cidr": "59.146.XXX.XXX/32" } ], "Arn": "arn:aws:medialive:us-west-2:[AWS-Account-ID]:inputSecurityGroup:4097XXX", "Id": "4097XXX" }
こちらもlist-security-groupの情報と同様のようですね。
Channel
Channelについては以下の6つのコマンドが用意されています。
- create-channel
- delete-channel
- describe-channel
- list-channels
- start-channel
- stop-channel
まずはInput、Input Security Groupと同じようにlist-channelsとdescribe-channelコマンドで情報を取得してみます。
aws medialive list-channels
list-channlesについては、他と同様、引数なしで実行してみます。
$ aws medialive list-channels
以下の結果が返ってきました。
{ "Channels": [ { "InputAttachments": [ { "InputId": "7036XXX", "InputSettings": { "AudioSelectors": [], "CaptionSelectors": [ { "SelectorSettings": { "EmbeddedSourceSettings": { "Scte20Detection": "OFF", "Source608ChannelNumber": 1, "Convert608To708": "DISABLED", "Source608TrackNumber": 1 } }, "Name": "EmbeddedSelector" } ], "SourceEndBehavior": "CONTINUE", "InputFilter": "AUTO", "FilterStrength": 1, "NetworkInputSettings": { "ServerValidation": "CHECK_CRYPTOGRAPHY_AND_VALIDATE_NAME" }, "DenoiseFilter": "DISABLED", "DeblockFilter": "DISABLED" } } ], "Name": "MediaLiveChanne1222", "RoleArn": "arn:aws:iam::[AWS-Account-ID]:role/MediaLiveAccessRole", "State": "IDLE", "EgressEndpoints": [ { "SourceIp": "34.213.XXX.XXX" }, { "SourceIp": "52.24.XXX.XXX" } ], "PipelinesRunningCount": 0, "Id": "6607XXX", "Arn": "arn:aws:medialive:us-west-2:[AWS-Account-ID]:channel:6607XXX", "Destinations": [ { "Id": "destination1", "Settings": [ { "Url": "mediastoressl://g3ozdxXXXXXXXX.data.mediastore.us-west-2.amazonaws.com/live/myStream", "Username": "", "PasswordParam": "" }, { "Url": "mediastoressl://toccawXXXXXXXX.data.mediastore.us-west-2.amazonaws.com/live/myStream", "Username": "", "PasswordParam": "" } ] } ] }, { "InputAttachments": [ { "InputId": "1360XXX", "InputSettings": { "AudioSelectors": [], "CaptionSelectors": [], "SourceEndBehavior": "CONTINUE", "InputFilter": "AUTO", "FilterStrength": 1, "NetworkInputSettings": { "ServerValidation": "CHECK_CRYPTOGRAPHY_AND_VALIDATE_NAME" }, "DenoiseFilter": "DISABLED", "DeblockFilter": "DISABLED" } } ], "Name": "MediaLive-akiba-aws-3-Channel-2", "RoleArn": "arn:aws:iam::[AWS-Account-ID]:role/MediaLiveAccessRole", "State": "IDLE", "EgressEndpoints": [ { "SourceIp": "34.216.XXX.XXX" }, { "SourceIp": "34.216.XXX.XXX" } ], "PipelinesRunningCount": 0, "Id": "8778XXX", "Arn": "arn:aws:medialive:us-west-2:[AWS-Account-ID]:channel:8778XXX", "Destinations": [ { "Id": "destination1", "Settings": [ { "Url": "https://626e3c9eXXXXXXXX.mediapackage.us-west-2.amazonaws.com/in/v1/d8232a64b3c44537XXXXXXXXXXXXXXXX/channel", "Username": "fe00529a9c534d35XXXXXXXXXXXXXXXX", "PasswordParam": "/medialive/MediaPackage-akiba-aws-3-ChannelA" }, { "Url": "https://f31c86aeXXXXXXXX.mediapackage.us-west-2.amazonaws.com/in/v1/51e6700ec11240dcXXXXXXXXXXXXXXXX/channel", "Username": "ab5cc8d414cb4133XXXXXXXXXXXXXXXX", "PasswordParam": "/medialive/MediaPackage-akiba-aws-3-ChannelB" } ] } ] } ] }
マネージメントコンソールの一覧画面と同様の情報にするため、--queryオプションで情報を絞ってみます。
$ aws medialive list-channels --query Channels[].[Name,State,Id,Arn,InputAttachments[].InputId] --output text MediaLiveChanne1222 IDLE 6607XXX arn:aws:medialive:us-west-2:[AWS-Account-ID]:channel:6607XXX 7036XXX MediaLive-akiba-aws-3-Channel-2 IDLE 8778XXX arn:aws:medialive:us-west-2:[AWS-Account-ID]:channel:8778XXX 1360XXX
aws medialive describe-channel
describe-channelのコマンドは以下の形式となります。他と同様、ChannelのIDが必要です。
$ aws medialive describe-channel --channel-id <value>
ChannelのIDを元に、describe-channelコマンドを実行してみます。以下の結果が返ってきました。Input、Input security groupと違いlistの情報と同様ではなく、Encoder設定などより詳細情報が得られました。
$ aws medialive describe-channel --channel-id 6607XXX { "InputAttachments": [ { "InputId": "7036XXX", "InputSettings": { "AudioSelectors": [], "CaptionSelectors": [ { "SelectorSettings": { "EmbeddedSourceSettings": { "Scte20Detection": "OFF", "Source608ChannelNumber": 1, "Convert608To708": "DISABLED", "Source608TrackNumber": 1 } }, "Name": "EmbeddedSelector" } ], "SourceEndBehavior": "CONTINUE", "InputFilter": "AUTO", "FilterStrength": 1, "NetworkInputSettings": { "ServerValidation": "CHECK_CRYPTOGRAPHY_AND_VALIDATE_NAME" }, "DenoiseFilter": "DISABLED", "DeblockFilter": "DISABLED" } } ], "Name": "MediaLiveChanne1222", "RoleArn": "arn:aws:iam::[AWS-Account-ID]:role/MediaLiveAccessRole", "PipelinesRunningCount": 0, "EgressEndpoints": [ { "SourceIp": "34.213.XXX.XXX" }, { "SourceIp": "52.24.XXX.XXX" } ], "State": "IDLE", "EncoderSettings": { "TimecodeConfig": { "Source": "EMBEDDED" }, "OutputGroups": [ { "OutputGroupSettings": { "HlsGroupSettings": { "TimedMetadataId3Frame": "PRIV", "CaptionLanguageMappings": [], "Destination": { "DestinationRefId": "destination1" }, "IvSource": "FOLLOWS_SEGMENT_NUMBER", "IndexNSegments": 10, "InputLossAction": "EMIT_OUTPUT", "ManifestDurationFormat": "INTEGER", "CodecSpecification": "RFC_4281", "IvInManifest": "INCLUDE", "TimedMetadataId3Period": 10, "ProgramDateTimePeriod": 600, "SegmentLength": 6, "CaptionLanguageSetting": "OMIT", "ProgramDateTime": "EXCLUDE", "HlsCdnSettings": { "HlsWebdavSettings": { "NumRetries": 10, "ConnectionRetryInterval": 1, "HttpTransferMode": "NON_CHUNKED", "FilecacheDuration": 300, "RestartDelay": 15 } }, "TsFileMode": "SEGMENTED_FILES", "StreamInfResolution": "INCLUDE", "ClientCache": "ENABLED", "AdMarkers": [], "KeepSegments": 21, "SegmentationMode": "USE_SEGMENT_DURATION", "OutputSelection": "MANIFESTS_AND_SEGMENTS", "ManifestCompression": "NONE", "DirectoryStructure": "SINGLE_DIRECTORY", "Mode": "LIVE" } }, "Outputs": [ { "VideoDescriptionName": "video_1080p30", "AudioDescriptionNames": [ "audio_1" ], "CaptionDescriptionNames": [], "OutputSettings": { "HlsOutputSettings": { "NameModifier": "_1080p30", "HlsSettings": { "StandardHlsSettings": { "M3u8Settings": { "PcrControl": "PCR_EVERY_PES_PACKET", "TimedMetadataBehavior": "NO_PASSTHROUGH", "PmtPid": "480", "Scte35Pid": "500", "VideoPid": "481", "ProgramNum": 1, "AudioPids": "492-498", "AudioFramesPerPes": 4, "EcmPid": "8182", "Scte35Behavior": "NO_PASSTHROUGH" }, "AudioRenditionSets": "PROGRAM_AUDIO" } } } } }, { "VideoDescriptionName": "video_720p30", "AudioDescriptionNames": [ "audio_2" ], "CaptionDescriptionNames": [], "OutputSettings": { "HlsOutputSettings": { "NameModifier": "_720p30", "HlsSettings": { "StandardHlsSettings": { "M3u8Settings": { "PcrControl": "PCR_EVERY_PES_PACKET", "TimedMetadataBehavior": "NO_PASSTHROUGH", "PmtPid": "480", "Scte35Pid": "500", "VideoPid": "481", "ProgramNum": 1, "AudioPids": "492-498", "AudioFramesPerPes": 4, "EcmPid": "8182", "Scte35Behavior": "NO_PASSTHROUGH" }, "AudioRenditionSets": "PROGRAM_AUDIO" } } } } }, { "VideoDescriptionName": "video_480p30", "AudioDescriptionNames": [ "audio_za9dzo" ], "CaptionDescriptionNames": [], "OutputSettings": { "HlsOutputSettings": { "NameModifier": "_480p30", "HlsSettings": { "StandardHlsSettings": { "M3u8Settings": { "PcrControl": "PCR_EVERY_PES_PACKET", "TimedMetadataBehavior": "NO_PASSTHROUGH", "PmtPid": "480", "Scte35Pid": "500", "VideoPid": "481", "ProgramNum": 1, "AudioPids": "492-498", "AudioFramesPerPes": 4, "EcmPid": "8182", "Scte35Behavior": "NO_PASSTHROUGH" }, "AudioRenditionSets": "PROGRAM_AUDIO" } } } } }, { "VideoDescriptionName": "video_240p30", "AudioDescriptionNames": [ "audio_40bxb2" ], "CaptionDescriptionNames": [], "OutputSettings": { "HlsOutputSettings": { "NameModifier": "_240p30", "HlsSettings": { "StandardHlsSettings": { "M3u8Settings": { "PcrControl": "PCR_EVERY_PES_PACKET", "TimedMetadataBehavior": "NO_PASSTHROUGH", "PmtPid": "480", "Scte35Pid": "500", "VideoPid": "481", "ProgramNum": 1, "AudioPids": "492-498", "AudioFramesPerPes": 4, "EcmPid": "8182", "Scte35Behavior": "NO_PASSTHROUGH" }, "AudioRenditionSets": "PROGRAM_AUDIO" } } } } } ], "Name": "HD" } ], "CaptionDescriptions": [], "VideoDescriptions": [ { "CodecSettings": { "H264Settings": { "Syntax": "DEFAULT", "FramerateNumerator": 30, "Profile": "HIGH", "GopSize": 60, "AfdSignaling": "NONE", "FramerateControl": "SPECIFIED", "ColorMetadata": "INSERT", "FlickerAq": "ENABLED", "LookAheadRateControl": "HIGH", "FramerateDenominator": 1, "Bitrate": 5000000, "TimecodeInsertion": "DISABLED", "NumRefFrames": 3, "EntropyEncoding": "CABAC", "GopSizeUnits": "FRAMES", "Level": "H264_LEVEL_AUTO", "GopBReference": "ENABLED", "AdaptiveQuantization": "HIGH", "GopNumBFrames": 3, "ScanType": "PROGRESSIVE", "ParControl": "INITIALIZE_FROM_SOURCE", "Slices": 1, "SpatialAq": "ENABLED", "TemporalAq": "ENABLED", "RateControlMode": "CBR", "SceneChangeDetect": "ENABLED", "GopClosedCadence": 1 } }, "Name": "video_1080p30", "Sharpness": 50, "Height": 1080, "Width": 1920, "ScalingBehavior": "DEFAULT", "RespondToAfd": "NONE" }, { "CodecSettings": { "H264Settings": { "Syntax": "DEFAULT", "FramerateNumerator": 30, "Profile": "HIGH", "GopSize": 60, "AfdSignaling": "NONE", "FramerateControl": "SPECIFIED", "ColorMetadata": "INSERT", "FlickerAq": "ENABLED", "LookAheadRateControl": "HIGH", "FramerateDenominator": 1, "Bitrate": 3000000, "TimecodeInsertion": "DISABLED", "NumRefFrames": 3, "EntropyEncoding": "CABAC", "GopSizeUnits": "FRAMES", "Level": "H264_LEVEL_AUTO", "GopBReference": "ENABLED", "AdaptiveQuantization": "HIGH", "GopNumBFrames": 3, "ScanType": "PROGRESSIVE", "ParControl": "INITIALIZE_FROM_SOURCE", "Slices": 1, "SpatialAq": "ENABLED", "TemporalAq": "ENABLED", "RateControlMode": "CBR", "SceneChangeDetect": "ENABLED", "GopClosedCadence": 1 } }, "Name": "video_720p30", "Sharpness": 100, "Height": 720, "Width": 1280, "ScalingBehavior": "DEFAULT", "RespondToAfd": "NONE" }, { "CodecSettings": { "H264Settings": { "TemporalAq": "ENABLED", "Syntax": "DEFAULT", "FramerateNumerator": 30, "Profile": "MAIN", "GopSize": 60, "AfdSignaling": "NONE", "FramerateControl": "SPECIFIED", "ColorMetadata": "INSERT", "FlickerAq": "ENABLED", "LookAheadRateControl": "HIGH", "FramerateDenominator": 1, "Bitrate": 1500000, "TimecodeInsertion": "DISABLED", "NumRefFrames": 3, "EntropyEncoding": "CABAC", "GopSizeUnits": "FRAMES", "Level": "H264_LEVEL_AUTO", "GopBReference": "ENABLED", "ParDenominator": 3, "AdaptiveQuantization": "HIGH", "GopNumBFrames": 3, "ScanType": "PROGRESSIVE", "ParControl": "SPECIFIED", "Slices": 1, "SpatialAq": "ENABLED", "ParNumerator": 4, "RateControlMode": "CBR", "SceneChangeDetect": "ENABLED", "GopClosedCadence": 1 } }, "Name": "video_480p30", "Sharpness": 100, "Height": 480, "Width": 640, "ScalingBehavior": "STRETCH_TO_OUTPUT", "RespondToAfd": "NONE" }, { "CodecSettings": { "H264Settings": { "TemporalAq": "ENABLED", "Syntax": "DEFAULT", "FramerateNumerator": 30, "Profile": "MAIN", "GopSize": 60, "AfdSignaling": "NONE", "FramerateControl": "SPECIFIED", "ColorMetadata": "INSERT", "FlickerAq": "ENABLED", "LookAheadRateControl": "HIGH", "FramerateDenominator": 1, "Bitrate": 750000, "TimecodeInsertion": "DISABLED", "NumRefFrames": 3, "EntropyEncoding": "CABAC", "GopSizeUnits": "FRAMES", "Level": "H264_LEVEL_AUTO", "GopBReference": "ENABLED", "ParDenominator": 3, "AdaptiveQuantization": "HIGH", "GopNumBFrames": 3, "ScanType": "PROGRESSIVE", "ParControl": "SPECIFIED", "Slices": 1, "SpatialAq": "ENABLED", "ParNumerator": 4, "RateControlMode": "CBR", "SceneChangeDetect": "ENABLED", "GopClosedCadence": 1 } }, "Name": "video_240p30", "Sharpness": 100, "Height": 240, "Width": 320, "ScalingBehavior": "STRETCH_TO_OUTPUT", "RespondToAfd": "NONE" } ], "AudioDescriptions": [ { "CodecSettings": { "AacSettings": { "Profile": "LC", "InputType": "NORMAL", "RateControlMode": "CBR", "Spec": "MPEG4", "SampleRate": 48000, "Bitrate": 128000, "CodingMode": "CODING_MODE_2_0", "RawFormat": "NONE" } }, "Name": "audio_1", "LanguageCodeControl": "FOLLOW_INPUT", "AudioSelectorName": "Default", "AudioTypeControl": "FOLLOW_INPUT" }, { "CodecSettings": { "AacSettings": { "Profile": "LC", "InputType": "NORMAL", "RateControlMode": "CBR", "Spec": "MPEG4", "SampleRate": 48000, "Bitrate": 128000, "CodingMode": "CODING_MODE_2_0", "RawFormat": "NONE" } }, "LanguageCodeControl": "FOLLOW_INPUT", "AudioTypeControl": "FOLLOW_INPUT", "Name": "audio_2" }, { "CodecSettings": { "AacSettings": { "Profile": "LC", "InputType": "NORMAL", "RateControlMode": "CBR", "Spec": "MPEG4", "SampleRate": 48000, "Bitrate": 192000, "CodingMode": "CODING_MODE_2_0", "RawFormat": "NONE" } }, "LanguageCodeControl": "FOLLOW_INPUT", "AudioTypeControl": "FOLLOW_INPUT", "Name": "audio_za9dzo" }, { "CodecSettings": { "AacSettings": { "Profile": "LC", "InputType": "NORMAL", "RateControlMode": "CBR", "Spec": "MPEG4", "SampleRate": 48000, "Bitrate": 192000, "CodingMode": "CODING_MODE_2_0", "RawFormat": "NONE" } }, "LanguageCodeControl": "FOLLOW_INPUT", "AudioTypeControl": "FOLLOW_INPUT", "Name": "audio_40bxb2" } ] }, "Id": "6607XXX", "Arn": "arn:aws:medialive:us-west-2:[AWS-Account-ID]:channel:6607XXX", "Destinations": [ { "Id": "destination1", "Settings": [ { "Url": "mediastoressl://g3ozdxXXXXXXXX.data.mediastore.us-west-2.amazonaws.com/live/myStream", "Username": "", "PasswordParam": "" }, { "Url": "mediastoressl://toccawXXXXXXXX.data.mediastore.us-west-2.amazonaws.com/live/myStream", "Username": "", "PasswordParam": "" } ] } ] }
aws medialive start-channel / aws medialive stop-channel
続いてChannelについてはstart/stop操作を実行するコマンドも用意されています。形式としては以下のようにどちらも引数でChannelのIDを必要とします。
$ aws medialive start-channel --channel-id <value> $ aws medialive stop-channel --channel-id <value>
それでは停止の状態からstart-channelコマンドを実行してみます。 まずは以下のようにdescribe-channelコマンドに--queryオプションを付け、State情報を抽出します。IDLE状態ですね。
$ aws medialive describe-channel --channel-id 6607XXX --query [Name,State,Id] [ "MediaLiveChanne1222", "IDLE", "6607XXX" ]
そしてstart-channelコマンドを実行します。
$ aws medialive start-channel --channel-id 6607XXX
実行後、describe-channelと同様と思われる情報が返ってきます。情報が多すぎるので一部(EncoderSettings部分)を割愛した情報を以下に提示します。
{ "InputAttachments": [ { "InputId": "7036XXX", "InputSettings": { "AudioSelectors": [], "CaptionSelectors": [ { "SelectorSettings": { "EmbeddedSourceSettings": { "Scte20Detection": "OFF", "Source608ChannelNumber": 1, "Convert608To708": "DISABLED", "Source608TrackNumber": 1 } }, "Name": "EmbeddedSelector" } ], "SourceEndBehavior": "CONTINUE", "InputFilter": "AUTO", "FilterStrength": 1, "NetworkInputSettings": { "ServerValidation": "CHECK_CRYPTOGRAPHY_AND_VALIDATE_NAME" }, "DenoiseFilter": "DISABLED", "DeblockFilter": "DISABLED" } } ], "Name": "MediaLiveChanne1222", "RoleArn": "arn:aws:iam::[AWS-Account-ID]:role/MediaLiveAccessRole", "PipelinesRunningCount": 0, "EgressEndpoints": [ { "SourceIp": "34.213.XXX.XXX" }, { "SourceIp": "52.24.XXX.XXX" } ], "State": "STARTING", "EncoderSettings": { "割愛" }, "Id": "6607XXX", "Arn": "arn:aws:medialive:us-west-2:[AWS-Account-ID]:channel:6607XXX", "Destinations": [ { "Id": "destination1", "Settings": [ { "Url": "mediastoressl://g3ozdxXXXXXXXX.data.mediastore.us-west-2.amazonaws.com/live/myStream", "Username": "", "PasswordParam": "" }, { "Url": "mediastoressl://toccawXXXXXXXX.data.mediastore.us-west-2.amazonaws.com/live/myStream", "Username": "", "PasswordParam": "" } ] } ] }
以下のように、start-channelコマンド実行直後はSTARTINGの状態ですが、しばらくするとRUNNING状態となります。
$ aws medialive describe-channel --channel-id 6607XXX --query [Name,State,Id] [ "MediaLiveChanne1222", "STARTING", "6607XXX" ]
$ aws medialive describe-channel --channel-id 6607XXX --query [Name,State,Id] [ "MediaLiveChanne1222", "RUNNING", "6607XXX" ]
今度はこの状態からstop-channelコマンドを実行してみます。
$ aws medialive stop-channel --channel-id 6607XXX
start-channelと同様、Channelの詳細情報が返ってきます。
{ "InputAttachments": [ { "InputId": "7036XXX", "InputSettings": { "AudioSelectors": [], "CaptionSelectors": [ { "SelectorSettings": { "EmbeddedSourceSettings": { "Scte20Detection": "OFF", "Source608ChannelNumber": 1, "Convert608To708": "DISABLED", "Source608TrackNumber": 1 } }, "Name": "EmbeddedSelector" } ], "SourceEndBehavior": "CONTINUE", "InputFilter": "AUTO", "FilterStrength": 1, "NetworkInputSettings": { "ServerValidation": "CHECK_CRYPTOGRAPHY_AND_VALIDATE_NAME" }, "DenoiseFilter": "DISABLED", "DeblockFilter": "DISABLED" } } ], "Name": "MediaLiveChanne1222", "RoleArn": "arn:aws:iam::[AWS-Account-ID]:role/MediaLiveAccessRole", "PipelinesRunningCount": 2, "EgressEndpoints": [ { "SourceIp": "34.213.XXX.XXX" }, { "SourceIp": "52.24.XXX.XXX" } ], "State": "STOPPING", "EncoderSettings": { "割愛" }, "Id": "6607XXX", "Arn": "arn:aws:medialive:us-west-2:[AWS-Account-ID]:channel:6607XXX", "Destinations": [ { "Id": "destination1", "Settings": [ { "Url": "mediastoressl://g3ozdxXXXXXXXX.data.mediastore.us-west-2.amazonaws.com/live/myStream", "Username": "", "PasswordParam": "" }, { "Url": "mediastoressl://toccawXXXXXXXX.data.mediastore.us-west-2.amazonaws.com/live/myStream", "Username": "", "PasswordParam": "" } ] } ] }
stop-channelコマンド実行直後はSTOPPING状態ですが、しばらくするとIDLE状態になりました。
$ aws medialive describe-channel --channel-id 6607XXX --query [Name,State,Id] [ "MediaLiveChanne1222", "STOPPING", "6607XXX" ]
$ aws medialive describe-channel --channel-id 6607XXX --query [Name,State,Id] [ "MediaLiveChanne1222", "IDLE", "6607XXX" ]
まとめ
AWS CLIを使ってAWS Elemental MediaLiveの各リソースの情報取得、またChannelのstart/stop動作を行ってみました。情報取得については、Input、Input Security Group、Channelともlistコマンドとdescribeコマンドが用意されており、同様の使用感で使えるのではないでしょうか。Channelについてのみdescribeすることでlist以上の詳細な情報が出力されることが確認できました。AWS CLIを使うことで例えばマネージメントコンソールの画面上での確認のみではなく、CLI出力のテキストとして差分を確認するなど様々な利用方法が考えられると思います。今回触れられなかったcreate、delete操作についても今後検証してみたいと思います。