アプリケーションをデプロイします - AWS Panorama

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

アプリケーションをデプロイします

アプリケーションをデプロイするには、AWS Panorama Application CLI を使用してアカウントにインポートし、コンテナを構築し、アセットをアップロードして登録し、アプリケーションインスタンスを作成します。このトピックでは、これらの各ステップを詳細に説明し、バックグラウンドで何が行われているかを説明します。

まだアプリケーションをデプロイしていないのであれば、AWS Panorama の開始方法 を参照してウォークスルーを行ってください。

サンプルアプリケーションのカスタマイズと拡張の詳細については、AWS Panorama アプリケーションの構築 を参照してください。

AWS Panorama Application CLI をインストールする

AWS Panorama Application CLI と AWS CLI をインストールするには、pip を使用します。

$ pip3 install --upgrade awscli panoramacli

AWS Panorama Application CLI を使用してアプリケーションイメージを構築するには、Docker が必要です。Linux では qemu および関連するシステムライブラリも必要です。AWS Panorama Application CLI のインストールと設定の詳細については、プロジェクトの GitHub リポジトリにある 「README」 ファイルを参照してください。

Windows で WSL2 を使ってビルド環境を設定する手順については、Windows 開発環境でのセットアップ を参照してください。

アプリケーションをインポートします

サンプルアプリケーションまたはサードパーティが提供するアプリケーションを使用している場合は、AWS Panorama Application CLI を使用してアプリケーションをインポートします。

my-app$ panorama-cli import-application

このコマンドは、アカウント ID でアプリケーションパッケージの名前を変更します。Package 名は、デプロイ先のアカウントのアカウント ID で始まります。アプリケーションを複数のアカウントにデプロイする場合、アカウントごとにアプリケーションを個別にインポートしてパッケージ化する必要があります。

たとえば、このガイドのサンプルアプリケーションには、コードパッケージとモデルパッケージがあり、それぞれの名前にプレースホルダーアカウント ID が付けられています。import-application コマンドは、CLIがワークスペースの AWS 認証情報から推測したアカウント ID を使用するように名前を変更します。

/aws-panorama-sample ├── assets ├── graphs │   └── my-app │   └── graph.json └── packages    ├── 123456789012-SAMPLE_CODE-1.0    │   ├── Dockerfile    │   ├── application.py    │   ├── descriptor.json    │   ├── package.json    │   ├── requirements.txt    │   └── squeezenet_classes.json    └── 123456789012-SQUEEZENET_PYTORCH-1.0    ├── descriptor.json    └── package.json

パッケージ・ディレクトリ名と、それらを参照するアプリケーション・マニフェスト (graph.json) では、123456789012 はアカウント ID に置き換えられます。アカウント ID を確認するには、AWS CLI で aws sts get-caller-identity を呼び出します。

$ aws sts get-caller-identity { "UserId": "AIDAXMPL7W66UC3GFXMPL", "Account": "210987654321", "Arn": "arn:aws:iam::210987654321:user/devenv" }

コンテナイメージの構築

アプリケーションコードは Docker コンテナイメージにパッケージ化されており、これには Dockerfile にインストールするアプリケーションコードとライブラリが含まれます。AWS Panorama Application CLI build-container コマンドを使用して Docker イメージを構築し、ファイルシステムイメージをエクスポートします。

my-app$ panorama-cli build-container --container-asset-name code_asset --package-path packages/210987654321-SAMPLE_CODE-1.0 { "name": "code_asset", "implementations": [ { "type": "container", "assetUri": "5fa5xmplbc8c16bf8182a5cb97d626767868d3f4d9958a4e49830e1551d227c5.tar.gz", "descriptorUri": "1872xmpl129481ed053c52e66d6af8b030f9eb69b1168a29012f01c7034d7a8f.json" } ] } Container asset for the package has been succesfully built at assets/5fa5xmplbc8c16bf8182a5cb97d626767868d3f4d9958a4e49830e1551d227c5.tar.gz

このコマンドは、という名前の Docker イメージを作成しcode_asset、ファイルシステムをフォルダ内のアーカイブにエクスポートします。.tar.gz assetsCLI は、アプリケーションの Dockerfile で指定されているように、Amazon Elastic Container Registry (Amazon ECR) からアプリケーションのベースイメージを取得します。

コンテナアーカイブに加えて、CLI はパッケージ記述子 (descriptor.json) のアセットを作成します。どちらのファイルも、元のファイルのハッシュを反映する一意の識別子で名前が変更されます。また、AWS Panorama Application CLI は、2 つのアセットの名前を記録するブロックをパッケージ設定に追加します。これらの名前は、デプロイプロセス中にアプライアンスによって使用されます。

Packages/123456789012-sample_code-1.0/Package.json — アセットブロック付き
{ "nodePackage": { "envelopeVersion": "2021-01-01", "name": "SAMPLE_CODE", "version": "1.0", "description": "Computer vision application code.", "assets": [ { "name": "code_asset", "implementations": [ { "type": "container", "assetUri": "5fa5xmplbc8c16bf8182a5cb97d626767868d3f4d9958a4e49830e1551d227c5.tar.gz", "descriptorUri": "1872xmpl129481ed053c52e66d6af8b030f9eb69b1168a29012f01c7034d7a8f.json" } ] } ], "interfaces": [ { "name": "interface", "category": "business_logic", "asset": "code_asset", "inputs": [ { "name": "video_in", "type": "media" },

build-container コマンドで指定するコードアセットの名前は、パッケージ設定内の asset フィールドの値と一致する必要があります。前述の例では、両方の値が code_asset です。

モデルのインポート

アプリケーションの アセットフォルダーにモデルアーカイブがある場合や、個別にダウンロードするモデルアーカイブがある場合があります。新しいモデル、更新されたモデル、または更新されたモデル記述子ファイルがある場合は、add-raw-model コマンドを使用してインポートします。

my-app$ panorama-cli add-raw-model --model-asset-name model_asset \ --model-local-path my-model.tar.gz \ --descriptor-path packages/210987654321-SQUEEZENET_PYTORCH-1.0/descriptor.json \ --packages-path packages/210987654321-SQUEEZENET_PYTORCH-1.0

記述子ファイルの更新だけが必要な場合は、アセットディレクトリにある既存のモデルを再利用できます。浮動小数点精度モードなどの機能を設定するには、記述子ファイルの更新が必要な場合があります。例えば、次のスクリプトはサンプルアプリでこれを行う方法を示しています。

util-scripts/update-model-config.sh
#!/bin/bash set -eo pipefail MODEL_ASSET=fd1axmplacc3350a5c2673adacffab06af54c3f14da6fe4a8be24cac687a386e MODEL_PACKAGE=SQUEEZENET_PYTORCH ACCOUNT_ID=$(ls packages | grep -Eo '[0-9]{12}' | head -1) panorama-cli add-raw-model --model-asset-name model_asset --model-local-path assets/${MODEL_ASSET}.tar.gz --descriptor-path packages/${ACCOUNT_ID}-${MODEL_PACKAGE}-1.0/descriptor.json --packages-path packages/${ACCOUNT_ID}-${MODEL_PACKAGE}-1.0 cp packages/${ACCOUNT_ID}-${MODEL_PACKAGE}-1.0/package.json packages/${ACCOUNT_ID}-${MODEL_PACKAGE}-1.0/package.json.bup

モデルパッケージディレクトリの記述子ファイルへの変更は、CLI で再インポートするまで適用されません。CLI は、コンテナを再構築するときにアプリケーションコードパッケージの設定を更新するのと同様に、新しいアセット名を使用してモデルパッケージ構成を更新します。

アプリケーションアセットをアップロードします

モデルアーカイブ、コンテナファイルシステムアーカイブ、およびそれらの記述子ファイルを含むアプリケーションのアセットをアップロードして登録するには、package-application コマンドを使用します。

my-app$ panorama-cli package-application Uploading package SQUEEZENET_PYTORCH Patch version for the package 5d3cxmplb7113faa1d130f97f619655d8ca12787c751851a0e155e50eb5e3e96 Deregistering previous patch version e845xmpl8ea0361eb345c313a8dded30294b3a46b486dc8e7c174ee7aab29362 Asset fd1axmplacc3350a5c2673adacffab06af54c3f14da6fe4a8be24cac687a386e.tar.gz already exists, ignoring upload upload: assets/87fbxmpl6f18aeae4d1e3ff8bbc6147390feaf47d85b5da34f8374974ecc4aaf.json to s3://arn:aws:s3:us-east-2:212345678901:accesspoint/panorama-210987654321-6k75xmpl2jypelgzst7uux62ye/210987654321/nodePackages/SQUEEZENET_PYTORCH/binaries/87fbxmpl6f18aeae4d1e3ff8bbc6147390feaf47d85b5da34f8374974ecc4aaf.json Called register package version for SQUEEZENET_PYTORCH with patch version 5d3cxmplb7113faa1d130f97f619655d8ca12787c751851a0e155e50eb5e3e96 ...

アセットファイルまたはパッケージ設定に変更がない場合、CLI はそれをスキップします。

Uploading package SAMPLE_CODE Patch Version ca91xmplca526fe3f07821fb0c514f70ed0c444f34cb9bd3a20e153730b35d70 already registered, ignoring upload Register patch version complete for SQUEEZENET_PYTORCH with patch version 5d3cxmplb7113faa1d130f97f619655d8ca12787c751851a0e155e50eb5e3e96 Register patch version complete for SAMPLE_CODE with patch version ca91xmplca526fe3f07821fb0c514f70ed0c444f34cb9bd3a20e153730b35d70 All packages uploaded and registered successfully

CLI は、各パッケージのアセットを、アカウントに固有の Amazon S3 Access Points にアップロードします。AWS Panorama はアクセスポイントを管理し、DescribePackage API を通じてアクセスポイントに関する情報を提供します。CLI は各パッケージのアセットをそのパッケージに指定された場所にアップロードし、パッケージ設定で記述された設定で AWS Panorama サービスに登録します。

AWS Panorama コンソールでアプリケーションをデプロイ

AWS Panorama コンソールでアプリケーションをデプロイできます。デプロイプロセス中に、アプリケーションコードに渡すカメラストリームを選択し、アプリケーションの開発者が提供するオプションを設定します。

アプリケーションのデプロイ
  1. AWS Panorama コンソールの [デプロイされたアプリケーション] ページを開きます。

  2. [アプリケーションをデプロイ] を選択します。

  3. アプリケーションマニフェスト、graph.json の内容をテキストエディタに貼り付けます。次へ をクリックします。

  4. 名前と説明を入力します。

  5. [デプロイに進む] を選択します。

  6. [デプロイを開始] を選択します。

  7. アプリケーションでロールを使用する場合は、ドロップダウンメニューからロールを選択します。次へ をクリックします。

  8. [デバイスを選択]を選択し、次にアプライアンスを選択します。次へ をクリックします。

  9. 「データソースを選択」 ステップで、「入力を表示」を選択し、カメラストリームをデータソースとして追加します。次へ をクリックします。

  10. 設定 ステップでは、開発者が定義したアプリケーション固有の設定を行います。次へ をクリックします。

  11. [デプロイ] を選択してから、[完了] を選択します。

  12. デプロイされたアプリケーションのリストで、ステータスをモニタリングするアプリケーションを選択します。

デプロイプロセスには約 15~20 分かかります。アプリケーションの起動中は、アプライアンスの出力が長時間空白になることがあります。エラーが発生した場合は、トラブルシューティング を参照してください。

アプリケーションのデプロイを自動化する

CreateApplicationInstance API でアプリケーションのデプロイプロセスを自動化できます。この API は 2 つの設定ファイルを入力として受け取ります。アプリケーションマニフェストは、使用するパッケージとそれらの関係を指定します。2 つ目のファイルは、アプリケーションマニフェスト内の値をデプロイ時のオーバーライドを指定するオーバーライドファイルです。オーバーライドファイルを使用すると、同じアプリケーションマニフェストを使用してアプリケーションを異なるカメラストリームにデプロイしたり、その他のアプリケーション固有の設定を行ったりできます。

詳細と、このトピックの各ステップのスクリプト例については、アプリケーションのデプロイを自動化する を参照してください。