Ejecución de trabajos de la API de AWS con Cloud Gem Framework - Lumberyard Guía del usuario

Si proporcionásemos una traducción de la versión en inglés de la guía, prevalecerá la versión en inglés de la guía si hubiese algún conflicto. La traducción se proporciona mediante traducción automática.

Ejecución de trabajos de la API de AWS con Cloud Gem Framework

El Cloud Gem Framework y esta documentación están en versión de vista previa de y están sujetos a cambios.

La gema Cloud Gem Framework proporciona clases de C++ que pueden ejecutar cualquier C++ AWS Llamada a la API por con Lumberyard del sistema de ejecución de trabajos de. Esto permite realizar la operación en segundo plano de subprocesos administrados por el sistema de trabajo.

Para utilizar AWS Trabajos de API en su proyecto de

  1. En la pestaña Creación Lumberyard proyectos, habilita la El lienzo de la nube es común y Marco de gemas en la nube para su proyecto.

  2. Te recomendamos que pongas el código que utiliza AWS en una gema, pero esto no es necesario. Si utiliza una gema, haga el Marco de gemas en la nube y Nube Lona común Las dependencias de gemas de la gema añadiendo lo siguiente a su de la gema gem.json del archivo.

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

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

    1. A la lista de inclusiones, añada:

      bld.Path('Code/SDKs/AWSNativeSDK/include')
    2. A la lista de bibliotecas estáticas utilizadas, añada CloudGemFrameworkStaticLibrary.

    3. [EMPTY] AWS_CPP_SDK_CORE y otros AWS Las bibliotecas dinámicas de la API según sea necesario. Para un lista de alias disponibles como AWS_CPP_SDK_LAMBDA y otros nombres de biblioteca, consulta la sección dev\_WAF_\3rd_party\aws_native_sdk_shared.json del archivo.

    4. Añada las bibliotecas de seguridad para sistemas operativos distintos de Windows, como se indica a continuación .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. Incluir el CloudGemFramework\AwsApiJob.h y el SDK de AWS son 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. Con un código similar al siguiente, ejecute un AWS El trabajo de API. Un enfoque alternativo es ampliar la clase de trabajo (como LambdaInvokeRequestJob en el ejemplo) y proporcione anulaciones para el OnSuccess y OnFailure métodos.

    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 el proyecto utiliza la función Cloud Canvas Responsable de recursos, obtén la información y el ID de recurso lógico de la AWS para cada grupo de recursos. Estos Los ID provocan que tu AWS Llamada a la API para utilizar el recurso correcto para la implementación activa. Este garantiza que el desarrollo, las pruebas y las versiones lanzadas de un juego no interfieran con 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 el proyecto utiliza la función Cloud Canvas Responsable de recursos, el AWS La API es se llama utilizando el AWS las credenciales. Estas credenciales son proporcionadas por el anónimo Identidad de Amazon Cognitoque el Cloud Canvas crea para su proyecto. Si no utiliza Cloud Canvas Responsable de recursos o deseas utilizar otras credenciales, puedes utilizar código como el siguiente para anular 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 );