Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Automatización de las implementaciones de aplicaciones
Para implementar una aplicación, debe utilizar la CLI de aplicaciones AWS Panorama y AWS Command Line Interface. Tras crear el contenedor de la aplicación, debe cargar este y otros recursos a un punto de acceso de Amazon S3. A continuación, debe implementar la aplicación con la CreateApplicationInstanceAPI.
Para obtener más contexto e instrucciones sobre el uso de los scripts que se muestran, siga las instrucciones del README de la aplicación de ejemplo
Secciones
Cree el contenedor
Para crear el contenedor de aplicaciones, utilice el comando build-container
. Este comando crea un contenedor de Docker y lo guarda como un sistema de archivos comprimido en la carpeta assets
.
ejemplo 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
También puede utilizar la opción de completar la línea de comandos para rellenar el argumento de la ruta; para ello, escriba parte de la ruta y, a continuación, presione TAB.
$
panorama-cli build-container --package-path packages/
TAB
Cargue el contenedor y registre los nodos
Para cargar la aplicación, utilice el comando package-application
. Este comando carga recursos de la carpeta de assets
a un punto de acceso de Amazon S3 que administra AWS Panorama.
ejemplo 4-package-app.sh
panorama-cli package-application
La CLI de la aplicación AWS Panorama carga los activos de contenedores y descriptores a los que hace referencia la configuración del paquete (package.json
) en cada paquete y los registra como nodos en AWS Panorama. A continuación, consulte estos nodos en el manifiesto de la aplicación (graph.json
) para implementar la aplicación.
Implemente de la aplicación
Para implementar la aplicación, se usa la CreateApplicationInstanceAPI. Esta acción requiere, entre otros, los siguientes parámetros.
-
ManifestPayload
: el manifiesto de la aplicación (graph.json
) que define los nodos, paquetes, periferias y parámetros de la aplicación. -
ManifestOverridesPayload
: un segundo manifiesto que anula los parámetros del primero. El manifiesto de la aplicación se puede considerar un recurso estático en la fuente de la aplicación, mientras que el manifiesto de anulación proporciona ajustes en el momento de la implementación que personalizan la implementación. -
DefaultRuntimeContextDevice
: el dispositivo de destino. -
RuntimeRoleArn
: el ARN de un rol de IAM que la aplicación utiliza para acceder a los servicios y recursos de AWS. -
ApplicationInstanceIdToReplace
: el ID de una instancia de aplicación existente que se va a eliminar del dispositivo.
Las cargas útiles de manifiesto y anulación son documentos JSON que deben proporcionarse como un valor de cadena anidado dentro de otro documento. Para ello, el script carga los manifiestos de un archivo en forma de cadena y utiliza la herramienta jq
ejemplo 5-deploy.sh : redacta manifiestos
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)"' <<< {})"
El script de despliegue utiliza la ListDevicesAPI para obtener una lista de los dispositivos registrados en la región actual y guarda la elección del usuario en un archivo local para despliegues posteriores.
ejemplo 5-deploy.sh : busca un dispositivo
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)
El rol de la aplicación se crea mediante otro script (1-create-role.sh
ejemplo 5-deploy.sh : ARN del rol y argumentos de reemplazo
# 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
Por último, el script reúne todas las piezas para crear una instancia de aplicación e implementar la aplicación en el dispositivo. El servicio responde con un ID de instancia que el script almacena para su uso posterior.
ejemplo 5-deploy.sh : implementa la aplicación
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
Monitorice la implementación
Para supervisar una implementación, usa la ListApplicationInstancesAPI. El script del monitor obtiene el ID del dispositivo y el ID de la instancia de la aplicación de los archivos del directorio de la aplicación y los utiliza para construir un comando CLI. A continuación, realiza una llamada en bucle.
ejemplo 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
Cuando se complete la implementación, podrá ver los registros llamando a la API de Amazon CloudWatch Logs. El script de visualización de registros utiliza la GetLogEvents
API CloudWatch Logs.
ejemplo 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