Amazon Lightsailでros-desktop-vncを起動する方法

2020年11月13日にAmazonが公開したブログでLightsail Containersの紹介がありました。
これを使ってtiryoh/ros-desktop-vncを起動してみたので紹介します。

Lightsail Containers: An Easy Way to Run your Containers in the Cloud | Amazon Web Services
When I am delivering an introduction to the AWS Cloud for developers, I usually spend a bit of time to mention and to demonstrate Amazon Lightsail. It is by far...

雑に書くと、Docker Hub等に公開されているイメージをLightsailから直接起動できるというものです。

ros-desktop-vncについては以下の記事に経緯と使い方を書いているので参考にしてみてください。

ROS/ROS2のGUIをWebブラウザ経由でお手軽に試せるDockerfileを公開しました
ROS/ROS2のGUIをWebブラウザ経由でお手軽に試せるDockerfileとDockerイメージを公開しています。その特徴と使用方法を紹介します。今回紹介するのはUbuntu Desktop(LXDE)VNCサーバW...

このDockerfileでビルドできるイメージを使うことで、基本的なROSパッケージ以外は入っていない環境を、使い捨て感覚で簡単に起動できます。
GitHubにてDockerfileを公開していて、DockerイメージもついでにDocker HubにPushしています[1]tiryoh/ros-desktop-vnc, tiryoh/ros2-desktop-vncが、あくまでDockerfileの公開がメインです。
イメージの更新が止まっている等ありましたら、皆さん各自でビルドしてDocker HubGitHub Container RegistryにPushして利用してみてください。

また、AWSはROSやGazeboに特化したRobomakerというサービスも展開しています。
データをきちんととっておきたいような用途ではRobomakerを使うのがよいと思います。

AWS RoboMaker(ロボット工学アプリケーションの開発、テスト、デプロイ)| AWS
AWS RoboMaker – スマートロボットの容易な構築、デプロイ、管理を可能にするクラウドロボット工学サービス。

注意事項

料金について

AWSは無料枠もありますが、基本的には有料サービスです。

料金 - Amazon Lightsail | AWS

今回紹介する方法だと1時間単位での課金となりますが、フルで使うと10 USD/月かかります。

安全面について

また、今回紹介する方法はセキュリティに対する配慮はありません。
常に起動しておくような使い方は控えてください。

データについて

データはコンテナ再起動時に削除されます。

使い方

Lightsailで「コンテナサービスを作成」を選択します。

コンテナサービスの場所はどこでもよいと思います。今回は日本であるap-northeast-1を選択しました。
パワーはMicro、規模はx1を選びます。

コンテナ名はわかりやすいものをつけます。今回は「ros-desktop-vnc-melodic」としました。
イメージはDockerfileでFROMに指定するものを設定します。今回はROS Melodicを試そうと思ったのでtiryoh/ros-desktop-vnc:melodicとしました。ROS 2 Foxyであればtiryoh/ros2-desktop-vnc:foxyになると思います。
起動コマンドは/startup.shとします。
環境変数はHTTP_PASSWORDを設定します。ここで設定した文字列でVNCクライアントにアクセスします。
開くポートは80を指定します。

パブリックエンドポイントには先ほどコンテナ名につけたものを指定します。

サービス名を適当に付け、料金確認後に「コンテナサービスを作成」をクリックします。

ステータス保留中のまま数分待ちます。

ステータスが実行中になったらPublic domainのURLをクリックします。

BASIC認証のあるページが起動するのでここでユーザ名「ubuntu」とパスワードを指定します。
ここのパスワードは環境変数はHTTP_PASSWORDを設定したものです。

問題なければデスクトップが起動します。

BASIC認証が設定されてはいるものの、セキュリティに対する配慮は特にないので、使い終わったら「削除」しておきましょう。
1時間単位で請求金額が決まるので、使い終わったら即削除しておいた方が金銭的にお得です。

便利な使い方

APTパッケージをAWS内のサーバからダウンロードする

APTのパッケージリストをAWS内のサーバから取得するように変更することでAWS内のサーバからパッケージをダウンロードできるようになります。
この変更をすることでパッケージのダウンロード速度が速くなるだけでなく、コンテナ内でのapt installがAWS内の通信となり、通信量にカウントされないと思います(未確認)。

sudo sed -i -e "s#mirror://mirrors\.ubuntu\.com/mirrors\.txt#http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/#g" /etc/apt/sources.list

ウィンドウをリサイズする

初回に解像度の低い画面や小さいウィンドウでブラウザを開くと、以後、以下のようにデスクトップのサイズが小さい状態になります。

$URL/resizeにアクセスし、リロードするとデスクトップの解像度を変更できます[2]こちらのissueコメントに詳細があります。
https://github.com/fcwu/docker-ubuntu-vnc-desktop/issues/115#issuecomment-522426037

まとめ

AWSのLightsailでDockerイメージを直接起動できるということだったので、Ubuntu Desktop(LXDE)+VNCサーバ+Webブラウザから使用するVNCクライアント+WEBサーバ+ROS/ROS2がインストールされている、tiryoh/ros-desktop-vncを使ってみました。
このDockerfileから作れるイメージはあくまで使い捨て用途のテスト環境です。とりあえず複数のROSディストリビューションでテストしてみたいというような用途で使えるかなと思います。

コメント