

サポート終了通知: 2026 年 5 月 31 日、 AWS は のサポートを終了します AWS Panorama。2026 年 5 月 31 日以降、 AWS Panorama コンソールまたは AWS Panorama リソースにアクセスできなくなります。詳細については、[AWS Panorama 「サポート終了](https://docs.aws.amazon.com/panorama/latest/dev/panorama-end-of-support.html)」を参照してください。

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

# アプリケーションのデプロイを自動化する
<a name="api-deploy"></a>

アプリケーションをデプロイするには、AWS Panorama アプリケーション CLI と の両方を使用します AWS Command Line Interface。アプリケーションコンテナを構築したら、それと他のアセットを Amazon S3 Access Points にアップロードします。次に、[CreateApplicationInstance](https://docs.aws.amazon.com/panorama/latest/api/API_CreateApplicationInstance.html) API を使用してアプリケーションをデプロイします。

示されているスクリプトの詳細と使用方法については、[サンプルアプリケーションの README](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/README.md)の指示に従ってください。

**Topics**
+ [コンテナを構築します](#api-deploy-build)
+ [コンテナをアップロードしてノードを登録します](#api-deploy-upload)
+ [アプリケーションをデプロイする](#api-deploy-deploy)
+ [デプロイをモニタリングします](#api-deploy-monitor)

## コンテナを構築します
<a name="api-deploy-build"></a>

アプリケーションコンテナを構築するには、`build-container` コマンドを使用します。このコマンドは Docker コンテナを構築し、圧縮ファイルシステムとして `assets` フォルダに保存します。

**Example [3-build-container.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/3-build-container.sh)**  

```
CODE_PACKAGE=SAMPLE_CODE
ACCOUNT_ID=$(aws sts get-caller-identity --output text --query 'Account')
panorama-cli build-container --container-asset-name code_asset --package-path packages/${ACCOUNT_ID}-${CODE_PACKAGE}-1.0
```

また、パスの一部を入力して TAB を押すことで、コマンドライン補完を使ってパスの引数を埋めることもできます。

```
$ panorama-cli build-container --package-path packages/TAB
```

## コンテナをアップロードしてノードを登録します
<a name="api-deploy-upload"></a>

アプリケーションをアップロードするには、`package-application` コマンドを使用します。このコマンドは、`assets` フォルダから AWS Panorama が管理する Amazon S3 Access Points にアセットをアップロードします。

**Example [4-package-app.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/4-package-app.sh)**  

```
panorama-cli package-application
```

 AWS Panorama アプリケーション CLI は、各パッケージのパッケージ設定 (`package.json`) によって参照されるコンテナアセットと記述子アセットをアップロードし、パッケージを AWS Panorama のノードとして登録します。次に、アプリケーションマニフェスト (`graph.json`) でこれらのノードを参照してアプリケーションをデプロイします。

## アプリケーションをデプロイする
<a name="api-deploy-deploy"></a>

アプリケーションをデプロイするには、[CreateApplicationInstance](https://docs.aws.amazon.com/panorama/latest/api/API_CreateApplicationInstance.html) API を使用します。このアクションは、特に以下のパラメーターを取ります。

****
+ `ManifestPayload` — アプリケーションのノード、パッケージ、エッジ、パラメータを定義するアプリケーションマニフェスト (`graph.json`)。
+ `ManifestOverridesPayload` — 最初のマニフェストのパラメータをオーバーライドする 2 つ目のマニフェスト。アプリケーション マニフェストはアプリケーション ソース内の静的リソースとみなすことができ、オーバーライド マニフェストはデプロイをカスタマイズするデプロイ時設定を提供します。
+ `DefaultRuntimeContextDevice` - ターゲットデバイス。
+ `RuntimeRoleArn` — AWS サービスおよびリソースにアクセスするためにアプリケーションが使用する IAM ロールの ARN。
+ `ApplicationInstanceIdToReplace` — デバイスから削除する既存のアプリケーションインスタンスの ID。

マニフェストペイロードとオーバーライドペイロードは JSON ドキュメントであり、別のドキュメント内にネストされた文字列値として提供する必要があります。そのために、スクリプトはマニフェストをファイルから文字列として読み込み、[jq ツール](https://stedolan.github.io/jq/)を使用してネストされたドキュメントをコンストラクトします。

**Example [5-deploy.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/5-deploy.sh) — マニフェストを作成**  

```
GRAPH_PATH="graphs/my-app/graph.json"
OVERRIDE_PATH="graphs/my-app/override.json"
# application manifest
GRAPH=$(cat ${GRAPH_PATH} | tr -d '\n' | tr -d '[:blank:]')
MANIFEST="$(jq --arg value "${GRAPH}" '.PayloadData="\($value)"' <<< {})"
# manifest override
OVERRIDE=$(cat ${OVERRIDE_PATH} | tr -d '\n' | tr -d '[:blank:]')
MANIFEST_OVERRIDE="$(jq --arg value "${OVERRIDE}" '.PayloadData="\($value)"' <<< {})"
```

デプロイスクリプトは [ListDevices](https://docs.aws.amazon.com/panorama/latest/api/API_ListDevices.html) API を使用して現在のリージョンに登録されているデバイスのリストを取得し、ユーザーの選択を今後のデプロイ用にローカルファイルに保存します。

**Example [5-deploy.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/5-deploy.sh) — デバイスを検出**  

```
    echo "Getting devices..."
    DEVICES=$(aws panorama list-devices)
    DEVICE_NAMES=($((echo ${DEVICES} | jq -r '.Devices |=sort_by(.LastUpdatedTime) | [.Devices[].Name] | @sh') | tr -d \'\"))
    DEVICE_IDS=($((echo ${DEVICES} | jq -r '.Devices |=sort_by(.LastUpdatedTime) | [.Devices[].DeviceId] | @sh') | tr -d \'\"))
    for (( c=0; c<${#DEVICE_NAMES[@]}; c++ ))
    do
        echo "${c}: ${DEVICE_IDS[${c}]}     ${DEVICE_NAMES[${c}]}"
    done
    echo "Choose a device"
    read D_INDEX
    echo "Deploying to device ${DEVICE_IDS[${D_INDEX}]}"
    echo -n ${DEVICE_IDS[${D_INDEX}]} > device-id.txt
    DEVICE_ID=$(cat device-id.txt)
```

アプリケーションロールは別のスクリプト ([1-create-role.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/1-create-role.sh)) によって作成されます。デプロイスクリプトは、このロールの ARN を取得します AWS CloudFormation。アプリケーションが既にデバイスにデプロイされている場合、スクリプトはローカルファイルからそのアプリケーションインスタンスの ID を取得します。

**Example [5-deploy.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/5-deploy.sh) — ロール ARN と置換引数**  

```
# application role
STACK_NAME=panorama-${NAME}
ROLE_ARN=$(aws cloudformation describe-stacks --stack-name panorama-${PWD##*/} --query 'Stacks[0].Outputs[?OutputKey==`roleArn`].OutputValue' --output text)
ROLE_ARG="--runtime-role-arn=${ROLE_ARN}"

# existing application instance id
if [ -f "application-id.txt" ]; then
    EXISTING_APPLICATION=$(cat application-id.txt)
    REPLACE_ARG="--application-instance-id-to-replace=${EXISTING_APPLICATION}"
    echo "Replacing application instance ${EXISTING_APPLICATION}"
fi
```

最後に、このスクリプトはすべての要素をまとめてアプリケーションインスタンスを作成し、アプリケーションをデバイスにデプロイします。サービスは、後で使用するためにスクリプトが保存するインスタンス ID で応答します。

**Example [5-deploy.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/5-deploy.sh) — アプリケーションをデプロイ**  

```
APPLICATION_ID=$(aws panorama create-application-instance ${REPLACE_ARG} --manifest-payload="${MANIFEST}" --default-runtime-context-device=${DEVICE_ID} --name=${NAME} --description="command-line deploy" --tags client=sample --manifest-overrides-payload="${MANIFEST_OVERRIDE}" ${ROLE_ARG} --output text)
echo "New application instance ${APPLICATION_ID}"
echo -n $APPLICATION_ID > application-id.txt
```

## デプロイをモニタリングします
<a name="api-deploy-monitor"></a>

デプロイをモニタリングするには、[ListApplicationInstances API](https://docs.aws.amazon.com/panorama/latest/api/API_ListApplicationInstances.html) を使用します。モニタースクリプトは、アプリケーションディレクトリ内のファイルからデバイス ID とアプリケーションインスタンス ID を取得し、それらを使用して CLI コマンドをコンストラクトします。その後、ループで呼び出されます。

**Example [6-monitor-deployment.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/6-monitor-deployment.sh)**  

```
APPLICATION_ID=$(cat application-id.txt)
DEVICE_ID=$(cat device-id.txt)
QUERY="ApplicationInstances[?ApplicationInstanceId==\`APPLICATION_ID\`]"
QUERY=${QUERY/APPLICATION_ID/$APPLICATION_ID}
MONITOR_CMD="aws panorama list-application-instances --device-id ${DEVICE_ID} --query ${QUERY}"
MONITOR_CMD=${MONITOR_CMD/QUERY/$QUERY}
while true; do
    $MONITOR_CMD
    sleep 60
done
```

デプロイが完了すると、Amazon CloudWatch Logs API を呼び出してログを表示できます。ログ表示スクリプトは CloudWatch Logs `GetLogEvents` API を使用します。

**Example [view-logs.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/util-scripts/view-logs.sh)**  

```
GROUP="/aws/panorama/devices/MY_DEVICE_ID/applications/MY_APPLICATION_ID"
GROUP=${GROUP/MY_DEVICE_ID/$DEVICE_ID}
GROUP=${GROUP/MY_APPLICATION_ID/$APPLICATION_ID}
echo "Getting logs for group ${GROUP}."
#set -x
while true
do
    LOGS=$(aws logs get-log-events --log-group-name ${GROUP} --log-stream-name code_node --limit 150)
    readarray -t ENTRIES < <(echo $LOGS | jq -c '.events[].message')
    for ENTRY in "${ENTRIES[@]}"; do
        echo "$ENTRY" | tr -d \"
    done
    sleep 20
done
```