Detalles de ingeniería del contenido dinámico - Guía del usuario de Lumberyard

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.

Detalles de ingeniería del contenido dinámico

En este tema se ofrecen detalles sobre programación relativos al proceso de actualización de contenido dinámico. Esto incluye información sobre el archivo de manifiesto, eventos del EBus de Dynamic Content Cloud Gem y la API de servicio de Dynamic Content Cloud Gem. Para obtener más información sobre las extensiones de la CLI lmbr_aws que habilita Dynamic Content Cloud Gem, consulte Uso de la CLI de contenido dinámico.

Archivo de manifiesto

En su instalación de Lumberyard, la ubicación predeterminada del archivo de manifiesto es<GameFolder>/AWS/DynamicContent/DynamicContentManifest.json.

A continuación figura un ejemplo sencillo de manifiesto para la muestra SamplesProject del DontDie .

"Files": [ { "hash": "3bebdb5bdb8cff74642e5f7f3dc4e900", "outputRoot": "@user@", "bucketPrefix": "static-data", "keyName": "gameproperties.csv", "cacheRoot": "@assets@", "platformType": "", "localFolder": "staticdata/csv" } ]

En la siguiente tabla, se describen las propiedades del archivo de manifiesto.

Propiedad Descripción
hash Hash MD5 del archivo.
outputRoot Directorio de salida de base.
bucketPrefix Prefijo para el archivo en el bucket
keyName Nombre de la clave del archivo en el bucket, que se adjuntará al principio del hash. El nombre de la clave final tiene el formato bucketPrefix/keyName.
cacheRoot Directorio raíz para buscar las copias del activo de archivo desactualizado.
platformType Windows (pc), macOS (osx_gl), o Linux (linux). Un valor vacío especifica todos los sistemas operativos.
localFolder Directorio en el que escribir localmente en el outputRoot. El resultado completo tiene el formato outputRoot/localFolder/keyName.

Eventos del EBus

Dynamic Content Cloud Gem proporciona una API del EBus e incluye llamadas expuestas a Lua. La solicitud de actualización básica de nivel superior tiene este aspecto:

CloudCanvas::DynamicContent::DynamicContentRequestBus::BroadcastResult( requestSuccess, &CloudCanvas::DynamicContent::DynamicContentRequestBus::Events::RequestManifest, manifestName)

requestSuccess (bool): especifica si la solicitud se ha enviado correctamente.

manifestName (char*)— El nombre del archivo de manifiesto (por ejemplo,DynamicContentTest.json). El sistema administra el archivo .pak y las convenciones de nomenclatura del sistema operativo (por ejemplo, DynamicContentTest.shared.pak).

Solicitar archivos pak sin usar manifiesto

Utilice las siguientes llamadas API para solicitar archivos pak sin usar un manifiesto:

CloudCanvas::DynamicContent::DynamicContentRequestBus::BroadcastResult( requestSuccess, &CloudCanvas::DynamicContent::DynamicContentRequestBus::Events::UpdateFileStatusList, uploadRequests, autoDownload);

requestSuccess (bool): especifica si la solicitud se ha enviado correctamente.

uploadRequests (AZStd::vector<AZStd::string>)— Lista de claves de depósito.

autoDownload (bool)— Especifique.truepara descargar archivos automáticamente.

CloudCanvas::DynamicContent::DynamicContentRequestBus::BroadcastResult( requestSuccess, &CloudCanvas::DynamicContent::DynamicContentRequestBus::Events::UpdateFileStatus, fileName, autoDownload);

requestSuccess (bool): especifica si la solicitud se ha enviado correctamente.

fileName (char*)— Nombre del archivo pak que se va a solicitar.

autoDownload (bool)— Especifique.truepara descargar archivos automáticamente.

Support con versiones

Solicitar archivos pak usando manifiesto versionado

Utilice las siguientes llamadas API para solicitar archivos pak utilizando un manifiesto cuando el control de versiones está habilitado:

CloudCanvas::DynamicContent::DynamicContentRequestBus::BroadcastResult( requestSuccess, &CloudCanvas::DynamicContent::DynamicContentRequestBus::Events::RequestVersionedManifest, manifestName, versionId);

requestSuccess (bool): especifica si la solicitud se ha enviado correctamente.

manifestName (char*)— El nombre del archivo de manifiesto (por ejemplo,DynamicContentTest.json). El sistema administra el archivo .pak y las convenciones de nomenclatura del sistema operativo (por ejemplo, DynamicContentTest.shared.pak).

versionId (char*)— Id. de versión del manifiesto. Utiliza la versión activa (pública) actual si no se especifica.

CloudCanvas::DynamicContent::DynamicContentRequestBus::BroadcastResult( requestSuccess, &CloudCanvas::DynamicContent::DynamicContentRequestBus::Events::RequestVersionedFileStatus, fileName, outputFile, versionId);

requestSuccess (bool): especifica si la solicitud se ha enviado correctamente.

fileName (char*)— Nombre del archivo pak que se va a solicitar.

outputFile (char*)— Nombre del archivo pak de salida.

versionId (char*)— Id. de versión del archivo. Utiliza la versión activa (pública) actual si no se especifica.

Solicitar archivos pak sin usar manifiesto

Utilice las siguientes llamadas a la API para solicitar archivos sin utilizar un manifiesto cuando el control de versiones está habilitado:

CloudCanvas::DynamicContent::DynamicContentRequestBus::BroadcastResult( requestSuccess, &CloudCanvas::DynamicContent::DynamicContentRequestBus::Events::UpdateVersionedFileStatusList, requestMap, autoDownload);

requestSuccess (bool): especifica si la solicitud se ha enviado correctamente.

requestMap (AZStd::unordered_map<AZStd::string, AZStd::string>)— Asignación de nombres de archivo a ID de versión de archivo.

autoDownload (bool)— Especifique.truepara descargar archivos automáticamente.

CloudCanvas::DynamicContent::DynamicContentRequestBus::BroadcastResult( requestSuccess, &CloudCanvas::DynamicContent::DynamicContentRequestBus::Events::UpdateVersionedFileStatus, fileName, autoDownload, versionId);

requestSuccess (bool): especifica si la solicitud se ha enviado correctamente.

fileName (char*)— Nombre del archivo pak que se va a solicitar.

autoDownload (bool)— Especifique.truepara descargar archivos automáticamente.

versionId (char*)— Id. de versión del archivo. Utiliza la versión activa (pública) actual si no se especifica.

Manifiesto recibido

Los siguientes EBus de eventos se disparan cuando se ha recibido un manifiesto correcta o incorrectamente.

Success

EBUS_EVENT(CloudCanvas::DynamicContent::DynamicContentRequestBus, ManifestUpdated, bucketName, bucketPrefix)

Cuando todos los archivos .pak se han completado, se difunde un evento RequestCompleted.

Failure

EBUS_EVENT(CloudCanvas::DynamicContent::DynamicContentRequestBus, ManifestFailed, bucketName, bucketPrefix, errorStr)

API de servicio

Dynamic Content Cloud Gem expone llamadas a la API a través de Amazon API Gateway para el cliente del juego.

En la siguiente tabla se enumeran las llamadas de.

Llamada a la API del cliente Descripción
/client/content POST Solicita URL prefirmadas para una lista de archivos en función de los ID de versión proporcionados. La versión activa se devolverá si no se especifica el ID de la versión. Devuelve la URL o un mensaje de error.

Uso de Amazon CloudFront

Amazon CloudFront es un servicio de red de entrega de contenido (CDN) rápido que puede ampliar S3 para proporcionar datos de forma segura a los clientes con baja latencia y velocidades de transferencia altas a un costo adicional. Puede aprovecharlo cuando utilice la gema DynamicContent. Para obtener más información sobre Amazon CloudFront, consulteLa documentación de Amazon CloudFront.

Habilitar la extensión CloudFront

Para habilitar la función Amazon CloudFront, agregue la etiqueta de implementacióncontent-distributioncuando crea una implementación conCloudGemDynamicContenthabilitado:

lmbr_aws deployment create --deployment {deployment_name} --tags content-distribution

Para obtener más información sobre cómo crear una pila de proyecto y una pila de implementación con la línea de comando de CloudCanvas, consulteUso de la línea de comandos de Cloud Canvas.

El uso de esta etiqueta de implementación añadirá algunos recursos de AWS más a su pila de implementación, incluida una distribución de Amazon CloudFront y un bucket S3. Todas las direcciones URL firmadas de la gema DynamicContent se crearán con Amazon CloudFront automáticamente una vez habilitada la función.

Crear y cargar pares de claves de CloudFront

Cada cuenta de AWS que utilice para crear URL firmadas de Amazon CloudFront o cookies firmadas (sus signatarios de confianza) debe tener su propio key pair de Amazon CloudFront y el key pair debe estar activo. Esto es necesario para utilizar Amazon CloudFront con la gema DynamicContent. Lea el documento de AWSCreación de pares de claves de Amazon CloudFront para sus signatarios de confianzaPara obtener información sobre cómo crear sus propios pares de claves.

Tenga en cuenta que los usuarios de IAM no pueden crear pares de claves de Amazon CloudFront. Debe iniciar sesión con credenciales raíz para crear pares de claves. Para obtener más información sobre las credenciales raíz, consulteEl usuario raíz de la cuenta de AWS.

Después de crear y descargar los pares de claves, cargue su clave privada mediante el siguiente comando CLI:

lmbr_aws dynamic-content upload-cf-key --key-path {path_to_private_key} --deployment-name {deployment_to_use}

El formato de nombre esperado para su clave privada espk-<accountkey>.pem. Su clave se almacenará de forma segura en un bucket de S3 llamadoAccessBucket.

Invalidar archivos de las cachés de borde de CloudFront

De forma predeterminada, Amazon CloudFront almacena en caché una respuesta de Amazon S3 durante 24 horas. Si su solicitud llega a una ubicación perimetral que sirvió la respuesta de Amazon S3 en un plazo de 24 horas, Amazon CloudFront utiliza la respuesta almacenada en caché incluso si actualizó el contenido en Amazon S3. En este caso, puede obtener contenido obsoleto después de cargar los mismos archivos con nombre.

Al actualizar el contenido, puede invalidar la caché de los archivos que se están actualizando agregando el--invalidate-existing-filesArgumento del comando de la CLI:

lmbr_aws dynamic-content upload-manifest-content --manifest-path {path_to_manifest} --deployment-name {deployment_to_use} --staging-status {staging_status} --invalidate-existing-files

También puede invalidar la respuesta almacenada en caché para un archivo específico mediante el siguiente comando CLI:

lmbr_aws dynamic-content invalidate-file --file-path {file_name_in_s3_bucket} --caller-reference {unique_identity}

--caller-referencePara requiere un valor que especifique para identificar de forma única una solicitud de invalidación. Amazon CloudFront utiliza este valor para impedir que se pueda enviar la misma solicitud de nuevo accidentalmente. Si realiza una segunda solicitud de invalidación con el mismo valor para la referencia del autor de llamadas y si el resto de la solicitud es igual, Amazon CloudFront no crea una nueva solicitud de invalidación.