Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengotomatiskan penerapan aplikasi
Untuk menerapkan aplikasi, Anda menggunakan AWS Panorama Application CLI danAWS Command Line Interface. Setelah membangun wadah aplikasi, Anda mengunggahnya dan aset lainnya ke titik akses Amazon S3. Anda kemudian menyebarkan aplikasi denganCreateApplicationInstanceAPI.
Untuk konteks dan instruksi lebih lanjut untuk menggunakan skrip yang ditampilkan, ikuti petunjuk dicontoh aplikasi README
Bangun wadah
Untuk membangun wadah aplikasi, gunakanbuild-container
perintah. Perintah ini membangun wadah Docker dan menyimpannya sebagai sistem file terkompresi diassets
folder.
contoh 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 path dengan mengetikkan bagian dari jalur, dan kemudian menekanTAB.
$
panorama-cli build-container --package-path packages/
TAB
Unggah kontainer dan daftarkan node
Untuk mengunggah aplikasi, gunakanpackage-application
perintah. Perintah ini mengunggah aset dariassets
folder ke titik akses Amazon S3 yang dikelola AWS Panorama.
contoh 4-package-app.sh
panorama-cli package-application
AWS Panorama Application CLI mengunggah aset kontainer dan 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
Untuk menyebarkan aplikasi, Anda menggunakanCreateApplicationInstanceAPI. Tindakan ini mengambil parameter berikut, antara lain.
-
ManifestPayload
- Manifes aplikasi (graph.json
) yang mendefinisikan node aplikasi, paket, tepi, dan parameter. -
ManifestOverridesPayload
- Manifes kedua yang menimpa parameter di yang pertama. Manifes aplikasi dapat dianggap sebagai sumber daya statis di sumber aplikasi, di mana manifes override menyediakan setelan waktu penerapan yang menyesuaikan penerapan. -
DefaultRuntimeContextDevice
- Perangkat target. -
RuntimeRoleArn
— ARN peran IAM yang digunakan aplikasi untuk mengakses layanan dan sumber daya AWS. -
ApplicationInstanceIdToReplace
- ID instance aplikasi yang ada untuk dihapus dari perangkat.
Manifes dan override payload 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 menggunakanalat jq
contoh 5-deploy.sh — menyusun 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 deploy menggunakanListDevicesAPI untuk mendapatkan daftar perangkat terdaftar di Wilayah saat ini, dan menyimpan pilihan pengguna ke file lokal untuk penyebaran berikutnya.
contoh 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
contoh 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 menyatukan semua bagian untuk membuat instance aplikasi dan menyebarkan aplikasi ke perangkat. Layanan merespons dengan ID instance yang disimpan skrip untuk digunakan nanti.
contoh 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
Untuk memantau penyebaran, gunakanListApplicationInstancesAPI. Skrip monitor mendapatkan ID perangkat dan ID instance aplikasi dari file di direktori aplikasi dan menggunakannya untuk membuat perintah CLI. Kemudian panggilan dalam satu lingkaran.
contoh 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 AmazonCloudWatchLog API. Skrip log tampilan menggunakanCloudWatchLogGetLogEvents
API.
contoh 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