

Pemberitahuan akhir dukungan: Pada 31 Mei 2026, AWS akan mengakhiri dukungan untuk AWS Panorama. Setelah 31 Mei 2026, Anda tidak akan lagi dapat mengakses AWS Panorama konsol atau AWS Panorama sumber daya. Untuk informasi lebih lanjut, lihat [AWS Panorama akhir dukungan](https://docs.aws.amazon.com/panorama/latest/dev/panorama-end-of-support.html). 

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengotomatiskan penerapan aplikasi
<a name="api-deploy"></a>

Untuk menerapkan aplikasi, Anda menggunakan AWS Panorama Application CLI dan. AWS Command Line Interface Setelah membangun wadah aplikasi, Anda mengunggahnya dan aset lainnya ke jalur akses Amazon S3. Anda kemudian menerapkan aplikasi dengan [CreateApplicationInstance](https://docs.aws.amazon.com/panorama/latest/api/API_CreateApplicationInstance.html)API.

Untuk konteks dan instruksi lebih lanjut untuk menggunakan skrip yang ditampilkan, ikuti instruksi dalam [contoh aplikasi README](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/README.md).

**Topics**
+ [Bangun wadahnya](#api-deploy-build)
+ [Unggah wadah dan daftarkan node](#api-deploy-upload)
+ [Deploy aplikasi](#api-deploy-deploy)
+ [Pantau penyebaran](#api-deploy-monitor)

## Bangun wadahnya
<a name="api-deploy-build"></a>

Untuk membangun wadah aplikasi, gunakan `build-container` perintah. Perintah ini membangun wadah Docker dan menyimpannya sebagai sistem file terkompresi di folder. `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
```

Anda juga dapat menggunakan penyelesaian baris perintah untuk mengisi argumen jalur dengan mengetikkan bagian dari jalur, lalu menekan. TAB

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

## Unggah wadah dan daftarkan node
<a name="api-deploy-upload"></a>

Untuk mengunggah aplikasi, gunakan `package-application` perintah. Perintah ini mengunggah aset dari `assets` folder ke jalur akses Amazon S3 yang dikelola AWS Panorama.

**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
```

 CLI Aplikasi AWS Panorama mengunggah kontainer dan aset deskriptor yang direferensikan oleh konfigurasi paket (`package.json`) di setiap paket, dan mendaftarkan paket sebagai node di AWS Panorama. Anda kemudian merujuk ke node ini dalam manifes aplikasi Anda (`graph.json`) untuk menyebarkan aplikasi.

## Deploy aplikasi
<a name="api-deploy-deploy"></a>

Untuk menyebarkan aplikasi, Anda menggunakan [CreateApplicationInstance](https://docs.aws.amazon.com/panorama/latest/api/API_CreateApplicationInstance.html)API. Tindakan ini mengambil parameter berikut, antara lain.

****
+ `ManifestPayload`— Manifes aplikasi (`graph.json`) yang mendefinisikan node, paket, tepi, dan parameter aplikasi.
+ `ManifestOverridesPayload`— Manifes kedua yang mengesampingkan parameter di yang pertama. Manifes aplikasi dapat dianggap sebagai sumber daya statis di sumber aplikasi, di mana manifes override menyediakan pengaturan waktu penerapan yang menyesuaikan penerapan.
+ `DefaultRuntimeContextDevice`— Perangkat target.
+ `RuntimeRoleArn`— ARN dari peran IAM yang digunakan aplikasi untuk mengakses layanan dan sumber daya AWS.
+ `ApplicationInstanceIdToReplace`— ID dari instance aplikasi yang ada untuk dihapus dari perangkat.

Muatan manifes dan override adalah dokumen JSON yang harus disediakan sebagai nilai string yang bersarang di dalam dokumen lain. Untuk melakukan ini, skrip memuat manifes dari file sebagai string dan menggunakan [alat jq](https://stedolan.github.io/jq/) untuk membangun dokumen bersarang.

**Example [5-deploy.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/5-deploy.sh) - tulis manifes**  

```
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)"' <<< {})"
```

Skrip penerapan menggunakan [ListDevices](https://docs.aws.amazon.com/panorama/latest/api/API_ListDevices.html)API untuk mendapatkan daftar perangkat terdaftar di Wilayah saat ini, dan menyimpan pilihan pengguna ke file lokal untuk penerapan berikutnya.

**Example [5-deploy.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/5-deploy.sh) - menemukan perangkat**  

```
    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)
```

Peran aplikasi dibuat oleh skrip lain ([1-create-role.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/1-create-role.sh)). Skrip penerapan mendapatkan ARN dari peran ini. AWS CloudFormation Jika aplikasi sudah disebarkan ke perangkat, skrip mendapatkan ID instance aplikasi itu dari file lokal.

**Example [5-deploy.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/5-deploy.sh) - peran ARN dan argumen pengganti**  

```
# 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
```

Akhirnya, skrip menempatkan semua bagian bersama-sama untuk membuat instance aplikasi dan menyebarkan aplikasi ke perangkat. Layanan merespons dengan ID instance yang disimpan skrip untuk digunakan nanti.

**Example [5-deploy.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/5-deploy.sh) - menyebarkan aplikasi**  

```
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
```

## Pantau penyebaran
<a name="api-deploy-monitor"></a>

Untuk memantau penerapan, gunakan [ListApplicationInstances](https://docs.aws.amazon.com/panorama/latest/api/API_ListApplicationInstances.html)API. Skrip monitor mendapatkan ID perangkat dan ID instance aplikasi dari file di direktori aplikasi dan menggunakannya untuk membuat perintah CLI. Kemudian memanggil dalam satu lingkaran.

**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
```

Saat penerapan selesai, Anda dapat melihat log dengan memanggil Amazon CloudWatch Logs API. Skrip view logs menggunakan 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
```