こんにちは。streampackのfadoです。
蒸し暑い季節到来ですね。ここ最近家を出る機会(というより籠らざるを得ない状況?)がめっきりと減ったのでそろそろ運動をしないとまずいなーと思いながら昨日もオレオを一箱食べました。やれやれ。それはさておき、仕事でAWS コマンドラインインタフェース(AWS CLI
)を使ってリソースを作成する作業が増えてきたのでそのちょっとした知識を共有したいと思い、今回のテーマにしました。
はじめに
AWS Media Services
のプラットフォームを構築する際にいつもコンソール上で対応していますがツールを使っての作業方法も知っておく必要があると気づくようになりました。よって今回は私が頻繁に使っているAWS CLI
をAWS Media Services
の一つのサービス、AWS Elemental MediaLive
に絞って簡単に説明していきたいと思います。
AWS CLIはこういう時に役立つ
- 複数のAWS サービスを制御したい時
- リソースを一斉作成したい時(e.g. MediaLive InputsとChannelsを10個同時作成するなど)
- スクリプトと組み合わせて自動化したい時
注意事項
AWS CLI
version 2を使っています。Version 1も問題ないですが推奨されているVersion 2にしました。AWS CLI
を実行するにあたり、リソースへの適切な権限が付与されたことを前提に説明します。- ~/.aws/configにregionを記載すればコマンドライン上での指定を省略できます(設定ファイルは各環境により異なる可能があります)
[profile test] region = ap-northeast-1 output = json
実行方法
1.コマンドラインに設定をパラメーターとして指定して実行する方法
2.パラメーターにJSONファイルを指定して実行する方法
シンプルな設定ならパラメーターとしてそのまま指定はしますが、MediaLive
のcreate-channel
コマンドのように複雑な設定を要する場合はJSONファイルを用意した方がわかりやすくかつ簡単かなと。JSONファイルの用意は少々面倒なところもありますが、各リソースがどういった構造や設定になっているか触っていくうちに理解も深まります。JSON構文の知見があまりない方でも慣れていくいいチャンスだと思います(自分もその一人なので)
よく利用するパラメーター/オプション
- 各パラメーターのhelpを表示させる
$ aws --profile test medialive help $ aws --profile test medialive create-input-security-group help
--generate-cli-skeleton
で設定可能サンプルJSONを表示させる(JSONファイルで指定したい場合)
$ aws --profile test mediapackage create-channel --generate-cli-skeleton { "Description": "", "Id": "", "Tags": { "KeyName": "" } }
- list-xxxx (e.g.
list-channels
)で既存リソースを表示させる
$ aws --profile test medialive list-input-security-groups
AWS Elemental MediaLive
Input-security-groups
create-input-security-group
1.設定をパラメーターとして指定するパターン
- 実行コマンド
$ aws --profile test medialive create-input-security-group --whitelist-rules Cidr=0.0.0.0/0 --tags Name=TestSecGroup,Project=Test
- 結果
{ "SecurityGroup": { "Arn": "arn:aws:medialive:ap-northeast-1:XXXX:inputSecurityGroup:YYYY", "Id": "YYYY", "Inputs": [], "State": "IDLE", "Tags": { "Project": "Test", "Name": "TestSecGroup" }, "WhitelistRules": [ { "Cidr": "0.0.0.0/0" } ] } }
2.JSONファイルを指定し、実行するパターン
- JSONファイル
$ cat input-security-group.json { "Tags": { "Name": "TestSecGroup", "Project": "Test" }, "WhitelistRules": [ { "Cidr": "0.0.0.0/0" } ] }
- 実行コマンド
$ aws --profile test medialive create-input-security-group --cli-input-json file://input-security-group.json
- 結果
{ "SecurityGroup": { "Arn": "arn:aws:medialive:ap-northeast-1:XXXX:inputSecurityGroup:YYYY", "Id": "YYYY", "Inputs": [], "State": "IDLE", "Tags": { "Project": "Test", "Name": "TestSecGroup" }, "WhitelistRules": [ { "Cidr": "0.0.0.0/0" } ] } }
describe-input-security-group
パラメーターとして--input-security-group-id
を指定する
- 実行コマンド
$ aws --profile test medialive describe-input-security-group --input-security-group-id YYYY
- 結果
{ "Arn": "arn:aws:medialive:ap-northeast-1:XXXX:inputSecurityGroup:YYYY", "Id": "YYYY", "Inputs": [], "State": "IDLE", "Tags": { "Project": "Test", "Name": "TestSecGroup" }, "WhitelistRules": [ { "Cidr": "0.0.0.0/0" } ] }
delete-input-security-group
パラメーターとして--input-security-group-id
を指定する
- 実行コマンド
$ aws --profile test medialive delete-input-security-group --input-security-group-id YYYY
- 結果
delete-input-security-group
の場合、結果は表示されませんのでご注意ください。
Inputs
create-input
RTMP_PUSH
で作成する場合
1.設定をパラメーターとして指定するパターン
- 実行コマンド
$ aws --profile test medialive create-input --destination StreamName=test/live_A StreamName=test/live_B --input-security-groups YYYY --name test-input-001 --type RTMP_PUSH
- 結果
{ "Input": { "Arn": "arn:aws:medialive:ap-northeast-1:XXXX:input:ZZZZ", "AttachedChannels": [], "Destinations": [ { "Ip": "XX.XX.XX.XX", "Port": "1935", "Url": "rtmp://XX.XX.XX.XX:1935/test/live_A" }, { "Ip": "YY.YY.YY.YY", "Port": "1935", "Url": "rtmp://YY.YY.YY.YY:1935/test/live_B" } ], "Id": "ZZZZ", "InputClass": "STANDARD", "InputSourceType": "STATIC", "MediaConnectFlows": [], "Name": "test-input-001", "SecurityGroups": [ "XXXX" ], "Sources": [], "State": "DETACHED", "Tags": {}, "Type": "RTMP_PUSH" } }
2.JSONファイルを指定し、実行するパターン
- JSONファイル
{ "Destinations": [ { "StreamName": "test/live_A" }, { "StreamName": "test/live_B" } ], "InputSecurityGroups": [ "XXXX" ], "Name": "test-input-001", "Type": "RTMP_PUSH" }
- 実行コマンド
$ aws --profile test medialive create-input file://{FILENAME}.json
- 結果
{ "Input": { "Arn": "arn:aws:medialive:ap-northeast-1:XXXX:input:ZZZZ", "AttachedChannels": [], "Destinations": [ { "Ip": "XX.XX.XX.XX", "Port": "1935", "Url": "rtmp://XX.XX.XX.XX:1935/test/live_A" }, { "Ip": "YY.YY.YY.YY", "Port": "1935", "Url": "rtmp://YY.YY.YY.YY:1935/test/live_B" } ], "Id": "ZZZZ", "InputClass": "STANDARD", "InputSourceType": "STATIC", "MediaConnectFlows": [], "Name": "test-input-001", "SecurityGroups": [ "XXXX" ], "Sources": [], "State": "DETACHED", "Tags": {}, "Type": "RTMP_PUSH" } }
describe-input
--input-id
をパラメーターとして指定する
- 実行コマンド
$ aws --profile test medialive describe-input --input-id 5770059
- 結果
{ "Arn": "arn:aws:medialive:ap-northeast-1:XXXX:input:ZZZZ", "AttachedChannels": [], "Destinations": [ { "Ip": "XX.XX.XX.XX", "Port": "1935", "Url": "rtmp://XX.XX.XX.XX:1935/test/live_A" }, { "Ip": "XX.XX.XX.XX", "Port": "1935", "Url": "rtmp://XX.XX.XX.XX:1935/test/live_B" } ], "Id": "ZZZZ", "InputClass": "STANDARD", "InputSourceType": "STATIC", "MediaConnectFlows": [], "Name": "test-input-001", "SecurityGroups": [ "YYYY" ], "Sources": [], "State": "DETACHED", "Tags": {}, "Type": "RTMP_PUSH" }
delete-input
--input-id
をパラメーターとして指定する
- 実行コマンド
$ aws --profile test medialive delete-input --input-id ZZZZ
- 結果
delete-input
の場合、結果は表示されませんのでご注意ください。
Channels
create-channel
私はcreate-channel
を使う際は必ずJSONファイルを指定します。コマンドライン1行で全ての設定を盛り込むのは相当な作業、手間がかかるからです。JSONファイルがすごく長くなるので例としてこの記事に載せませんがまず--generate-cli-skeleton
で設定可能の項目を確認し、要件に合わせた設定に変更後、下記コマンドを実行しましょう。
- 実行コマンド
$ aws --profile test medialive create-channel file://{FILENAME}.json
describe-channel
--channel-id
パラメーターを指定する
- 実行コマンド
$ aws --profile test medialive describe-channel --channel-id XXXX
delete-channel
--channel-id
パラメーターを指定する。尚、結果は表示されませんのでご注意下さい。
- 実行コマンド
$ aws --profile test medialive delete-channel --channel-id XXXX
start-channel
- 実行コマンド
$ aws --profile test medialive describe-channel --channel-id XXXX
stop-channel
- 実行コマンド
$ aws --profile test medialive stop-channel --channel-id XXXX
最後に
いかがでしょうか。上記に挙げたMediaLive
のコマンドはまだまだたくさんあります。気なる方は参考文献を参考にしてみて下さい。個人としては使ってみてある程度コツが掴めば(特にJSONファイルの作成)そこまで難しくはないかもしれません。まあ、何もかも繰り返しと慣れですね。
次回はJMESPath
というJSON構文から検索条件などをフィルターしたりエレメントを抽出する際に用いられる言語と組合わせた、もう少し踏み込んだAWS CLIの使い方も紹介できたらいいなと思っています。それでは簡単ではありますが読んで頂いた方々の参考になれば何よりです!
参考文献
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/medialive/index.html