AWS RoboMaker 互換コンテナ要件 - AWS RoboMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS RoboMaker 互換コンテナ要件

AWS RoboMaker 互換コンテナ (コンテナイメージ)の実行とシミュレーションの正常な開始に関して、一連の要件を満たす必要があります。これらの要件を満たしていても、シミュレーションの実行に問題がある場合は、「シミュレーションジョブ」および「Simulation WorldForge」を参照してください。

コンテナイメージでは Dockerfile にある VOLUME は使用できません。VOLUME が Dockerfileに入っている場合、4XX エラーコードが出てシミュレーションが失敗します

コンテナイメージでは Dockerfile にある EXPOSE は使用できません。EXPOSE が Dockerfile に入っている場合、AWS RoboMaker は 4XX エラーコードが出てシミュレーションが失敗します。

コンテナイメージのサイズは、圧縮後で 20 GB 以下でなければなりません。コンテナイメージの未圧縮サイズが 20 GB より大きい場合、AWS RoboMaker は 4XX エラーコードが出てシミュレーションが失敗します。

Dockerfile 内にある CMD は指定できません。指定すると、AWS RoboMaker によってパッケージ名と起動ファイルでそれがオーバーライドされます。代わりに、各シミュレーションアプリケーションまたはロボットアプリケーションの launchConfigcommand パラメータを CreateSimulationJob リクエスト内で使用して、起動コマンドのリストを提供することができます。これは、シミュレーションジョブで CMD として設定されます。例: command["/bin/bash", "-c", "sleep 365d"] です。

シミュレーションジョブにツールを追加する場合は、コンテナイメージに bash をインストールする必要があります。ツールは ["/bin/bash", "-c", "<command>"] で起動します。

コンテナが ROS を実行していて、ロボットアプリケーションとシミュレーションアプリケーション間の通信が必要な場合は、以下のロボットフレームワークを設定する必要があります。

  • ROS Master

  • Gazebo Master

  • ROS IP

コンテナ内の /etc/resolv.conf ファイルはカスタマイズできません。AWS RoboMaker は独自のファイルでファイルを上書きします。

AWS で Dockerfile を実行している場合、イメージをマウントすることはできません。Dockerfile 内の Mount を指定した場合、AWS RoboMaker は 4XX エラーコードが出てシミュレーションが失敗します。

デフォルトの Docker seccomp プロファイルによってブロックされているシステムコールは、コンテナイメージによって使用されません。ブロックされたシステムコールについては、「Seccomp セキュリティプロファイル」を参照してください。

イメージを実行するユーザーを指定するために、Dockerfile の USER キーワードを指定することができます。ユーザーを指定しない場合、AWS RoboMaker によってコンテナ内のルートユーザーが使用されます。

コンテナイメージにおいて、USER を名前または UID:GID のいずれかとして指定できます。コンテナイメージに UID がない場合、デフォルト値 1000 が使用されます。

コンテナイメージによって /opt/amazon/robomaker やそのサブフォルダにデータを保存することはできません。AWS RoboMaker のみがそのディレクトリを使用できます。そのディレクトリを使用すると、シミュレーションが正しく動作しない可能性があります。

以下のランタイム設定はサポートされていません。

Docker の実行引数 Description
1 -\-add-host カスタムのホスト IP 間マッピング (host: ip) を追加する
2 -\-attach , -a STDIN、STDOUT または STDERR にアタッチする
3 -\-blkio-weight IO (相対重み) を 10~1000 でブロックするか、または 0 で無効にする (デフォルトは 0)
4 -\-blkio-weight-devi ce IO 重量 (相対デバイス重量) をブロックする
5 -\-cap-add Linux 機能を追加する
6 -\-cap-drop Linux 機能をドロップする
7 -\-cgroup-parent コンテナのオプションの親 cgroup
8 -\-cgroupns API 1.41+ <https://docs.d ocker.com/engine/api/ v1.41/>__Cgroup 名前空間。(ホスト|プライベート) 'host' を使用する: Docker ホストの cgroup 名前空間 'private' でコンテナを実行する: コンテナを独自のプライベート cgroup 名前空間で実行する: デーモンでデフォルトの cgroupns モードオプションにより設定された cgroup 名前空間を使用する (デフォルト)
9 -\-cidfile コンテナ ID をファイルに書き込む
10 -\-cpu-count CPU カウント (Windows のみ)
11 -\-cpu-percent CPU パーセント (Windows のみ)
12 -\-cpu-period CPU CFS (完全公平スケジューラ) 期間を制限する
13 -\-cpu-quota CPU CFS (完全公平スケジューラ) クォータを制限する
14 -\-cpu-rt-period API 1.25+ <https://docs.d ocker.com/engine/api/ v1.25/>__CPU リアルタイム期間 (マイクロ秒) を制限する
15 -\-cpu-rt-runtime API 1.25+ <https://docs.d ocker.com/engine/api/ v1.25/>__CPU リアルタイムランタイム (マイクロ秒) を制限する
16 -\-cpu-shares , -c CPU シェア (相対重み)
17 -\-cpus API 1.25+ <https://docs.d ocker.com/engine/api/ v1.25/>__CPU の数
18 -\-cpuset-cpus 実行を許可する CPU (0-3, 0,1)
19 -\-cpuset-mems 実行を許可する MEM (0-3, 0,1)
20 -\-detach , -d コンテナをバックグラウンドで実行し、コンテナ ID を印刷する
21 -\-detach-keys コンテナをデタッチするためのキーシーケンスをオーバーライドする
22 -\-device コンテナにホストデバイスを追加する
23 -\-device-cgroup-rul e cgroup 許可デバイスリストにルールを追加する
24 -\-device-read-bps デバイスからの読み取りレート (バイト/秒) を制限する
25 -\-device-read-iops デバイスからの読み取りレート (IO/秒) を制限する
26 -\-device-write-bps デバイスへの書き込みレート (バイト/秒) を制限する
27 -\-device-write-iops デバイスへの書き込みレート (IO /秒) を制限する
28 -\-disable-content-t rust イメージの検証をスキップする
29 -\-dns カスタム DNS サーバーを設定する
30 -\-dns-opt DNS オプションを設定する
31 -\-dns-option DNS オプションを設定する
32 -\-dns-search カスタム DNS 検索ドメインを設定する
33 -\-domainname コンテナ NIS ドメイン名
34 -\-gpus API 1.40+ <https://docs.d ocker.com/engine/api/ v1.40/>__GPU デバイス。コンテナに追加する ('all' はすべての GPU を渡す)
35 -\-group-add 参加させるグループを追加する
36 -\-health-cmd ヘルスチェックに対する実行コマンド
37 -\-health-interval チェックの実行間隔 (msm|h) (デフォルトは 0)
38 -\-health-retries 不健全性報告を要する連続失敗
39 -\-health-start-peri od API 1.29+ <https://docs.d ocker.com/engine/api/ v1.29/>__ヘルスチェック再試行のカウントダウンを開始する前にコンテナを初期化するための開始期間 (デフォルトは 0)
40 -\-health-timeout 1 回のチェックを実行できる最大時間 (msm|h) (デフォルトは 0)
41 -\-help 使用状況を印刷する
42 -\-hostname , -h コンテナホスト名
43 -\-init API 1.25+ <https://docs.d ocker.com/engine/api/ v1.25/>__コンテナ内で初期化を実行して信号を転送しプロセスを取得する
44 -\-interactive , -i STDIN をアタッチしていない場合も開いたままにしておく
45 -\-io-maxbandwidth システムドライブの IO 帯域幅上限 (Windows のみ)
46 -\-io-maxiops システムドライブの上限 IOps 制限 (Windows のみ)
47 -\-ip IPv4 アドレス (172.30.100.104 など)
48 -\-ip6 IPv6 アドレス (2001:db8::33 など)
49 -\-ipc 使用する IPC モード
50 -\-isolation コンテナ分離技術
51 -\-kernel-memory カーネルメモリ限界
52 -\-label , -l コンテナにメタデータを設定する
53 -\-label-file ラベルの行区切りファイルを読み込む
54 -\-link 別のコンテナにリンクを追加する
55 -\-link-local-ip コンテナ IPv4/IPv6 リンクローカルアドレス
56 -\-log-driver コンテナのロギングドライバー
57 -\-log-opt ログドライバーのオプション
58 -\-mac-address コンテナ MAC アドレス (92:d0:c6:0a:29:33 など)
59 -\-memory , -m メモリ制限
60 -\-memory-reservation メモリソフト制限
61 -\-memory-swap メモリとスワップ: '-1' の和に等しいスワップ制限で、無制限スワップを有効にする
62 -\-memory-swappiness コンテナメモリのスワップを調整する (0~100)
63 -\-name コンテナに名前を割り当てる
64 -\-net コンテナをネットワークに接続する
65 -\-net-alias コンテナのネットワークスコープエイリアスを追加する
66 -\-network コンテナをネットワークに接続する
67 -\-network-alias コンテナのネットワークスコープエイリアスを追加する
68 -\-no-healthcheck コンテナ指定のヘルスチェックを無効にする
69 -\-oom-kill-disable OOM Killer を無効にする
70 -\-oom-score-adj ホストの OOM プリファレンスを調整する (-1000~1000)
71 -\-pid 使用する PID 名前空間
72 -\-pids-limit コンテナ PID 制限を調整する (無制限の場合は -1 に設定)
73 -\-platform API 1.32+ <https://docs.d ocker.com/engine/api/ v1.32/>__サーバーがマルチプラットフォームに対応している場合にプラットフォームを設定する
74 -\-privileged このコンテナに拡張権限を付与する
75 -\-publish , -p コンテナのポートをホストに向けて発行する
76 -\-publish-all , -P 公開されたすべてのポートをランダムポートに向けて発行する
77 -\-pull 実行前にイメージをプルする (「always」(常時行う)「never」(決して行わない))
78 -\-read-only コンテナのルートファイルシステムを読み取り専用としてマウントする
79 -\-restart コンテナの終了時に適用するポリシーを再開始する
80 -\-rm コンテナの終了時にコンテナを自動的に削除する
81 -\-runtime このコンテナに使用するランタイム
82 -\-security-opt セキュリティオプション
83 -\-shm-size /dev/shm のサイズ
84 -\-sig-proxy プロセスへの信号を受信した
85 -\-stop-timeout API 1.25+ <https://docs.d ocker.com/engine/api/ v1.25/>__コンテナを停止させるタイムアウト (秒)
86 -\-storage-opt コンテナのストレージドライバーオプション
87 -\-sysctl Sysctl オプション
88 -\-tmpfs tmpfs ディレクトリをマウントする
89 -\-tty , -t 疑似 TTY を割り当てる
90 -\-ulimit Ulimit オプション
91 -\-userns 使用するユーザー名前空間
92 -\-uts 使用する UTS 名前空間
93 -\-volume , -v ボリュームをバインドマウントする
94 -\-volume-driver オプションのコンテナ用ボリュームドライバー
95 -\-volumes-from 指定したコンテナからボリュームをマウントする

前述のランタイム設定でシミュレーションジョブを実行すると、AWS RoboMaker で 4XX エラーコードが出てシミュレーションが失敗します。

コンテナイメージ:

  • Open Container Initiative (OCI) に対応している必要があります。

  • X86_64 アーキテクチャ向けに構築されている必要があります。別のアーキテクチャ用に構築されている場合、AWS RoboMaker で 4XX エラーコードが出てシミュレーションが失敗します。

  • 未圧縮サイズが 40 GB 以下である必要があります。コンテナイメージの未圧縮サイズが 40 GB より大きい場合、AWS RoboMaker で 4XX エラーコードが出てシミュレーションが失敗します。

  • スキーマバージョン 2 互換の V2 イメージマニフェストが必要です。

  • Linux をベースにしたベースイメージを使用する必要があります。Linux をベースにしたベースイメージを使用しない場合、AWS RoboMaker で 4XX エラーコードが出てシミュレーションが失敗します。

  • 相互に互換性のある開発環境とオペレーティングシステムを使用する必要があります。以下は、相互に互換性がある開発環境とオペレーティングシステムの組み合わせの例です。

    • ロボットオペレーティングシステム (ROS) Melodic — ubuntu: bionic

    • ロボットオペレーティングシステム (ROS) 2 Foxy — ubuntu: focal

    相互に互換性があるロボットフレームワークとオペレーティングシステムを組み合わせて使用しない場合、シミュレーションにおいて予期しない動作が発生する可能性があります。

コンテナイメージのバイナリ要件は次のとおりです。

GUI ストリーミングをサポートするには、次のバイナリをインストールしてソースとすることをお勧めします。

  • devilspie

コンテナイメージでは、実行可能ファイルに絶対パスを使用することをお勧めします。また、コンテナ内の実行可能ファイルの正常な実行も推奨されます。実行可能ファイルへのパスが見つからない場合は、シミュレーションが失敗します

コンテナイメージ:

  • アプリケーションで OpenGL を使用している場合は、glvnd をインストールする必要があります。

  • アプリケーションで CUDA を使用している場合は、NVIDIA CUDA 11.2 以下が必要です。

  • アプリケーションで OpenGL を使用している場合は、OpenGL バージョン 4.6 以下が必要です。

  • アプリケーションで Vulkan API を使用している場合は、Vulkan バージョン 1.2 以下が必要です。

  • アプリケーションで OpenGL を使用している場合は、OpenGL バージョン 1.2 以下が必要です。

注意

AWS RoboMaker はオフスクリーンレンダリングのみ Vulkan をサポートしており、GUI ディスプレイでは動作しません。したがって、Vulkan を使用している場合は streamUI を false に設定すべきです。

GPU イメージの作成方法の詳細については、「GPU アプリケーションを実行するためのイメージの作成」を参照してください。

コンテナイメージにはソーシング用のエントリポイントスクリプトが必要です。AWS RoboMaker がエントリポイントスクリプトを実行できるように、エントリポイントスクリプトの最終行として exec "${@:1}" が必要です。エントリポイントスクリプトを実行すると、roslaunch package-name コマンド、起動ファイルコマンドを使用してコンテナを実行できるようになります。

コンテナイメージでは Dockerfile にある VOLUME は使用できません。VOLUME が Dockerfileに入っている場合、4XX エラーコードが出てシミュレーションが失敗します

Dockerfile 内の EXPOSE キーワードは AWS RoboMaker によって無視されます。EXPOSE キーワードによって公開されているポートは、システムによって自動的に公開されません。シミュレーションでポートを公開したい場合は、AWS RoboMaker ポート転送設定を使用できます。

AWS RoboMaker は次の環境変数を使用します。AWS でシミュレーションを実行した場合、AWS RoboMaker により、次の環境変数に対して指定した値がすべて上書されます。

  • ROBOMAKER*

  • DCV_VIRTUAL_SESSION

  • XDG_SESSION_ID

  • DCV_SESSION_ID

  • XDG_SESSION_TYPE

  • XDG_RUNTIME_DIR

  • SHLVL

  • XAUTHORITY

Dockerfile 内にある CMD は指定できません。これを実行した場合、AWS RoboMaker はシミュレーション launchConfig のコマンドで上書きします。

コンテナが ROS を実行していて、ロボットアプリケーションとシミュレーションアプリケーション間の通信が必要な場合は、以下のロボットフレームワークを設定する必要があります。

  • ROS Master

  • Gazebo Master

  • ROS IP

コンテナ内の /etc/resolv.conf ファイルはカスタマイズできません。AWS RoboMaker は独自のファイルでファイルを上書きします。

AWS で Dockerfile を実行している場合、イメージをマウントすることはできません。Dockerfile 内の Mount を指定した場合、AWS RoboMaker は 4XX エラーコードが出てシミュレーションが失敗します。

デフォルトの Docker seccomp プロファイルによってブロックされているシステムコールは、コンテナイメージによって使用されません。ブロックされたシステムコールについては、「Seccomp セキュリティプロファイル」を参照してください。

イメージを実行するユーザーを指定するために、Dockerfile の USER キーワードを指定することができます。ユーザーを指定しない場合、AWS RoboMaker によってコンテナ内のルートユーザーが使用されます。

コンテナイメージにおいて、USER を名前または UID:GID のいずれかとして指定できます。コンテナイメージに UID がない場合、デフォルト値 1000 が使用されます。

コンテナイメージによって /opt/amazon/robomaker やそのサブフォルダにデータを保存することはできません。AWS RoboMaker のみがそのディレクトリを使用できます。そのディレクトリを使用すると、シミュレーションが正しく動作しない可能性があります。

以下のランタイム設定はサポートされていません。

Docker の実行引数 Description
1 --add-host カスタムのホスト IP 間マッピング (host: ip) を追加する
2 --attach , -a STDIN、STDOUT または STDERR にアタッチする
3 --blkio-weight IO (相対重み) を 10~1000 でブロックするか、または 0 で無効にする (デフォルトは 0)
4 --blkio-weight-devi ce IO 重量 (相対デバイス重量) をブロックする
5 --cap-add Linux 機能を追加する
6 --cap-drop Linux 機能をドロップする
7 --cgroup-parent コンテナのオプションの親 cgroup
8 --cgroupns API 1.41+ <https://docs.d ocker.com/engine/api/ v1.41/>__Cgroup 名前空間。(ホスト|プライベート) 'host' を使用する: Docker ホストの cgroup 名前空間 'private' でコンテナを実行する: コンテナを独自のプライベート cgroup 名前空間で実行する: デーモンでデフォルトの cgroupns モードオプションにより設定された cgroup 名前空間を使用する (デフォルト)
9 --cidfile コンテナ ID をファイルに書き込む
10 --cpu-count CPU カウント (Windows のみ)
11 --cpu-percent CPU パーセント (Windows のみ)
12 --cpu-period CPU CFS (完全公平スケジューラ) 期間を制限する
13 --cpu-quota CPU CFS (完全公平スケジューラ) クォータを制限する
14 --cpu-rt-period API 1.25+ <https://docs.d ocker.com/engine/api/ v1.25/>__CPU リアルタイム期間 (マイクロ秒) を制限する
15 --cpu-rt-runtime API 1.25+ <https://docs.d ocker.com/engine/api/ v1.25/>__CPU リアルタイムランタイム (マイクロ秒) を制限する
16 --cpu-shares , -c CPU シェア (相対重み)
17 --cpus API 1.25+ <https://docs.d ocker.com/engine/api/ v1.25/>__CPU の数
18 --cpuset-cpus 実行を許可する CPU (0-3, 0,1)
19 --cpuset-mems 実行を許可する MEM (0-3, 0,1)
20 --detach , -d コンテナをバックグラウンドで実行し、コンテナ ID を印刷する
21 --detach-keys コンテナをデタッチするためのキーシーケンスをオーバーライドする
22 --device コンテナにホストデバイスを追加する
23 --device-cgroup-rul e cgroup 許可デバイスリストにルールを追加する
24 --device-read-bps デバイスからの読み取りレート (バイト/秒) を制限する
25 --device-read-iops デバイスからの読み取りレート (IO/秒) を制限する
26 --device-write-bps デバイスへの書き込みレート (バイト/秒) を制限する
27 --device-write-iops デバイスへの書き込みレート (IO /秒) を制限する
28 --disable-content-t rust イメージの検証をスキップする
29 --dns カスタム DNS サーバーを設定する
30 --dns-opt DNS オプションを設定する
31 --dns-option DNS オプションを設定する
32 --dns-search カスタム DNS 検索ドメインを設定する
33 --domainname コンテナ NIS ドメイン名
34 --gpus API 1.40+ <https://docs.d ocker.com/engine/api/ v1.40/>__GPU デバイス。コンテナに追加する ('all' はすべての GPU を渡す)
35 --group-add 参加させるグループを追加する
36 --health-cmd ヘルスチェックのために実行する
37 --health-interval チェックの実行間隔 (msm|h) (デフォルトは 0)
38 --health-retries 不健全性報告を要する連続失敗
39 --health-start-peri od API 1.29+ <https://docs.d ocker.com/engine/api/ v1.29/>__ヘルスチェック再試行のカウントダウンを開始する前にコンテナを初期化するための開始期間 (デフォルトは 0)
40 --health-timeout 1 回のチェックを実行できる最大時間 (msm|h) (デフォルトは 0)
41 --help 使用状況を印刷する
42 --hostname , -h コンテナホスト名
43 --init API 1.25+ <https://docs.d ocker.com/engine/api/ v1.25/>__コンテナ内で初期化を実行して信号を転送しプロセスを取得する
44 --interactive , -i STDIN をアタッチしていない場合も開いたままにしておく
45 --io-maxbandwidth システムドライブの IO 帯域幅上限 (Windows のみ)
46 --io-maxiops システムドライブの上限 IOps 制限 (Windows のみ)
47 --ip IPv4 アドレス (172.30.100.104 など)
48 --ip6 IPv6 アドレス (2001:db8::33 など)
49 --ipc 使用する IPC モード
50 --isolation コンテナ分離技術
51 --kernel-memory カーネルメモリ限界
52 --label , -l コンテナにメタデータを設定する
53 --label-file ラベルの行区切りファイルを読み込む
54 --link 別のコンテナにリンクを追加する
55 --link-local-ip コンテナ IPv4/IPv6 リンクローカルアドレス
56 --log-driver コンテナのロギングドライバー
57 --log-opt ログドライバーのオプション
58 --mac-address コンテナ MAC アドレス (92:d0:c6:0a:29:33 など)
59 --memory , -m メモリ制限
60 --memory-reservation メモリソフト制限
61 --memory-swap メモリとスワップ: '-1' の和に等しいスワップ制限で、無制限スワップを有効にする
62 --memory-swappiness コンテナメモリのスワップを調整する (0~100)
63 --name コンテナに名前を割り当てる
64 --net コンテナをネットワークに接続する
65 --net-alias コンテナのネットワークスコープエイリアスを追加する
66 --network コンテナをネットワークに接続する
67 --network-alias コンテナのネットワークスコープエイリアスを追加する
68 --no-healthcheck コンテナ指定のヘルスチェックを無効にする
69 --oom-kill-disable OOM Killer を無効にする
70 --oom-score-adj ホストの OOM プリファレンスを調整する (-1000~1000)
71 --pid 使用する PID 名前空間
72 --pids-limit コンテナ PID 制限を調整する (無制限の場合は -1 に設定)
73 --platform API 1.32+ <https://docs.d ocker.com/engine/api/ v1.32/>__サーバーがマルチプラットフォームに対応している場合にプラットフォームを設定する
74 --privileged このコンテナに拡張権限を付与する
75 --publish , -p コンテナのポートをホストに向けて発行する
76 --publish-all , -P 公開されたすべてのポートをランダムポートに向けて発行する
77 --pull 実行前にイメージをプルする (「always」(常時行う)「never」(決して行わない))
78 --read-only コンテナのルートファイルシステムを読み取り専用としてマウントする
79 --restart コンテナの終了時に適用するポリシーを再開始する
80 --rm コンテナの終了時にコンテナを自動的に削除する
81 --runtime このコンテナに使用するランタイム
82 --security-opt セキュリティオプション
83 --shm-size /dev/shm のサイズ
84 --sig-proxy プロセスへの信号を受信した
85 --stop-timeout API 1.25+ <https://docs.d ocker.com/engine/api/ v1.25/>__コンテナを停止させるタイムアウト (秒)
86 --storage-opt コンテナのストレージドライバーオプション
87 --sysctl Sysctl オプション
88 --tmpfs tmpfs ディレクトリをマウントする
89 --tty , -t 疑似 TTY を割り当てる
90 --ulimit Ulimit オプション
91 --userns 使用するユーザー名前空間
92 --uts 使用する UTS 名前空間
93 --volume , -v ボリュームをバインドマウントする
94 --volume-driver オプションのコンテナ用ボリュームドライバー
95 --volumes-from 指定したコンテナからボリュームをマウントする

前述のランタイム設定でシミュレーションジョブを実行すると、AWS RoboMaker で 4XX エラーコードが出てシミュレーションが失敗します。