Mengotomatiskan penerapan aplikasi - AWS Panorama

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-containerperintah. Perintah ini membangun wadah Docker dan menyimpannya sebagai sistem file terkompresi diassetsfolder.

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-applicationperintah. Perintah ini mengunggah aset dariassetsfolder 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 jquntuk membangun dokumen bersarang.

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). Skrip deploy mendapatkan ARN dari peran iniAWS CloudFormation. Jika aplikasi sudah diterapkan ke perangkat, skrip mendapatkan ID dari instance aplikasi itu dari file lokal.

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 menggunakanCloudWatchLogGetLogEventsAPI.

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