AWS Elemental LinkのリージョントランスファーをAWS CLIでやってみた

Linkデバイスの使用リージョンを変更するリージョントランスファーをAWS CLIでやってみました。アカウントトランスファーと同じくaws medialive transfer-input-deviceコマンドを使いますが、使用するオプションが異なります。
2021.03.28

はじめに

清水です。AWS Elemental MediaLive用のセットアップ済みライブエンコーダデバイスとして動作するAWS Elemental Link、リリース当初は購入時に指定したAWSリージョンでのみ動作する、という制限がありましたが、今年冒頭にこの使用リージョンを変更するリージョントランスファー機能がリリースされました。

上記エントリではAWSマネジメントコンソールから使用リージョンの変更(デバイスの別リージョンへのトランスファー)を行いました。また当時AWS CLIなどAPIでの実行方法についても調査してみたのですが、CloudTrailからTransferInputDeviceというイベントを確認するものの、実際の実行方法についてはドキュメントなどに記載がなく、確認することができませんでした。

それから2ヶ月ほど経ち、改めてAWS CLIのドキュメントなどを確認したところ、このLinkデバイスのリージョントランスファー機能についてもAPIでサポートされていることが確認できしまた。ということで本エントリではAWS CLIを用いてLinkデバイスの別リージョンへのトランスファー(転送)を行ってみたのでまとめてみたいと思います。

なお、改めてLinkデバイスのトランスファー機能についておさらいしておきますと、まずは本エントリでも扱っているリージョンのトランスファー(転送)機能があります。Linkデバイスを使用するリージョンを切り替える機能ですね。こちらはAWSマネジメントコンソールでの操作を冒頭に示したエントリにてまとめています。そしてもう1つのトランスファーとして、アカウントトランスファー(転送)機能があります。こちらはLinkデバイスを使用するAWSアカウントを変更する機能で、購入した際とは別のAWSアカウントで利用する場合にはこちらのアカウントトランスファーを利用します。アカウントトランスファーについては以下エントリをご参照ください。

TransferInputDevice APIのアップデートについて

AWS CLIでのLinkデバイスのリージョントランスファーを行う前に、これを実行するAPIのアップデートまわりについて確認しておきましょう。冒頭でも記しましたが、2ヶ月ほど前にAWSマネジメントコンソールからリージョントランスファー機能を確認した際には、APIでのリージョントランスファーは未サポートのようでした。この点についてざっと振り返っておきます。冒頭に示したこちらのエントリの「リージョントランスファーのAPIなどでの実行方法は?」の項目もあわせてご確認ください。

当時確認したAWS CLIのドキュメント、バージョンは2.1.21でした。そして現在latestとして確認できるのは2.1.32です。この2.1.32版のmedialive transfer-input-deviceを確認すると、--target-regionというオプションがあり、「The target AWS region to transfer the device.」と説明があります。

AWS CLIのバージョンについてもう少し詳しく確認してみると、バージョン2.1.29のtransfer-input-deviceには--target-regionオプションはなく、バージョン2.1.30から追加されていることがわかります。

AWS API Changesについても確認してみましょう。AWS Elemental MediaLiveのAPI、2021/03/05付けで「Medialive now supports the ability to transfer AWS Elemental Link devices to another region.」という情報があります。3月上旬にAPIの更新、ならびにAWS CLIへの追加があった、ということになりますね。

LinkデバイスのリージョントランスファーをAWS CLIでやってみた

APIのアップデート情報についても確認できました。それでは本題の、LinkデバイスのリージョントランスファーをAWS CLIで実際に行ってみたいと思います。使用するAWS CLIのコマンドはaws medialivetransfer-input-deviceです。アカウントトランスファーと同じコマンドですね。ただし、実行時のオプションが異なります。アカウントトランスファーでは--target-customer-idを指定しましたが、リージョントランスファーでは--target-regionを使用します。またアカウントトランスファーの場合は転送先のAWSアカウントでの承認操作が必要でしたが(accept-input-device-transfer)、リージョントランスファーについては承認操作などは必要ありません。

AWS CLIについてはv2の現時点での最新版を使用しました。具体的には以下の環境となります。

% aws --version
aws-cli/2.1.32 Python/3.8.8 Darwin/19.6.0 exe/x86_64 prompt/off

リージョントランスファーについて、今回は東京リージョン(Tokyo/ap-northeast-1)にあるLinkデバイスを、バージニアリージョン(N. Virginia/us-east-1)へ転送してみます。

まずは転送前の状態をAWSマネジメントコンソールから確認しておきましょう。以下が東京リージョンで、1つのLinkデバイスが確認できますね。

続いてバージニアリージョンです。こちらはトランスファー前はデバイスが存在しない状態です。

AWS CLIでもlist-input-devicesコマンドで確認してみます。まずは東京リージョンです。

% aws medialive list-input-devices --region ap-northeast-1
{
    "InputDevices": [
        {
            "Arn": "arn:aws:medialive:ap-northeast-1:123456789012:inputDevice:hd-XXXXXXXXXXXXXXXXXXXXc0z8",
            "ConnectionState": "CONNECTED",
            "DeviceSettingsSyncState": "SYNCED",
            "DeviceUpdateStatus": "UP_TO_DATE",
            "HdDeviceSettings": {
                "ActiveInput": "HDMI",
                "ConfiguredInput": "AUTO",
                "DeviceState": "IDLE",
                "Framerate": "60.0",
                "Height": 1080,
                "MaxBitrate": 9000000,
                "ScanType": "PROGRESSIVE",
                "Width": 1920
            },
            "Id": "hd-XXXXXXXXXXXXXXXXXXXXc0z8",
            "MacAddress": "XX:XX:XX:XX:XX:XX",
            "Name": "Elemental Link",
            "NetworkSettings": {
                "DnsAddresses": [
                    "0.0.0.0"
                ],
                "Gateway": "192.168.X.1",
                "IpAddress": "192.168.X.X",
                "IpScheme": "DHCP",
                "SubnetMask": "255.255.255.0"
            },
            "SerialNumber": "XXXXXXXXXXXX",
            "Type": "HD"
        }
    ]
}

続いてバージニアリージョンです。Linkデバイスが存在していないので、具体的なデバイスの情報はありません。

% aws medialive list-input-devices --region us-east-1
{
    "InputDevices": []
}

それでは実際にリージョントランスファーをAWS CLIで行っていみます。transfer-input-deviceコマンドを以下のように実行します。--input-device-idにはリージョントランスファー対象となるLinkデバイスのID(hd-ではじまるもの)を指定します。--target-regionではトランスファー先のリージョンを指定します。今回はバージニアリージョンですので、us-east-1を指定しています。続いて--regionオプションです、トランスファー前のLinkデバイスが存在するリージョンを指定します。こちらは何も指定しなければ~/.aws/configなど設定ファイル中で指定されたリージョンが利用されます。私もデフォルトでap-northeast-1を設定してるので省略しても良いのですが、今回は作業中にリージョンを意識する、ということで実行時に指定することにしました。

aws medialive transfer-input-device \
  --input-device-id <LinkデバイスのID> \
  --target-region <転送先リージョン> \
  --region <転送元リージョン>

実際に実行してみます。

% aws medialive transfer-input-device \
    --input-device-id hd-XXXXXXXXXXXXXXXXXXXXc0z8 \
    --target-region us-east-1 \
    --region ap-northeast-1

返り値は特にありません。実行したらlist-input-devicesコマンドでデバイスの状況を確認してみましょう。transfer-input-deviceコマンド実行直後は、どちらのリージョンにもデバイスが存在しない状態が一瞬確認できました。

% aws medialive list-input-devices --region ap-northeast-1
{
    "InputDevices": []
}
% aws medialive list-input-devices --region us-east-1
{
    "InputDevices": []
}

1分ほど待機して、再度list-input-devicesを実行してみます。無事にLinkデバイスがバージニアリージョンに転送されていました。東京リージョンからは当然ながらLinkデバイスはなくなっています。

% aws medialive list-input-devices --region ap-northeast-1
{
    "InputDevices": []
}
% aws medialive list-input-devices --region us-east-1
{
    "InputDevices": [
        {
            "Arn": "arn:aws:medialive:us-east-1:123456789012:inputDevice:hd-XXXXXXXXXXXXXXXXXXXXc0z8",
            "ConnectionState": "CONNECTED",
            "DeviceSettingsSyncState": "SYNCED",
            "DeviceUpdateStatus": "UP_TO_DATE",
            "HdDeviceSettings": {
                "ActiveInput": "HDMI",
                "ConfiguredInput": "AUTO",
                "DeviceState": "IDLE",
                "Framerate": "60.0",
                "Height": 1080,
                "MaxBitrate": 9000000,
                "ScanType": "PROGRESSIVE",
                "Width": 1920
            },
            "Id": "hd-XXXXXXXXXXXXXXXXXXXXc0z8",
            "MacAddress": "XX:XX:XX:XX:XX:XX",
            "Name": "Elemental Link",
            "NetworkSettings": {
                "DnsAddresses": [
                    "0.0.0.0"
                ],
                "Gateway": "192.168.X.1",
                "IpAddress": "192.168.X.X",
                "IpScheme": "DHCP",
                "SubnetMask": "255.255.255.0"
            },
            "SerialNumber": "XXXXXXXXXXXX",
            "Type": "HD"
        }
    ]
}

マネジメントコンソールからも確認してみましょう。東京リージョンではLinkデバイスがなくなっています。

そして転送先であるバージニアリージョンで、Linkデバイスが確認できます。

まとめ

AWS Elemental LinkのリージョントランスファーをAWS CLIを使ってやってみました。アカウントトランスファーと同じくtransfer-input-deviceコマンドを使いますが、使用するオプションが異なります。またアカウントトランスファーのように別コマンドでの承認作業などは不要です。

Linkデバイスのトランスファーまわりについてざっと振り返ってみると、まずアカウントトランスファー機能がリリースされました。この際はマネジメントコンソールならびにAWS CLI両方での操作が確認できました。その後、リージョントランスファー機能がリリースされたわけですが、マネジメントコンソールからのみの操作で、AWS CLIなどAPIでのサポートが確認できず、おやっ!?と個人的には思っておりました。しかしこのたび、晴れてリージョントランスファーについてもAPIでの実行がサポートされ、嬉しい限りです。