Uso de la evaluación del cliente con tecnología de AWS AppConfig - Amazon CloudWatch

Uso de la evaluación del cliente con tecnología de AWS AppConfig

Puede usar la evaluación del cliente con tecnología de AWS AppConfig (evaluación de cliente) en un proyecto, lo que permite que la aplicación asigne variaciones a las sesiones de los usuarios de forma local en lugar de asignar variaciones llamando a la operación EvaluateFeature. Esto mitiga los riesgos de latencia y disponibilidad que conlleva una llamada a la API.

Para utilizar la evaluación del cliente, adjunte la extensión de Lambda AWS AppConfig como capa para sus funciones de Lambda y configure las variables de entorno. La evaluación del cliente se ejecuta como un proceso secundario en el host local. A continuación, puede llamar a las operaciones EvaluationFeature y PutProjectEvent con respecto a localhost. El proceso de evaluación del cliente gestiona la asignación de variaciones, el almacenamiento en caché y la sincronización de datos. Para obtener más información sobre cómo funciona AWS AppConfig, consulte Cómo funciona AWS AppConfig.

Al integrar con AWS AppConfig, especifique un ID de aplicación de AWS AppConfig y un ID de entorno de AWS AppConfig a Evidently. Puede usar el mismo ID de aplicación e ID de entorno en todos los proyectos de Evidently.

Al crear un proyecto con la evaluación del cliente habilitada, Evidently crea un perfil de configuración de AWS AppConfig para ese proyecto. El perfil de configuración de cada proyecto será diferente.

Control de acceso de evaluación del cliente

La evaluación del cliente de Evidently utiliza un mecanismo de control de acceso diferente al del resto de Evidently. Le recomendamos encarecidamente que comprenda esto para poder implementar las medidas de seguridad adecuadas.

Con Evidently, puede crear políticas de IAM que limiten las acciones que el usuario puede llevar a cabo con los recursos individuales. Por ejemplo, puede crear un rol que no permita al usuario tener la acción EvaluateFeature. Para obtener más información sobre las acciones de Evidently que se pueden controlar con políticas de IAM, consulte Acciones definidas por Amazon CloudWatch Evidently.

El modelo de evaluación del cliente permite llevar a cabo evaluaciones locales de las características de Evidently que utilizan los metadatos del proyecto. Un usuario de un proyecto con la evaluación del cliente habilitada puede llamar a la API EvaluateFeature con respecto a un punto de conexión de host local, y esta llamada a la API no llega a Evidently y no se autentica mediante las políticas de IAM del servicio de Evidently. Esta llamada se lleva a cabo correctamente incluso si el usuario no tiene el permiso de IAM para usar la acción EvaluateFeature. Sin embargo, el usuario sigue necesitando el permiso PutProjectEvents para que el agente almacene en búfer los eventos de evaluación o los personalizados y descargue datos a Evidently de forma asíncrona.

Además, el usuario debe tener el permiso evidently:ExportProjectAsConfiguration para poder crear un proyecto que utilice la evaluación del cliente. Esto le ayuda a controlar el acceso a acciones EvaluateFeature que se invocan durante la evaluación del cliente.

Si no tiene cuidado, el modelo de seguridad de evaluación del cliente puede subvertir las políticas que ha establecido en el resto de Evidently. Un usuario que tiene el permiso evidently:ExportProjectAsConfiguration puede crear un proyecto con la evaluación del cliente habilitada y, a continuación, utilizar la acción EvaluateFeature para la evaluación del cliente con ese proyecto, incluso si se le deniega expresamente la acción EvaluateFeature en una política de IAM.

Introducción a Lambda

Actualmente, Evidently admite la evaluación del cliente mediante el uso de un entorno de AWS Lambda. Para comenzar, primero decida qué aplicación y entorno de AWS AppConfig se va a utilizar. Elija una aplicación y un entorno existentes o cree otros nuevos.

Los siguientes comandos de muestra de la AWS CLI de AWS AppConfig crean una aplicación y un entorno.

aws appconfig create-application --name YOUR_APP_NAME
aws appconfig create-environment --application-id YOUR_APP_ID --name YOUR_ENVIRONMENT_NAME

A continuación, cree un proyecto de Evidently utilizando estos recursos de AWS AppConfig. Para obtener más información, consulte Crear un nuevo proyecto de .

Lambda admite la evaluación del cliente mediante el uso de una capa de Lambda. Se trata de una capa pública que forma parte de AWS-AppConfig-Extension, una extensión pública de AWS AppConfig creada por el servicio AWS AppConfig. Para obtener más información acerca de las capas de Lambda, consulte Layer (Capa).

Para usar la evaluación del cliente, debe agregar esta capa a la función de Lambda y configurar los permisos y las variables de entorno.

Para agregar la capa de Lambda de la evaluación del cliente de Evidently a la función de Lambda y configurarla
  1. Si aún no lo ha hecho, cree una función de Lambda.

  2. Agregue la capa de evaluación del cliente a la función. Puede especificar su ARN o seleccionarlo de la lista de capas de AWS si aún no lo ha hecho. Para obtener más información, consulte Configuración de funciones para utilizar capas y Versiones disponibles de la extensión de Lambda AWS AppConfig.

  3. Cree una política de IAM denominada EvidentlyAppConfigCachingAgentPolicy con el siguiente contenido y adjúntela al rol de ejecución de la función. Para obtener más información, consulte Lambda execution role (Rol de ejecución de Lambda).

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "appconfig:GetLatestConfiguration", "appconfig:StartConfigurationSession", "evidently:PutProjectEvents" ], "Resource": "*" } ] }
  4. Agregue la variable de entorno AWS_APPCONFIG_EXTENSION_EVIDENTLY_CONFIGURATIONS obligatoria a la función de Lambda. Esta variable de entorno especifica la asignación entre el proyecto de Evidently y los recursos de AWS AppConfig.

    Si utiliza esta función para un proyecto de Evidently, defina el valor de la variable de entorno en: applications/APP_ID/environments/ENVIRONMENT_ID/configurations/PROJECT_NAME

    Si utiliza esta función para varios proyectos de Evidently, utilice una coma para separar los valores, como en el siguiente ejemplo: applications/APP_ID_1/environments/ENVIRONMENT_ID_1/configurations/PROJECT_NAME_1, applications/APP_ID_2/environments/ENVIRONMENT_ID_2/configurations/PROJECT_NAME_2

  5. (Opcional) Defina otras variables de entorno. Para más información, consulte Configuración de la extensión de Lambda de AWS AppConfig.

  6. En la aplicación, envíe EvaluateFeature a localhost para obtener evaluaciones de Evidently localmente.

    Ejemplo de Python:

    import boto3 from botocore.config import Config def lambda_handler(event, context): local_client = boto3.client( 'evidently', endpoint_url="http://localhost:2772", config=Config(inject_host_prefix=False) ) response = local_client.evaluate_feature( project=event['project'], feature=event['feature'], entityId=event['entityId'] ) print(response)

    Ejemplo de Node.js:

    const AWS = require('aws-sdk'); const evidently = new AWS.Evidently({ region: "us-west-2", endpoint: "http://localhost:2772", hostPrefixEnabled: false }); exports.handler = async (event) => { const evaluation = await evidently.evaluateFeature({ project: 'John_ETCProject_Aug2022', feature: 'Feature_IceCreamFlavors', entityId: 'John' }).promise() console.log(evaluation) const response = { statusCode: 200, body: evaluation, }; return response; };

    Ejemplo de Kotlin:

    String localhostEndpoint = "http://localhost:2772/" public AmazonCloudWatchEvidentlyClient getEvidentlyLocalClient() { return AmazonCloudWatchEvidentlyClientBuilder.standard() .withEndpointConfiguration(AwsClientBuilder.EndpointConfiguration(localhostEndpoint, region)) .withClientConfiguration(ClientConfiguration().withDisableHostPrefixInjection(true)) .withCredentials(credentialsProvider) .build(); } AmazonCloudWatchEvidentlyClient evidently = getEvidentlyLocalClient(); // EvaluateFeature via local client. EvaluateFeatureRequest evaluateFeatureRequest = new EvaluateFeatureRequest().builder() .withProject(${YOUR_PROJECT}) //Required. .withFeature(${YOUR_FEATURE}) //Required. .withEntityId(${YOUR_ENTITY_ID}) //Required. .withEvaluationContext(${YOUR_EVAL_CONTEXT}) //Optional: a JSON object of attributes that you can optionally pass in as part of the evaluation event sent to Evidently. .build(); EvaluateFeatureResponse evaluateFeatureResponse = evidently.evaluateFeature(evaluateFeatureRequest); // PutProjectEvents via local client. PutProjectEventsRequest putProjectEventsRequest = new PutProjectEventsRequest().builder() .withData(${YOUR_DATA}) .withTimeStamp(${YOUR_TIMESTAMP}) .withType(${YOUR_TYPE}) .build(); PutProjectEvents putProjectEventsResponse = evidently.putProjectEvents(putProjectEventsRequest);

Configuración de la frecuencia con la que el cliente envía datos a Evidently

Para especificar la frecuencia con la que la evaluación del cliente envía datos a Evidently, tiene la opción de configurar dos variables de entorno.

  • AWS_APPCONFIG_EXTENSION_EVIDENTLY_EVENT_BATCH_SIZE especifica el número de eventos por proyecto que se van a agrupar antes de enviarlos a Evidently. Los valores válidos son enteros entre 1 y 50, y el valor predeterminado es 40.

  • AWS_APPCONFIG_EXTENSION_EVIDENTLY_BATCH_COLLECTION_DURATION especifica la duración en segundos de espera de los eventos antes de enviarlos a Evidently. El valor predeterminado es 30.

Solución de problemas

Utilice la siguiente información para poder solucionar los problemas al usar CloudWatch Evidently con la evaluación del cliente con tecnología de AWS AppConfig.

Se produjo un error (BadRequestException) al llamar a la operación EvaluateFeature: método HTTP no admitido para la ruta proporcionada

Es posible que las variables de entorno no estén configuradas correctamente. Por ejemplo, es posible que haya utilizado EVIDENTLY_CONFIGURATIONS como el nombre de la variable de entorno en lugar de AWS_APPCONFIG_EXTENSION_EVIDENTLY_CONFIGURATIONS.

ResourceNotFoundException: implementación no encontrada

La actualización de los metadatos del proyecto no se implementó en AWS AppConfig. Compruebe si hay una implementación activa en el entorno de AWS AppConfig que utilizó para la evaluación del cliente.

ValidationException: no hay configuración de Evidently para el proyecto

Es posible que la variable de entorno AWS_APPCONFIG_EXTENSION_EVIDENTLY_CONFIGURATIONS esté configurada con un nombre de proyecto incorrecto.