

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.

# AWS Panorama API
<a name="panorama-api"></a>

Anda dapat menggunakan API publik layanan AWS Panorama untuk mengotomatiskan alur kerja manajemen perangkat dan aplikasi. Dengan AWS Command Line Interface atau AWS SDK, Anda dapat mengembangkan skrip atau aplikasi yang mengelola sumber daya dan penerapan. GitHub Repositori panduan ini mencakup skrip yang dapat Anda gunakan sebagai titik awal untuk kode Anda sendiri.

****
+ [aws-panorama-developer-guide/util-skrip](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/util-scripts)

**Topics**
+ [Otomatiskan pendaftaran perangkat](api-provision.md)
+ [Kelola peralatan dengan AWS Panorama API](api-appliance.md)
+ [Mengotomatiskan penerapan aplikasi](api-deploy.md)
+ [Kelola aplikasi dengan AWS Panorama API](api-applications.md)
+ [Menggunakan titik akhir VPC](api-endpoints.md)

# Otomatiskan pendaftaran perangkat
<a name="api-provision"></a>

Untuk menyediakan alat, gunakan [ProvisionDevice](https://docs.aws.amazon.com/panorama/latest/api/API_ProvisionDevice.html)API. Respons termasuk file ZIP dengan konfigurasi perangkat dan kredenal sementara. Dekode file dan simpan dalam arsip dengan awalan`certificates-omni_`.

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

```
if [[ $# -eq 1 ]] ; then
    DEVICE_NAME=$1
else
    echo "Usage: ./provision-device.sh <device-name>"
    exit 1
fi
CERTIFICATE_BUNDLE=certificates-omni_${DEVICE_NAME}.zip
aws panorama provision-device --name ${DEVICE_NAME} --output text --query Certificates | base64 --decode > ${CERTIFICATE_BUNDLE}
echo "Created certificate bundle ${CERTIFICATE_BUNDLE}"
```

Kredensi dalam arsip konfigurasi kedaluwarsa setelah 5 menit. Transfer arsip ke alat Anda dengan drive USB yang disertakan.

Untuk mendaftarkan kamera, gunakan [CreateNodeFromTemplateJob](https://docs.aws.amazon.com/panorama/latest/api/API_CreateNodeFromTemplateJob.html)API. API ini mengambil peta parameter template untuk nama pengguna, kata sandi, dan URL kamera. Anda dapat memformat peta ini sebagai dokumen JSON dengan menggunakan manipulasi string Bash.

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

```
if [[ $# -eq 3 ]] ; then
    NAME=$1
    USERNAME=$2
    URL=$3
else
    echo "Usage: ./register-camera.sh <stream-name> <username> <rtsp-url>"
    exit 1
fi
echo "Enter camera stream password: "
read PASSWORD
TEMPLATE='{"Username":"MY_USERNAME","Password":"MY_PASSWORD","StreamUrl": "MY_URL"}'
TEMPLATE=${TEMPLATE/MY_USERNAME/$USERNAME}
TEMPLATE=${TEMPLATE/MY_PASSWORD/$PASSWORD}
TEMPLATE=${TEMPLATE/MY_URL/$URL}
echo ${TEMPLATE}
JOB_ID=$(aws panorama create-node-from-template-job --template-type RTSP_CAMERA_STREAM --output-package-name ${NAME} --output-package-version "1.0" --node-name ${NAME} --template-parameters "${TEMPLATE}" --output text)
```

Atau, Anda dapat memuat konfigurasi JSON dari file.

```
--template-parameters file://camera-template.json
```

# Kelola peralatan dengan AWS Panorama API
<a name="api-appliance"></a>

Anda dapat mengotomatiskan tugas manajemen alat dengan AWS Panorama API.

## Lihat perangkat
<a name="api-appliance-view"></a>

Untuk mendapatkan daftar peralatan dengan perangkat IDs, gunakan [ListDevices](https://docs.aws.amazon.com/panorama/latest/api/API_ListDevices.html)API.

```
$ aws panorama list-devices
    "Devices": [
        {
            "DeviceId": "device-4tafxmplhtmzabv5lsacba4ere",
            "Name": "my-appliance",
            "CreatedTime": 1652409973.613,
            "ProvisioningStatus": "SUCCEEDED",
            "LastUpdatedTime": 1652410973.052,
            "LeaseExpirationTime": 1652842940.0
        }
    ]
}
```

Untuk mendapatkan detail selengkapnya tentang suatu alat, gunakan [DescribeDevice](https://docs.aws.amazon.com/panorama/latest/api/API_DescribeDevice.html)API.

```
$ aws panorama describe-device --device-id device-4tafxmplhtmzabv5lsacba4ere
{
    "DeviceId": "device-4tafxmplhtmzabv5lsacba4ere",
    "Name": "my-appliance",
    "Arn": "arn:aws:panorama:us-west-2:123456789012:device/device-4tafxmplhtmzabv5lsacba4ere",
    "Type": "PANORAMA_APPLIANCE",
    "DeviceConnectionStatus": "ONLINE",
    "CreatedTime": 1648232043.421,
    "ProvisioningStatus": "SUCCEEDED",
    "LatestSoftware": "4.3.55",
    "CurrentSoftware": "4.3.45",
    "SerialNumber": "GFXMPL0013023708",
    "Tags": {},
    "CurrentNetworkingStatus": {
        "Ethernet0Status": {
            "IpAddress": "192.168.0.1/24",
            "ConnectionStatus": "CONNECTED",
            "HwAddress": "8C:XM:PL:60:C5:88"
        },
        "Ethernet1Status": {
            "IpAddress": "--",
            "ConnectionStatus": "NOT_CONNECTED",
            "HwAddress": "8C:XM:PL:60:C5:89"
        }
    },
    "LeaseExpirationTime": 1652746098.0
}
```

## Tingkatkan perangkat lunak alat
<a name="api-appliance-upgrade"></a>

Jika `LatestSoftware` versi lebih baru dari`CurrentSoftware`, Anda dapat meng-upgrade perangkat. Gunakan [CreateJobForDevices](https://docs.aws.amazon.com/panorama/latest/api/API_CreateJobForDevices.html)API untuk membuat pekerjaan pembaruan over-the-air (OTA).

```
$ aws panorama create-job-for-devices --device-ids device-4tafxmplhtmzabv5lsacba4ere \
  --device-job-config '{"OTAJobConfig": {"ImageVersion": "4.3.55"}}' --job-type OTA
{
    "Jobs": [
        {
            "JobId": "device-4tafxmplhtmzabv5lsacba4ere-0",
            "DeviceId": "device-4tafxmplhtmzabv5lsacba4ere"
        }
    ]
}
```

Dalam skrip, Anda dapat mengisi bidang versi gambar di file konfigurasi pekerjaan dengan manipulasi string Bash.

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

```
apply_update() {
    DEVICE_ID=$1
    NEW_VERSION=$2
    CONFIG='{"OTAJobConfig": {"ImageVersion": "NEW_VERSION"}}'
    CONFIG=${CONFIG/NEW_VERSION/$NEW_VERSION}
    aws panorama create-job-for-devices --device-ids ${DEVICE_ID} --device-job-config "${CONFIG}" --job-type OTA
}
```

Alat mengunduh versi perangkat lunak yang ditentukan dan memperbarui dirinya sendiri. Tonton kemajuan pembaruan dengan [DescribeDeviceJob](https://docs.aws.amazon.com/panorama/latest/api/API_DescribeDeviceJob.html)API.

```
$ aws panorama describe-device-job --job-id device-4tafxmplhtmzabv5lsacba4ere-0
{
    "JobId": "device-4tafxmplhtmzabv5lsacba4ere-0",
    "DeviceId": "device-4tafxmplhtmzabv5lsacba4ere",
    "DeviceArn": "arn:aws:panorama:us-west-2:559823168634:device/device-4tafxmplhtmzabv5lsacba4ere",
    "DeviceName": "my-appliance",
    "DeviceType": "PANORAMA_APPLIANCE",
    "ImageVersion": "4.3.55",
    "Status": "REBOOTING",
    "CreatedTime": 1652410232.465
}
```

Untuk mendapatkan daftar semua pekerjaan yang sedang berjalan, gunakan [ListDevicesJobs](https://docs.aws.amazon.com/panorama/latest/api/API_ListDevicesJobs.html).

```
$ aws panorama list-devices-jobs
{
    "DeviceJobs": [
        {
            "DeviceName": "my-appliance",
            "DeviceId": "device-4tafxmplhtmzabv5lsacba4ere",
            "JobId": "device-4tafxmplhtmzabv5lsacba4ere-0",
            "CreatedTime": 1652410232.465
        }
    ]
}
```

Untuk contoh skrip yang memeriksa dan menerapkan pembaruan, lihat [check-updates.sh](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/util-scripts/check-updates.sh) di GitHub repositori panduan ini.

## Peralatan reboot
<a name="api-appliance-reboot"></a>

Untuk me-reboot alat, gunakan [CreateJobForDevices](https://docs.aws.amazon.com/panorama/latest/api/API_CreateJobForDevices.html)API.

```
$ aws panorama create-job-for-devices --device-ids device-4tafxmplhtmzabv5lsacba4ere --job-type REBOOT
{
    "Jobs": [
        {
            "JobId": "device-4tafxmplhtmzabv5lsacba4ere-0",
            "DeviceId": "device-4tafxmplhtmzabv5lsacba4ere"
        }
    ]
}
```

Dalam skrip, Anda bisa mendapatkan daftar perangkat dan memilih satu untuk reboot secara interaktif.

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

```
$ ./reboot-device.sh
Getting devices...
0: device-53amxmplyn3gmj72epzanacniy     my-se70-1
1: device-6talxmpl5mmik6qh5moba6jium     my-manh-24
Choose a device
1
Reboot device device-6talxmpl5mmik6qh5moba6jium? (y/n)y
{
    "Jobs": [
        {
            "DeviceId": "device-6talxmpl5mmik6qh5moba6jium",
            "JobId": "device-6talxmpl5mmik6qh5moba6jium-8"
        }
    ]
}
```

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

# Kelola aplikasi dengan AWS Panorama API
<a name="api-applications"></a>

Anda dapat memantau dan mengelola aplikasi dengan AWS Panorama API.

## Lihat aplikasi
<a name="api-applications-view"></a>

Untuk mendapatkan daftar aplikasi yang berjalan pada alat, gunakan [ListApplicationInstances](https://docs.aws.amazon.com/panorama/latest/api/API_ListApplicationInstances.html)API.

```
$ aws panorama list-application-instances
    "ApplicationInstances": [
        {
            "Name": "aws-panorama-sample",
            "ApplicationInstanceId": "applicationInstance-ddaxxmpl2z7bg74ywutd7byxuq",
            "DefaultRuntimeContextDevice": "device-4tafxmplhtmzabv5lsacba4ere",
            "DefaultRuntimeContextDeviceName": "my-appliance",
            "Description": "command-line deploy",
            "Status": "DEPLOYMENT_SUCCEEDED",
            "HealthStatus": "RUNNING",
            "StatusDescription": "Application deployed successfully.",
            "CreatedTime": 1661902051.925,
            "Arn": "arn:aws:panorama:us-east-2:123456789012:applicationInstance/applicationInstance-ddaxxmpl2z7bg74ywutd7byxuq",
            "Tags": {
                "client": "sample"
            }
        },
    ]
}
```

Untuk mendapatkan detail lebih lanjut tentang node instance aplikasi, gunakan [ListApplicationInstanceNodeInstances](https://docs.aws.amazon.com/panorama/latest/api/API_ListApplicationInstanceNodeInstances.html)API.

```
$ aws panorama list-application-instance-node-instances --application-instance-id applicationInstance-ddaxxmpl2z7bg74ywutd7byxuq
{
    "NodeInstances": [
        {
            "NodeInstanceId": "code_node",
            "NodeId": "SAMPLE_CODE-1.0-fd3dxmpl-interface",
            "PackageName": "SAMPLE_CODE",
            "PackageVersion": "1.0",
            "PackagePatchVersion": "fd3dxmpl2bdfa41e6fe1be290a79dd2c29cf014eadf7416d861ce7715ad5e8a8",
            "NodeName": "interface",
            "CurrentStatus": "RUNNING"
        },
        {
            "NodeInstanceId": "camera_node_override",
            "NodeId": "warehouse-floor-1.0-9eabxmpl-warehouse-floor",
            "PackageName": "warehouse-floor",
            "PackageVersion": "1.0",
            "PackagePatchVersion": "9eabxmple89f0f8b2f2852cca2a6e7971aa38f1629a210d069045e83697e42a7",
            "NodeName": "warehouse-floor",
            "CurrentStatus": "RUNNING"
        },
        {
            "NodeInstanceId": "output_node",
            "NodeId": "hdmi_data_sink-1.0-9c23xmpl-hdmi0",
            "PackageName": "hdmi_data_sink",
            "PackageVersion": "1.0",
            "PackagePatchVersion": "9c23xmplc4c98b92baea4af676c8b16063d17945a3f6bd8f83f4ff5aa0d0b394",
            "NodeName": "hdmi0",
            "CurrentStatus": "RUNNING"
        },
        {
            "NodeInstanceId": "model_node",
            "NodeId": "SQUEEZENET_PYTORCH-1.0-5d3cabda-interface",
            "PackageName": "SQUEEZENET_PYTORCH",
            "PackageVersion": "1.0",
            "PackagePatchVersion": "5d3cxmplb7113faa1d130f97f619655d8ca12787c751851a0e155e50eb5e3e96",
            "NodeName": "interface",
            "CurrentStatus": "RUNNING"
        }
    ]
}
```

## Kelola aliran kamera
<a name="api-applications-cameras"></a>

Anda dapat menjeda dan melanjutkan node aliran kamera dengan [SignalApplicationInstanceNodeInstances](https://docs.aws.amazon.com/panorama/latest/api/API_SignalApplicationInstanceNodeInstances.html)API.

```
$ aws panorama signal-application-instance-node-instances --application-instance-id applicationInstance-ddaxxmpl2z7bg74ywutd7byxuq \
        --node-signals '[{"NodeInstanceId": "camera_node_override", "Signal": "PAUSE"}]'
{
    "ApplicationInstanceId": "applicationInstance-ddaxxmpl2z7bg74ywutd7byxuq"
}
```

Dalam skrip, Anda bisa mendapatkan daftar node dan memilih salah satu untuk menjeda atau melanjutkan secara interaktif.

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

```
my-app$ ./pause-camera.sh

Getting nodes...
0: SAMPLE_CODE              RUNNING
1: warehouse-floor          RUNNING
2: hdmi_data_sink           RUNNING
3: entrance-north           PAUSED
4: SQUEEZENET_PYTORCH       RUNNING
Choose a node
1
Signalling node warehouse-floor
+ aws panorama signal-application-instance-node-instances --application-instance-id applicationInstance-r3a7xmplcbmpjqeds7vj4b6pjy --node-signals '[{"NodeInstanceId": "warehouse-floor", "Signal": "PAUSE"}]'
{
    "ApplicationInstanceId": "applicationInstance-r3a7xmplcbmpjqeds7vj4b6pjy"
}
```

Dengan menjeda dan melanjutkan node kamera, Anda dapat memutar melalui sejumlah besar aliran kamera daripada yang dapat diproses secara bersamaan. Untuk melakukan ini, petakan beberapa aliran kamera ke simpul input yang sama di manifes penggantian Anda.

Dalam contoh berikut, manifes override memetakan dua aliran kamera, `warehouse-floor` dan `entrance-north` ke node input yang sama ()`camera_node`. `warehouse-floor`Aliran aktif saat aplikasi dimulai dan `entrance-north` node menunggu sinyal menyala.

**Example [timpalan-multicam.json](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/graphs/my-app/override-multicam.json)**  

```
    "nodeGraphOverrides": {
        "nodes": [
            {
                "name": "warehouse-floor",
                "interface": "123456789012::warehouse-floor.warehouse-floor",
                "launch": "onAppStart"
            },
            {
                "name": "entrance-north",
                "interface": "123456789012::entrance-north.entrance-north",
                "launch": "onSignal"
            },
        ...
        "packages": [
            {
                "name": "123456789012::warehouse-floor",
                "version": "1.0"
            },
            {
                "name": "123456789012::entrance-north",
                "version": "1.0"
            }
        ],
        "nodeOverrides": [
            {
                "replace": "camera_node",
                "with": [
                    {
                        "name": "warehouse-floor"
                    },
                    {
                        "name": "entrance-north"
                    }
                ]
            }
```

Untuk detail tentang penerapan dengan API, lihat[Mengotomatiskan penerapan aplikasi](api-deploy.md).

# Menggunakan titik akhir VPC
<a name="api-endpoints"></a>

Jika Anda bekerja di VPC tanpa akses internet, Anda dapat membuat [titik akhir VPC](#services-vpc-interface) untuk digunakan dengan AWS Panorama. Endpoint VPC memungkinkan klien yang berjalan di subnet pribadi terhubung ke layanan AWS tanpa koneksi internet.

Untuk detail tentang port dan titik akhir yang digunakan oleh AWS Panorama Appliance, lihat. [Menghubungkan AWS Panorama Appliance ke jaringan Anda](appliance-network.md)

**Topics**
+ [Membuat titik akhir VPC](#services-vpc-interface)
+ [Menghubungkan alat ke subnet pribadi](#services-vpc-appliance)
+ [Contoh AWS CloudFormation template](#services-vpc-templates)

## Membuat titik akhir VPC
<a name="services-vpc-interface"></a>

*Untuk membuat koneksi pribadi antara VPC dan AWS Panorama, buat titik akhir VPC.* Titik akhir VPC tidak diperlukan untuk menggunakan AWS Panorama. Anda hanya perlu membuat titik akhir VPC jika Anda bekerja di VPC tanpa akses internet. Saat AWS CLI atau SDK mencoba terhubung ke AWS Panorama, lalu lintas dirutekan melalui titik akhir VPC.

[Buat titik akhir VPC](https://console.aws.amazon.com//vpc/home#CreateVpcEndpoint:) untuk AWS Panorama menggunakan pengaturan berikut:
+ **Nama layanan** – **com.amazonaws.*us-west-2*.panorama**
+ **Jenis** - **Antarmuka**

Titik akhir VPC menggunakan nama DNS layanan untuk mendapatkan lalu lintas dari klien AWS SDK tanpa konfigurasi tambahan apa pun. *Untuk informasi selengkapnya tentang penggunaan titik akhir VPC, lihat Titik akhir [VPC Antarmuka di Panduan Pengguna VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html) Amazon.*

## Menghubungkan alat ke subnet pribadi
<a name="services-vpc-appliance"></a>

AWS Panorama Appliance dapat terhubung AWS melalui koneksi VPN pribadi dengan AWS Site-to-Site VPN atau. AWS Direct Connect Dengan layanan ini, Anda dapat membuat subnet pribadi yang meluas ke pusat data Anda. Alat terhubung ke subnet pribadi dan mengakses AWS layanan melalui titik akhir VPC.

Site-to-Site VPN dan Direct Connect merupakan layanan untuk menghubungkan pusat data Anda ke Amazon VPC dengan aman. Dengan Site-to-Site VPN, Anda dapat menggunakan perangkat jaringan yang tersedia secara komersial untuk terhubung. Direct Connect menggunakan AWS perangkat untuk terhubung.

****
+ **Site-to-Site VPN** — [Apa itu AWS Site-to-Site VPN?](https://docs.aws.amazon.com/vpn/latest/s2svpn/)
+ **Direct Connect**- [Apa itu AWS Direct Connect?](https://docs.aws.amazon.com/directconnect/latest/UserGuide/)

Setelah Anda menghubungkan jaringan lokal Anda ke subnet pribadi di VPC, buat titik akhir VPC untuk layanan berikut.

****
+ **Layanan Penyimpanan Sederhana Amazon** - [AWS PrivateLink untuk Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html)
+ **AWS IoT Core**— [Menggunakan AWS IoT Core dengan titik akhir VPC antarmuka](https://docs.aws.amazon.com/iot/latest/developerguide/IoTCore-VPC.html) (bidang data dan penyedia kredensi)
+ **Amazon Elastic Container Registry** - Titik [akhir VPC antarmuka Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html)
+ **Amazon CloudWatch** - [Menggunakan CloudWatch dengan titik akhir VPC antarmuka](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-and-interface-VPC.html)
+ **Amazon CloudWatch Logs** - [Menggunakan CloudWatch Log dengan titik akhir VPC antarmuka](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch-logs-and-interface-VPC.html)

Alat tidak memerlukan konektivitas ke layanan AWS Panorama. Ini berkomunikasi dengan AWS Panorama melalui saluran pesan di. AWS IoT

Selain titik akhir VPC, Amazon S3 dan AWS IoT memerlukan penggunaan zona host pribadi Amazon Route 53. Zona host pribadi merutekan lalu lintas dari subdomain, termasuk subdomain untuk jalur akses Amazon S3 dan topik MQTT, ke titik akhir VPC yang benar. Untuk informasi tentang zona yang dihosting pribadi, lihat [Bekerja dengan zona yang dihosting pribadi](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-private.html) di Panduan Pengembang Amazon Route 53.

Untuk contoh konfigurasi VPC dengan titik akhir VPC dan zona host pribadi, lihat. [Contoh AWS CloudFormation template](#services-vpc-templates)

## Contoh AWS CloudFormation template
<a name="services-vpc-templates"></a>

 GitHub Repositori untuk panduan ini menyediakan AWS CloudFormation templat yang dapat Anda gunakan untuk membuat sumber daya untuk digunakan dengan AWS Panorama. Template membuat VPC dengan dua subnet pribadi, subnet publik, dan titik akhir VPC. Anda dapat menggunakan subnet pribadi di VPC untuk meng-host sumber daya yang terisolasi dari internet. Sumber daya di subnet publik dapat berkomunikasi dengan sumber daya pribadi, tetapi sumber daya pribadi tidak dapat diakses dari internet.

**Example [vpc-endpoint.yml—Subnet pribadi](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/cloudformation-templates/vpc-endpoint.yml)**  

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  vpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 172.31.0.0/16
      EnableDnsHostnames: true
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: !Ref AWS::StackName
  privateSubnetA:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref vpc
      AvailabilityZone:
        Fn::Select:
         - 0
         - Fn::GetAZs: ""
      CidrBlock: 172.31.3.0/24
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: !Sub  ${AWS::StackName}-subnet-a
  ...
```

`vpc-endpoint.yml`Template menunjukkan cara membuat titik akhir VPC untuk AWS Panorama. Anda dapat menggunakan titik akhir ini untuk mengelola sumber daya AWS Panorama dengan SDK atau AWS . AWS CLI

**Example [vpc-endpoint.yml-titik akhir](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/cloudformation-templates/vpc-endpoint.yml) VPC**  

```
  panoramaEndpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      ServiceName: !Sub com.amazonaws.${AWS::Region}.panorama
      VpcId: !Ref vpc
      VpcEndpointType: Interface
      SecurityGroupIds:
      - !GetAtt vpc.DefaultSecurityGroup
      PrivateDnsEnabled: true
      SubnetIds:
      - !Ref privateSubnetA
      - !Ref privateSubnetB
      PolicyDocument:
        Version: 2012-10-17		 	 	 
        Statement:
        - Effect: Allow
          Principal: "*"
          Action:
            - "panorama:*"
          Resource:
            - "*"
```

`PolicyDocument`Ini adalah kebijakan izin berbasis sumber daya yang mendefinisikan panggilan API yang dapat dilakukan dengan titik akhir. Anda dapat mengubah kebijakan untuk membatasi tindakan dan sumber daya yang dapat diakses melalui titik akhir. Untuk informasi selengkapnya, lihat [Mengontrol Akses ke Layanan dengan titik akhir VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html) dalam *Panduan Pengguna Amazon VPC*. 

`vpc-appliance.yml`Template menunjukkan cara membuat titik akhir VPC dan zona host pribadi untuk layanan yang digunakan oleh AWS Panorama Appliance.

**Example [vpc-appliance.yl - Titik akhir](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/cloudformation-templates/vpc-appliance.yml) titik akses Amazon S3 dengan zona host pribadi**  

```
  s3Endpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      ServiceName: !Sub com.amazonaws.${AWS::Region}.s3
      VpcId: !Ref vpc
      VpcEndpointType: Interface
      SecurityGroupIds:
      - !GetAtt vpc.DefaultSecurityGroup
      PrivateDnsEnabled: false
      SubnetIds:
      - !Ref privateSubnetA
      - !Ref privateSubnetB
...
  s3apHostedZone:
    Type: AWS::Route53::HostedZone
    Properties:
      Name: !Sub s3-accesspoint.${AWS::Region}.amazonaws.com
      VPCs: 
        - VPCId: !Ref vpc
          VPCRegion: !Ref AWS::Region
  s3apRecords:
    Type: AWS::Route53::RecordSet
    Properties:
      HostedZoneId: !Ref s3apHostedZone
      Name: !Sub "*.s3-accesspoint.${AWS::Region}.amazonaws.com"
      Type: CNAME
      TTL: 600
      # first DNS entry, split on :, second value
      ResourceRecords: 
      - !Select [1, !Split [":", !Select [0, !GetAtt s3Endpoint.DnsEntries ] ] ]
```

Templat sampel menunjukkan pembuatan sumber daya Amazon VPC dan Route 53 dengan sampel VPC. Anda dapat menyesuaikan ini untuk kasus penggunaan Anda dengan menghapus sumber daya VPC dan mengganti referensi ke subnet, grup keamanan, dan VPC IDs dengan sumber daya Anda. IDs 