[UPDATE] AWS Elemental Linkでデバイスを別AWSアカウントへ転送(トランスファー)できるようになりました!

これまでは購入したAWSアカウントのMediaLiveに紐付けることしかでできなかったAWS Elemental Link、デバイスを別のAWSアカウントに転送(トランスファー)する機能がリリースされ、購入したのとは別のAWSアカウントのMediaLiveでも使えるようになりました!
2020.11.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

清水です。本日お届けするアップデートはこちら!AWS Elemental Linkでデバイスを別のAWSアカウントへ転送する(AWSアカウントとの紐付けを変更する)ことができるようになりました!(2020/11/11にポストされたアップデート情報のうちの1つを本エントリにて取り上げます。)

AWS Elemental MediaLive用のセットアップ済みライブエンコーダデバイスとして動作するAWS Elemental Link、これまではLinkを購入したAWSアカウントのMediaLive内のリソースとしてのみ利用することができました。購入したAWSアカウントとLinkデバイスが紐付いているイメージです。今回のアップデートにて、この購入時のAWSアカウントとの紐付けを解除し、別AWSアカウントへ紐付けることができるようになりました。操作名称としては"Transfer"、つまりデバイスの転送と表現されているようです。本エントリでは実際にこの機能を用いて、AWS Elemental Linkデバイスを購入時とは別のAWSアカウントに転送(トランスファー)してみたのでまとめてみます。

マネジメントコンソールからLinkデバイスを他のAWSアカウントに転送(トランスファー)してみた

では実際にマネジメントコンソールからLinkデバイスの転送を行ってみたいと思います。操作は転送元、転送先のAWSアカウントとも、オレゴンリージョン(us-west-2)で行いました。まずLinkデバイスを購入したAWSアカウントの確認です。(以降、こちらをアカウントAとします。)MediaLiveのDevicesの項目、2台のLinkデバイスが表示されています。

続いて、転送先となるAWSアカウントの確認です。(以降、こちらをアカウントBとします。)こちらはアカウントに紐付いているLinkデバイスはないので、何も表示されていない状態です。

実際にLinkデバイスの転送操作をしてみます。転送元となるアカウントAの、転送対象のLinkデバイス詳細画面、右上の[Transfer device]ボタンを押下します。

注意事項の表示と、Target account ID、Transfer messageの入力ボックスが現れます。注意事項について確認したあと、Target account IDに転送先となるAWSアカウント(アカウントB)のアカウントID12桁を入力します。Transfer messageにメッセージを入力、[Transfer]ボタンを押下します。

なお、Inputにアタッチした状態で転送しようとすると以下のようにエラーが出ました。アタッチしているInputを削除した状態で転送を行いましょう。

転送が無事に完了すると以下のメッセージが現れます。

メッセージの通り、Device Transfersの詳細画面で確認してみると、Outgoing transfersに転送したLinkデバイスがリストアップされていることがわかります。

では転送先のAWSアカウント(アカウントB)についても確認してみましょう。先ほどと同じくDevicesの項目のページには何も表示されていないのですが、[Device Transfers]ボタンにエクスクラメーションマーク!がついていることがわかります。

このボタンからInput device transfersの詳細ページに進むと、Incoming transfersの項目に先ほどアカウントAで転送操作をしたLinkデバイスが表示されています。

Linkデバイスを選択して、右上の[Accept]ボタンで転送の承認を行いましょう。

転送が承認された旨、表示されます。Devicesのリストに反映されるには少し時間がかかるとのことでしたが、私が確認した限りだと1、2分もすると以下のように、転送先AWSアカウント(アカウントB)のDevicesに表示されるようになりました。

AWS CLIからLinkデバイスを他のAWSアカウントに転送(トランスファー)してみた

このLinkデバイスの別アカウントへの転送操作、APIでの実行にももちろん対応しています。 *1今回はAWS CLIでLinkデバイスの転送操作を行ってみました。

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

% aws --version
aws-cli/2.1.4 Python/3.7.4 Darwin/19.6.0 exe/x86_64

aws medialiveのコマンドリファレンスを確認すると、transferとつくコマンドがいくつかありますね。

リストアップすると以下となります。

先ほどのマネジメントコンソールでの操作も鑑みて、転送元となるAWSアカウントでtransfer-input-deviceコマンドの実行、転送先となるAWSアカウントでaccept-input-device-transferという流れでできそうです。AWS CLIでの転送操作は、先ほどのAWSマネジメントコンソールでの操作とは逆に、アカウントBからアカウントAに転送する、という流れで行ってみたいと思います。(最終的に元の状態、アカウントAに2台のLinkデバイスが紐付いている状態にします。)

まずはアカウントAでaws medialive list-input-devicesコマンドを実行、現在アカウントAに紐付いているLinkデバイスを確認しておきます。

% aws medialive list-input-devices \
    --region us-west-2 --profile account.a
{
    "InputDevices": [
        {
            "Arn": "arn:aws:medialive:us-west-2:111111111111:inputDevice:hd-XXXXXXXXXXXXXXXXXXXXulzh",
            "ConnectionState": "DISCONNECTED",
            "DeviceSettingsSyncState": "SYNCED",
            "DeviceUpdateStatus": "NOT_UP_TO_DATE",
            "HdDeviceSettings": {
                "ConfiguredInput": "AUTO",
                "MaxBitrate": 9000000
            },
            "Id": "hd-XXXXXXXXXXXXXXXXXXXXulzh",
            "MacAddress": "XX:XX:XX:XX:XX:30",
            "Name": "Elemental Link",
            "NetworkSettings": {},
            "SerialNumber": "XXXXX35XXXXX",
            "Type": "HD"
        }
    ]
}

2台のうち、1台をアカウントBに転送したあとなので、残りの1台が表示されている状態ですね。続いてアカウントBの方でもaws medialive list-input-devicesコマンドを実行、現在紐付いているLinkデバイスを確認しておきます。

% aws medialive list-input-devices \
    --region us-west-2 --profile account.b
{
    "InputDevices": [
        {
            "Arn": "arn:aws:medialive:us-west-2:222222222222: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:2D",
            "Name": "Elemental Link",
            "NetworkSettings": {
                "DnsAddresses": [
                    "0.0.0.0"
                ],
                "Gateway": "192.168.1.1",
                "IpAddress": "192.168.1.28",
                "IpScheme": "DHCP",
                "SubnetMask": "255.255.255.0"
            },
            "SerialNumber": "XXXXX34XXXXX",
            "Type": "HD"
        }
    ]
}

こちらは、先ほどマネジメントコンソールから転送操作をした1台が表示されています。

では、アカウントBからアカウントAへの転送操作をAWS CLIで行ってみます。 aws medialive transfer-input-deviceコマンドを使用します。引数として、--input-device-idにデバイスID、--target-customer-idに転送先のAWSアカウントID、そして--transfer-messageに転送時のメッセージをそれぞれ入力しました。

% aws medialive transfer-input-device \
    --input-device-id hd-XXXXXXXXXXXXXXXXXXXXc0z8 \
    --target-customer-id 111111111111 \
    --transfer-message link-device-transfer-using-aws-cli \
    --region us-west-2 --profile account.b

返り値は特にありません。aws medialive list-input-device-transfersで状況を確認してみます。まずはアカウントBのほう、--transfer-typeオプションにOUTGOINGを指定して実行します。

% aws medialive list-input-device-transfers \
    --transfer-type OUTGOING \
    --region us-west-2 --profile account.b
{
    "InputDeviceTransfers": [
        {
            "Id": "hd-XXXXXXXXXXXXXXXXXXXXc0z8",
            "Message": "link-device-transfer-using-aws-cli",
            "TargetCustomerId": "111111111111",
            "TransferType": "OUTGOING"
        }
    ]
}

転送先アカウントで承認待ちの状態であることがわかります。アカウントAのほうでも、aws medialive list-input-device-transfersコマンドを、今度は--transfer-typeオプションにINCOMINGを指定して実行してみます。

% aws medialive list-input-device-transfers \
    --transfer-type INCOMING \
    --region us-west-2 --profile account.a
{
    "InputDeviceTransfers": [
        {
            "Id": "hd-XXXXXXXXXXXXXXXXXXXXc0z8",
            "Message": "link-device-transfer-using-aws-cli",
            "TransferType": "INCOMING"
        }
    ]
}

では、アカウントAで転送の承認を行います。aws medialive accept-input-device-transferコマンドに引数として--input-device-idでデバイスIDを指定します。

% aws medialive accept-input-device-transfer \
    --input-device-id hd-XXXXXXXXXXXXXXXXXXXXc0z8 \
    --region us-west-2 --profile account.a

このコマンドも返り値はありません。アカウントAに対してaws medialive list-input-devicesコマンドを実行して確認してみます。こちらもマネジメントコンソールの時の操作と同様、aws medialive accept-input-device-transferコマンド実行直後は反映されません。

% aws medialive list-input-devices \
    --region us-west-2 --profile account.a
{
    "InputDevices": [
        {
            "Arn": "arn:aws:medialive:us-west-2:111111111111:inputDevice:hd-XXXXXXXXXXXXXXXXXXXXulzh",
            "ConnectionState": "DISCONNECTED",
            "DeviceSettingsSyncState": "SYNCED",
            "DeviceUpdateStatus": "NOT_UP_TO_DATE",
            "HdDeviceSettings": {
                "ConfiguredInput": "AUTO",
                "MaxBitrate": 9000000
            },
            "Id": "hd-XXXXXXXXXXXXXXXXXXXXulzh",
            "MacAddress": "XX:XX:XX:XX:XX:30",
            "Name": "Elemental Link",
            "NetworkSettings": {},
            "SerialNumber": "XXXXX35XXXXX",
            "Type": "HD"
        }
    ]
}

1、2分待ってからaws medialive list-input-devicesコマンドを実行しましょう。以下のようにLinkデバイスが転送され、アカウントAに2台のLinkデバイスが紐付いている状態になっていることが確認できました。

% aws medialive list-input-devices \
    --region us-west-2 --profile account.a
{
    "InputDevices": [
        {
            "Arn": "arn:aws:medialive:us-west-2:111111111111:inputDevice:hd-XXXXXXXXXXXXXXXXXXXXulzh",
            "ConnectionState": "DISCONNECTED",
            "DeviceSettingsSyncState": "SYNCED",
            "DeviceUpdateStatus": "NOT_UP_TO_DATE",
            "HdDeviceSettings": {
                "ConfiguredInput": "AUTO",
                "MaxBitrate": 9000000
            },
            "Id": "hd-XXXXXXXXXXXXXXXXXXXXulzh",
            "MacAddress": "XX:XX:XX:XX:XX:30",
            "Name": "Elemental Link",
            "NetworkSettings": {},
            "SerialNumber": "XXXXX35XXXXX",
            "Type": "HD"
        },
        {
            "Arn": "arn:aws:medialive:us-west-2:111111111111: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:2D",
            "Name": "Elemental Link",
            "NetworkSettings": {
                "DnsAddresses": [
                    "0.0.0.0"
                ],
                "Gateway": "192.168.1.1",
                "IpAddress": "192.168.1.28",
                "IpScheme": "DHCP",
                "SubnetMask": "255.255.255.0"
            },
            "SerialNumber": "XXXXX34XXXXX",
            "Type": "HD"
        }
    ]
}

まとめ

AWS Elemental Linkの新機能、別AWSアカウントへのデバイスの転送(アカウントトランスファー)をAWSマネジメントコンソールとAWS CLIから確認してみました。AWSアカウント自体は本番や開発、そしてプロジェクトなどでわけてしまったほうが管理などはシンプルになるかと考えます。

対して、Linkデバイスを本番、開発、プロジェクトごとなどに用意することは費用コストなどの面からも難しいかなと思います。(正副、予備機などはあると良いかとは思いますが、AWSアカウントごとにわけてLinkデバイスを用意する、というのは難しいかなと。)今回のアップデートで別AWSアカウントで購入したLinkデバイスを転送することができるようになり、用途の違いによってAWSアカウントを分ける、ということも容易になったかと思います。非常に嬉ししいアップデートだなと思いました!

脚注

  1. 実はAPIのアップデート自体は2020/10/16付けであったようです。AWS API Changes