アプリケーションイメージを構築する - AWS Panorama

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

アプリケーションイメージを構築する

AWS Panorama アプライアンス は、構築したイメージからエクスポートされたコンテナファイルシステムとしてアプリケーションを実行します。アプリケーションの依存関係とリソースは、AWS Panorama アプリケーションのベースイメージを開始点として使用する Dockerfile で指定します。

アプリケーションイメージを構築するには、Docker と AWS Panorama アプリケーション CLI を使用します。このガイドのサンプルアプリケーションの次の例は、これらのユースケースを示しています。

packages/123456789012-SAMPLE_CODE-1.0/Dockerfile
FROM public.ecr.aws/panorama/panorama-application WORKDIR /panorama COPY . . RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txt

次の Dockerfile 指示を使用します。

  • FROM — アプリケーションベースイメージ (public.ecr.aws/panorama/panorama-application) をロードします。

  • WORKDIR — イメージに作業ディレクトリを設定します。 /panorama はアプリケーションコードおよび関連ファイルに使用されます。この設定は構築中のみ保持され、ランタイム (/) のアプリケーションの作業ディレクトリには影響しません。

  • COPY — ファイルをローカルパスからイメージ上のパスにコピーします。COPY . . は現在のディレクトリ(パッケージディレクトリ)のファイルをイメージ上の作業ディレクトリにコピーします。たとえば、アプリケーションコードは packages/123456789012-SAMPLE_CODE-1.0/application.py から /panorama/application.py にコピーされます。

  • RUN — 構築中にイメージ上でシェルコマンドを実行します。コマンド間に && を使用することで、1回の RUN 操作で複数のコマンドを順番に実行することができます。この例では、pip パッケージマネージャーを更新し、requirements.txt に記載されているライブラリをインストールします。

ADDARG など、構築時に役立つ他の指示も使用できます。ENV のような、ランタイム情報をコンテナに追加する指示は、AWS Panorama では機能しません。AWS Panorama はイメージからコンテナを実行しません。イメージを使用してファイルシステムをエクスポートし、アプライアンスに転送するだけです。

依存関係の指定

requirements.txt は、アプリケーションが使用するライブラリを指定する Python 要件ファイルです。サンプルアプリケーションは Open CV と AWS SDK for Python (Boto3) を使用しています。

packages/123456789012-SAMPLE_CODE-1.0/requirements.txt
boto3==1.24.* opencv-python==4.6.*

Dockerfile の pip install コマンドは、これらのライブラリを /usr/local/lib の Python dist-packages ディレクトリにインストールし、アプリケーションコードでインポートできるようにします。

ローカルストレージ

AWS Panorama はアプリケーションストレージ用の /opt/aws/panorama/storage ディレクトリを確保します。アプリケーションはこのパスでファイルを作成および変更できます。ストレージディレクトリに作成されたファイルは、再起動しても保持されます。他の一時ファイルの場所は起動時にクリアされます。

イメージアセットの構築

AWS Panorama Application CLI でアプリケーションパッケージのイメージを構築すると、CLI はパッケージディレクトリで docker build を実行します。これにより、アプリケーションコードを含むアプリケーションイメージが構築されます。次に、CLI はコンテナを作成し、そのファイルシステムをエクスポートして圧縮し、assets フォルダに保存します。

$ panorama-cli build-container --container-asset-name code_asset --package-path packages/123456789012-SAMPLE_CODE-1.0 docker build -t code_asset packages/123456789012-SAMPLE_CODE-1.0 --pull docker export --output=code_asset.tar $(docker create code_asset:latest) gzip -1 code_asset.tar { "name": "code_asset", "implementations": [ { "type": "container", "assetUri": "6f67xmpl32743ed0e60c151a02f2f0da1bf70a4ab9d83fe236fa32a6f9b9f808.tar.gz", "descriptorUri": "1872xmpl129481ed053c52e66d6af8b030f9eb69b1168a29012f01c7034d7a8f.json" } ] } Container asset for the package has been succesfully built at /home/user/aws-panorama-developer-guide/sample-apps/aws-panorama-sample/assets/6f67xmpl32743ed0e60c151a02f2f0da1bf70a4ab9d83fe236fa32a6f9b9f808.tar.gz

出力の JSON ブロックは、CLI がパッケージ設定 (package.json) に追加して AWS Panorama サービスに登録するアセット定義です。CLI は、アプリケーションスクリプト(アプリケーションのエントリポイント)へのパスを指定する記述子ファイルもコピーします。

packages/123456789012-SAMPLE_CODE-1.0/descriptor.json
{ "runtimeDescriptor": { "envelopeVersion": "2021-01-01", "entry": { "path": "python3", "name": "/panorama/application.py" } } }

アセットフォルダーでは、記述子とアプリケーションイメージには SHA-256 チェックサムにちなんだ名前が付けられています。この名前は、アセットが Amazon S3 に保存されるときに、アセットの一意の識別子として使用されます。