Armadilloフォーラム

複数のPythonで作成したソフトウェアをArmadilloで動かす際の注意事項について

takeshita_kyouhei

2025年1月15日 15時44分

Armadillo-IoT G4でPythonを使ったソフトウェアの開発を行っています

ソフトウェアを複数実行する想定なのですが、この際「1つのコンテナで複数のソフトウェアを同時起動」するのが良いのでしょうか?
→IoT HUBへのアクセスを伴うので、設定ファイルが共通のものになり複数のプログラムで共有できるなら効率が良い?

それとも、コンテナを複数作成してすべてArmadillo上で実行したほうが良いのでしょうか?
→この場合、VSCodeのABOSDEでPythonのプロジェクトを複数作成する?
 インストールで使う証明書はどのように共有する?
→Armadilloのディスク容量に問題がないか心配

上記、どのような手法で対応するほうが良いでしょうか?
メリット・デメリットや、参考とするドキュメント等ありましたら紹介いただけますと幸いです

コメント

at_satoshi.ohta

2025年1月15日 19時30分

太田です。

>  インストールで使う証明書はどのように共有する?
1点確認ですが、「インストールで使う証明書」とは具体的には何を指すのでしょうか?

> ソフトウェアを複数実行する想定なのですが、この際「1つのコンテナで複数のソフトウェアを同時起動」するのが良いのでしょうか?
1つのコンテナで複数のソフトウェアを動かす場合のメリットは以下が考えられるかと思います。

- プロジェクトが一つで済むのでコンテナおよびアプリケーションの開発、管理が楽である

VS Code の拡張機能であるABOSDEは1つのコンテナイメージに対して1つのコンテナを作成することを前提に実装されています。
そのため、この方法ならABOSDEの既存の機能で開発および管理がしやすいです。

- 複数のコンテナイメージを使用するよりは容量が小さい

ソフトウェア毎にコンテナイメージを作成してコンテナを立てる場合は、仰るとおりArmadilloの容量が大きくなります。
プロジェクトの数が多くなり管理が大変かと思いますが、その場合でもABOSDEで実現することは難しくはないと思います。

- クラウド側にデータを送信する方法を比較的楽に実装できる

複数のコンテナを使う場合、コンテナごとにクラウドに送信するか、
または複数のコンテナで取得したデータを1つのコンテナに集約して、まとめてクラウドにデータを送信するなどの方法が考えられます。
コンテナが1つであれば、上記のようなことを考えずに済むので実装は比較的楽になるかと思います。

デメリットととしては以下が考えられます。

- コンテナがなにかの影響で停止した場合に全てのアプリケーションが停止する

1つのコンテナで複数のアプリケーションを動かす場合、コンテナが何かしらの影響で停止した場合に全てのアプリケーションに対して影響が出ます。
アプリケーションごとにコンテナを作成するのであれば、あるコンテナが停止したとしても他のアプリケーションは影響を受けないで済みます。

- コンテナ毎にアプリケーションを管理できない

1つのコンテナで複数のアプリケーションを動かす場合、アプリケーション側で各アプリケーションの状態を把握するように実装する必要があります。
アプリケーションごとにコンテナ作成するのであれば、コンテナのhealthcheckの機能を使うなどして、アプリケーションが停止した際に他のアプリケーションに影響を与えずにコンテナを再起動するような実装ができます。

- ソフトウェア毎に複数のコンテナを動かすよりはセキュリティリスクが高い

1つのコンテナで複数のアプリケーションを動かすよりも、
アプリケーションごとにコンテナを立てる方が、万が一悪意のある攻撃をされた際にもセキュリティリスクは多少なりとも抑えられるのではないかと思います。

> 参考とするドキュメント参考とするドキュメント等ありましたら紹介いただけますと幸いです

申し訳ありません。参考になるドキュメントを見つけることはできませんでした。

ご期待に叶う回答では無いかもしれませんが、どうぞよろしくお願いいたします。

takeshita_kyouhei

2025年1月16日 10時16分

> 太田です。
>
> >  インストールで使う証明書はどのように共有する?
> 1点確認ですが、「インストールで使う証明書」とは具体的には何を指すのでしょうか?
>
> > ソフトウェアを複数実行する想定なのですが、この際「1つのコンテナで複数のソフトウェアを同時起動」するのが良いのでしょうか?
> 1つのコンテナで複数のソフトウェアを動かす場合のメリットは以下が考えられるかと思います。
>
> - プロジェクトが一つで済むのでコンテナおよびアプリケーションの開発、管理が楽である
>
> VS Code の拡張機能であるABOSDEは1つのコンテナイメージに対して1つのコンテナを作成することを前提に実装されています。
> そのため、この方法ならABOSDEの既存の機能で開発および管理がしやすいです。
>
> - 複数のコンテナイメージを使用するよりは容量が小さい
>
> ソフトウェア毎にコンテナイメージを作成してコンテナを立てる場合は、仰るとおりArmadilloの容量が大きくなります。
> プロジェクトの数が多くなり管理が大変かと思いますが、その場合でもABOSDEで実現することは難しくはないと思います。
>
> - クラウド側にデータを送信する方法を比較的楽に実装できる
>
> 複数のコンテナを使う場合、コンテナごとにクラウドに送信するか、
> または複数のコンテナで取得したデータを1つのコンテナに集約して、まとめてクラウドにデータを送信するなどの方法が考えられます。
> コンテナが1つであれば、上記のようなことを考えずに済むので実装は比較的楽になるかと思います。
>
> デメリットととしては以下が考えられます。
>
> - コンテナがなにかの影響で停止した場合に全てのアプリケーションが停止する
>
> 1つのコンテナで複数のアプリケーションを動かす場合、コンテナが何かしらの影響で停止した場合に全てのアプリケーションに対して影響が出ます。
> アプリケーションごとにコンテナを作成するのであれば、あるコンテナが停止したとしても他のアプリケーションは影響を受けないで済みます。
>
> - コンテナ毎にアプリケーションを管理できない
>
> 1つのコンテナで複数のアプリケーションを動かす場合、アプリケーション側で各アプリケーションの状態を把握するように実装する必要があります。
> アプリケーションごとにコンテナ作成するのであれば、コンテナのhealthcheckの機能を使うなどして、アプリケーションが停止した際に他のアプリケーションに影響を与えずにコンテナを再起動するような実装ができます。
>
> - ソフトウェア毎に複数のコンテナを動かすよりはセキュリティリスクが高い
>
> 1つのコンテナで複数のアプリケーションを動かすよりも、
> アプリケーションごとにコンテナを立てる方が、万が一悪意のある攻撃をされた際にもセキュリティリスクは多少なりとも抑えられるのではないかと思います。
>
> > 参考とするドキュメント参考とするドキュメント等ありましたら紹介いただけますと幸いです
>
> 申し訳ありません。参考になるドキュメントを見つけることはできませんでした。
>
> ご期待に叶う回答では無いかもしれませんが、どうぞよろしくお願いいたします。
回答いただきありがとうございます

>インストールで使う証明書はどのように共有する?
こちら、正確にはコンテナイメージ(SWU)を作成する際、コンテナイメージに含める証明書になります
 認識が誤っていたら申し訳ございません

at_satoshi.ohta

2025年1月16日 16時01分

太田です。

> こちら、正確にはコンテナイメージ(SWU)を作成する際、コンテナイメージに含める証明書になります

何度もお聞きして申し訳ありません。
こちらはSWUイメージをインストールする際に使用する証明書のことでしょうか?
それともコンテナイメージにアプリケーションで何かに使用する証明書があるということでしょうか?

もし、SWUイメージをインストールする際に使用する証明書のことについて言及しているのであれば、
文章からSWUイメージとコンテナイメージを混同しているのではないかと思いますので、SWUイメージとコンテナイメージについて説明させてください。

SWUイメージは、swupdateという機構を使用してArmadillo Base OS(ABOS)をアップデートするために必要なイメージファイルです。
swupdateは署名鍵と証明書を用います。
署名鍵と証明書はATDE上で作成します。証明書はArmadilloにインストールします( /etc/swupdate.pem)。
証明書のインストールはinitial_setup.swuをArmadilloにインストールすることで可能です。
initial_setup.swuの作成方法は以下のマニュアルの節をご参照ください。
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

それにより、証明書を持つArmadilloは対となる署名鍵を用いて作成されたSWUイメージのみインストールを許可します。
つまり、署名鍵が持つ人以外はABOSをアップデートできなくなる仕組みです。

> こちら、正確にはコンテナイメージ(SWU)を作成する際、コンテナイメージに含める証明書になります

そのため、SWUイメージで使用する証明書という意味であれば、
プロジェクトの作成に使用するATDEで作成した証明書をArmadilloにインストールすることで、
そのATDE上の署名鍵を使用して作成したSWUイメージであればプロジェクトに関係なくインストールできます。
SWUpdateについてはマニュアルにも説明がありますのでご参照頂ければ幸いです。
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

コンテナイメージは、コンテナを生成するためのベースとなるイメージのことを指します。
Armadillo上にコンテナイメージをインストールし、そのコンテナイメージからコンテナが生成されます。
コンテナは1つのコンテナイメージから複数個生成することも可能です。
Armadillo Base OSはアプリケーションをコンテナ単位で管理することを推奨しております。
マニュアルの以下の節をご参照頂ければイメージがつきやすいかと思います。
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
また、Armadillo Base OSはコンテナをコンテナ起動設定ファイルを用いて管理しておりますので、以下のURLもご参照いただけば幸いです。
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

コンテナイメージが存在するかどうかはATDEまたはArmadillo上で以下のコマンドを実行すると分かります。

$ podman images

podman コマンドに関する記述はマニュアルの以下の節が参考になるかと思います。
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

ATDE上でSWUイメージを作成するためには、descファイルというものを使用します。
コンテナイメージをSWUイメージに組み込むにはdescファイルに例えば以下のコマンドを記述します。

swdesc_embed_container "コンテナイメージのtarアーカイブ"

この記述がされたdescファイルから作成されたSWUイメージをArmadilloにインストールすることで、
コンテナイメージをArmadilloにインストールできます。
descファイルで使用できるコマンドに関してはマニュアルの以下の節を参照して頂ければと思います。
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

説明が長くて申し訳ありません。
どうぞよろしくお願いいたします。