AWSDeepRacer Vehicle をハイブリッドインスタンスにしてリモートから~遊~操作してみた
AWSDeepRacer 車両 って単体だとカメラが付いた賢いラジコンです。 (※なんとなく、AWSDeepRacer Vehicle の方がかっこいいんですが、AWSDeepRacer 車両 または車両で呼称します。)
ローカルのWifiネットワークに接続するように設定して、HTTPSでブラウザから車両に接続して、操作します。
AWSDeepRacer 車両のOSはUbuntuです。
ん?
感のいい人はお気づきだと思いますがAWSにはオンプレミスのインスタンスをハイブリッドインスタンスとして管理できるサービス AWS Systems Manager があります。
AWS Systems Manager
ということで、AWS Systems Manager の機能(ポートフォワード)を使用して、DeepRacer車両の操作コンソールにアクセスしてみます!
図にすると以下のようになります
構成図
やってみた
AWS DeepRacer 車両設定
Wifi 接続設定
まずは、ローカルのWifiに接続します。
公式ドキュメントでは車両とPCをUSB-C ケーブルで接続するような案内があるのですが、ケーブル無しでWifiをセットアップできます。(以前はこの方法が基本だったと思うのですが更新されたようです)
公式ドキュメントに沿う場合は以下をご参考ください
https://docs.aws.amazon.com/ja_jp/deepracer/latest/developerguide/deepracer-set-up-vehicle.html
USBメモリーを準備して、以下のwifi-creds.txtファイルをドライブ直下に保存します。
ファイル名:wifi-creds.txt
ssid: ローカルのWifiのSSIDを入力します。必要に応じて(空白などが含まれる場合)シングルクォーテーションで囲んでください
password: Wifi パスワードを入力します。
################################################################################### # AWS DeepRacer # # File name: wifi-creds.txt # # # # ... # ################################################################################### # Provide your SSID and password below ssid: local-wifi-hoge password: hogefuga
USBを AWSDeepRacer 車両 に挿入して、電源をいれます
車両の LED インジケータ(右側)が オフ → ブルー点滅 → ブルー点灯
となればWifi 接続は完了です。
参考 AWS DeepRacer 車両の LED インジケータ
https://docs.aws.amazon.com/ja_jp/deepracer/latest/developerguide/deepracer-vehicle-led-indicators.html#deepracer-vehicle-led-indicators-system
USBメモリーを車両から外して、USBメモリーを確認するとdevice-status.txtができていますので
中身を確認してください。
Hostname: amss-xxxx Timestamp: 06/11/22 01:38:02 Connected to WiFi network: local-wifi-hoge Active connections: usb0: 10.0.0.1 usb1: 10.0.1.1 mlan0: 192.168.XXX.XXX
Hostname : 車両のIDです。車両底面に書かれているものと同じです
usb0, usb1: USB経由でアクセスする際のアドレスです。
mlan0: Wifiで取得したIPになります
IPアドレス(mlan0の値)が記載されているのでそちらの同じWifiネットワークよりブラウザからIPアドレスにアクセスしてみてください。
https://IPアドレス
パスワードは車両の底面に記載されています
パスワードを入力しログインします。
AWS DeepRacer 車両のSSHの有効化
車両のコンソールにログインしたあと左のメニューからSettingsを選択します
Device SSH の項目から Editを選択します
Enabledを選択します
続いて接続する際のパスワードの設定を実施してください。
SSH接続
以下の設定でSSH接続を行います。
IPアドレス: Wifi 接続設定で取得したIP
username : deepracer
password: 車両のSSHの有効化で設定したパスワード
正常にSSHでログインできると以下のようなログが表示されるかと思います。
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 4.15.0-1005-deeplens x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage * Introducing self-healing high availability clusters in MicroK8s. Simple, hardened, Kubernetes for production, from RaspberryPi to DC. https://microk8s.io/high-availability 294 updates can be installed immediately. 121 of these updates are security updates. To see these additional updates run: apt list --upgradable Your Hardware Enablement Stack (HWE) is supported until April 2025. The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. deepracer@amss-xxxx:~$
ここまでくれば、あとは通常のUbuntu インスタンスと同じ手順となるます。
AWS Systems Manager でハイブリットインスタンスに設定する
AWSコンソールにログインします。
CloudFormationを使ってSystems Managerのアクティベーションを一撃で準備をしてしまいましょう
詳しくはこちらのエントリーをご参考ください
Systems Manager のアクティベーションコード、またアクティベーションIDが取得できたらDeepRacer 車両に接続し以下のコマンドを実行します。
Ubuntu でSnapを使用してSSMエージェントをインストールする手順になります
sudo snap install amazon-ssm-agent --classic sudo systemctl stop snap.amazon-ssm-agent.amazon-ssm-agent.service sudo /snap/amazon-ssm-agent/current/amazon-ssm-agent -register -code "activation-code" -id "activation-id" -region "region" sudo systemctl start snap.amazon-ssm-agent.amazon-ssm-agent.service
実行履歴
$ sudo snap install amazon-ssm-agent --classic $ amazon-ssm-agent 3.1.1188.0 from Amazon Web Services (aws✓) installed $ sudo /snap/amazon-ssm-agent/current/amazon-ssm-agent -register -code "hoge" -id "fuga" -region "ap-northeast-1" Error occurred fetching the seelog config file path: open /etc/amazon/ssm/seelog.xml: no such file or directory Initializing new seelog logger New Seelog Logger Creation Complete 2022-06-12 03:11:46 WARN Error adding the directory '/etc/amazon/ssm' to watcher: no such file or directory 2022-06-12 03:11:47 WARN Could not read InstanceFingerprint file: InstanceFingerprint does not exist. 2022-06-12 03:11:47 INFO No initial fingerprint detected, generating fingerprint file... 2022-06-12 03:11:47 INFO Successfully registered the instance with AWS SSM using Managed instance-id: mi-xxxxxxxx
フリートマネージャーのコンソールでマネージドインスタンスとして登録されているか確認してください
この段階でSSMのセッションマネージャーからセッション接続ができますので、車両側のSSHは無効にしても問題ありません
フリートマネージャー 経由で接続する
フリートマネージャー経由で、DeepRacer 車両のコンソールに接続してみます
高度なインスタンス枠に設定する
HTTPSの転送を行うにはセッションマネージャーを使用する必要があります。
また、ハイブリッドインスタンスを操作するにはスタンダード枠から、高度なインスタンス枠に変更をする必要があります。
フリートマネージャーの設定よりアカウント設定の変更をクリックします
高度なインスタンスに変更します。
※高度なインスタンス枠を使用する場合は、使用時間毎に従量課金がかかりますので、ご注意ください。
高度なインスタンス枠を使用するようにできたら、いちどDeepRacer 車両のコンソールにアクセスしてみます。
対象のインスタンスを選択し、ノードアクションよりターミナルセッションを開始するを選択してください。
セッションに接続できれば、設定登録、ネットワーク環境のセットアップなどは正常に行えているかと思います。
AWS Systems Manager フリートマネージャー でポートフォワードを行う
車両のHTTPS(443)をローカルのマシンの10443にポートフォワードします。
targetのmi-xxxxxxxx の部分を実際のハイブリッドインスタンスのIDに変更してください
Linux等
aws ssm start-session --target mi-xxxxxxxx \ --document-name AWS-StartPortForwardingSession \ --parameters '{"portNumber":["443"],"localPortNumber":["10443"]}'
Windows コマンドプロンプト
aws ssm start-session --target mi-xxxxxxx \ --document-name AWS-StartPortForwardingSession \ --parameters "{\"portNumber\":[\"443\"],\"localPortNumber\":[\"10443\"]}"
実行結果
Starting session with SessionId: botocore-session-xxxx-xxxx Port 10443 opened for sessionId botocore-session-xxxx-xxxx. Waiting for connections...
正常に実施できていれば、ブラウザ等でローカルポートに接続します
にアクセスしログインの画面が表示されると成功です!!!
まとめ
AWSのネットワークを経由して、AWSDeepRacer 車両のコンソールにアクセスするとができました。
正直実際に遊ぶ 操作するにはネットワーク経路など直接アクセスに比べるとレスポンスが悪いところがあります。
とはいえ、コースを用意する、車両を用意するのは場所の問題もあり結構大変なんですが、受け入れ側の準備ができてしまえば、基本的にはIAMの権限を払い出すだけでDeepRacer 車両でリモートで遊べちゃう未来が見えた気がします。
参考
https://dev.classmethod.jp/articles/ssm-session-manage-port-forwarding/