Ejecución de tareas de la API de AWS con el Cloud Gem Framework - 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.

Ejecución de tareas de la API de AWS con el Cloud Gem Framework

El Cloud Gem Framework y esta documentación están en versión de vista previa, y están sometidos a cambios.
Open 3D Engine (O3DE), el sucesor de Lumberyard, ya está disponible en Developer Preview. Descargar O3DEo visite elBlog de AWS Game Techpara obtener más información.

La gema de Cloud Gem Framework proporciona clases C++ que pueden ejecutar cualquier C++AWSLlamada a la API mediante el sistema de ejecución de trabajos de Lumberyard. Esto permite que la operación se realice en procesos en segundo plano que administra el sistema de tareas.

Para utilizar tareas de la API de AWS en su proyecto

  1. En Creación de proyectos de Lumberyard, habilite las gemas Cloud Canvas Common y Cloud Gem Framework para su proyecto.

  2. Le recomendamos que ponga el código que utiliza AWS en una gema, pero no es necesario. Si aun así utiliza una gema, convierta las gemas Cloud Gem Framework y Cloud Canvas Common en dependencias de su gema agregando lo siguiente al archivo gem.json de su gema.

    "Dependencies": [ { "Uuid" : "6fc787a982184217a5a553ca24676cfa", "VersionConstraints": [ "~>0.1" ], "_comment": "CloudGemFramework" }, { "Uuid" : "102e23cf4c4c4b748585edbce2bbdc65", "VersionConstraints": [ "~>0.1" ], "_comment": "CloudCanvasCommon" } ],
  3. Active la gema para su proyecto.

  4. En el archivo .wscript de su gema o su proyecto de juego, realice los siguientes cambios:

    1. En la lista de inclusiones, agregue:

      bld.Path('Code/SDKs/AWSNativeSDK/include')
    2. En la lista de bibliotecas estáticas utilizadas, agregue CloudGemFrameworkStaticLibrary.

    3. Agregue AWS_CPP_SDK_CORE y otras bibliotecas dinámicas de la API de AWS según sea necesario. Para obtener una lista de alias disponibles como AWS_CPP_SDK_LAMBDA y otros nombres de biblioteca, consulte el archivo dev\_WAF_\3rd_party\aws_native_sdk_shared.json.

    4. Agregue las bibliotecas de seguridad para los sistemas operativos distintos de Windows, como en el siguiente archivo .wscript para una gema.

      SUBFOLDERS = [] def build(bld): import lumberyard_sdks bld.DefineGem( includes = [bld.Path('Code/SDKs/AWSNativeSDK/include')], file_list = ['cloudcanvassample.waf_files'], use = ['CloudGemFrameworkStaticLibrary'], uselib = ['AWS_CPP_SDK_CORE', 'AWS_CPP_SDK_LAMBDA'], darwin_lib = ['curl'], linux_lib = ['curl'], ios_lib = ['curl'], appletv_lib = ['curl'], ios_framework = [ 'security' ], appletv_framework = [ 'security' ] ) bld.recurse(SUBFOLDERS)
  5. Incluya el encabezado CloudGemFramework\AwsApiJob.h y los archivos de encabezado del SDK de AWS que resulten necesarios para llamar a una API, como en el siguiente ejemplo:

    #include <CloudGemFramework/AwsApiRequestJob.h> #pragma warning(disable: 4355) // <future> includes ppltasks.h which throws a C4355 warning: 'this' used in base member initializer list #include <aws/lambda/LambdaClient.h> #include <aws/lambda/model/InvokeRequest.h> #include <aws/lambda/model/InvokeResult.h> #include <aws/core/utils/Outcome.h> #include <aws/core/utils/memory/stl/AWSStringStream.h> #pragma warning(default: 4355)
  6. Utilizando un código similar al siguiente, ejecute una tarea de la API de AWS. Otro enfoque consiste en ampliar la clase de trabajo (como LambdaInvokeRequestJob en el ejemplo) y proporcionar sobrescritura para los métodos OnSuccess y OnFailure.

    using LambdaInvokeRequestJob = AWS_API_REQUEST_JOB(Lambda, Invoke); auto job = LambdaInvokeRequestJob::Create( [](LambdaInvokeRequestJob* job) // OnSuccess handler - runs on job thread { Aws::IOStream& stream = job->result.GetPayload(); std::istreambuf_iterator<AZStd::string::value_type> eos; AZStd::string content = AZStd::string{std::istreambuf_iterator<AZStd::string::value_type>(stream),eos}; AZ_Printf("Example", "Got response %s", content.c_str()); }, [](LambdaInvokeRequestJob* job) // OnError handler (optional) - runs on job thread { AZ_Printf("Example", "Was error %s", job->error.GetMessageA().c_str()); } ); AZStd::string content = "..."; std::shared_ptr<Aws::StringStream> stream = std::make_shared<Aws::StringStream>(); *stream << content.c_str(); job->request.SetFunctionName("..."); job->request.SetBody(stream); job->Start();
  7. Si tu proyecto utiliza eladministrador de recursos de Cloud Canvas, obtenga el ID de recurso físico y el ID de recurso lógico delAWSrecurso para cada grupo de recursos. Estos identificadores hacen que su llamada a la API de AWS utilice el recurso correcto para la implementación activa. Así, se garantiza que las versiones de desarrollo, prueba y publicación de un juego no interfieran entre sí.

    #include <CloudCanvasCommon/CloudCanvasCommonBus.h> AZStd::string functionName; EBUS_EVENT_RESULT(functionName, CloudCanvasCommon::CloudCanvasCommonRequestBus, GetLogicalToPhysicalResourceMapping, "RESOURCE-GROUP.RESOURCE"); job->request.SetFunctionName(functionName.c_str());
  8. Si tu proyecto utiliza eladministrador de recursos de Cloud Canvas, elAWSLa API se llama utilizando el reproductorAWSCredenciales de . Estas credenciales se proporcionan desde el grupo anónimo de Amazon Cognito Identitypool que Cloud Canvas crea para su proyecto. Si no usaadministrador de recursos de Cloud Canvaso desea utilizar otras credenciales, puede utilizar un código como el siguiente, para sustituir la configuración predeterminada.

    #include <aws/core/auth/AWSCredentialsProvider.h> LambdaInvokeRequestJob::Config config(LambdaInvokeRequestJob::GetDefaultConfig()); const char* accessKey = "..."; const char* secretKey = "..."; config.credentialsProvider = std::make_shared<Aws::Auth::SimpleAWSCredentialsProvider>(accessKey, secretKey); config.requestTimeoutMs = 20000; auto job = LambdaInvokeRequestJob::Create( ..., // OnSuccess handler ..., // OnError handler &config );