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 dan. AWS Command Line Interface Setelah membangun wadah aplikasi, Anda mengunggahnya dan aset lainnya ke jalur akses Amazon S3. Anda kemudian menerapkan aplikasi dengan CreateApplicationInstanceAPI.
Untuk konteks dan instruksi lebih lanjut untuk menggunakan skrip yang ditampilkan, ikuti instruksi dalam contoh aplikasi README
Bangun wadahnya
Untuk membangun wadah aplikasi, gunakan build-container
perintah. Perintah ini membangun wadah Docker dan menyimpannya sebagai sistem file terkompresi di folder. assets
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 jalur dengan mengetikkan bagian dari jalur, lalu menekan. TAB
$
panorama-cli build-container --package-path packages/
TAB
Unggah wadah dan daftarkan node
Untuk mengunggah aplikasi, gunakan package-application
perintah. Perintah ini mengunggah aset dari assets
folder ke jalur akses Amazon S3 yang dikelola AWS Panorama.
contoh 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
Untuk menyebarkan aplikasi, Anda menggunakan CreateApplicationInstanceAPI. 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
contoh 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 ListDevicesAPI untuk mendapatkan daftar perangkat terdaftar di Wilayah saat ini, dan menyimpan pilihan pengguna ke file lokal untuk penerapan 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 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.
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 penerapan, gunakan ListApplicationInstancesAPI. 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.
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 Amazon CloudWatch Logs API. Skrip view logs menggunakan CloudWatch Logs GetLogEvents
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