Usar a avaliação do lado do cliente baseada no AWS AppConfig
Você pode usar avaliação do lado do cliente baseada no AWS AppConfig (avaliação do lado do cliente) em um projeto, o que permite que a aplicação atribua variações às sessões do usuário localmente, em vez de atribuir variações chamando a operação EvaluateFeature. Isso reduz os riscos de latência e disponibilidade ocasionados por uma chamada de API.
Para usar a avaliação do lado do cliente, anexe a extensão do Lambda do AWS AppConfig como uma camada para suas funções Lambda e configure as variáveis de ambiente. A avaliação do lado do cliente é executada como um processo paralelo no host local. Em seguida, você pode chamar as operações EvaluationFeature e PutProjectEvent para localhost
. O processo de avaliação do lado do cliente lida com atribuição de variações, armazenamento em cache e sincronização de dados. Para obter mais informações sobre o AWS AppConfig, consulte Como o AWS AppConfig funciona.
Ao integrar com o AWS AppConfig, especifique um ID de aplicação do AWS AppConfig e um ID do ambiente AWS AppConfig para o Evidently. É possível usar o mesmo ID de aplicação e ID de ambiente em todos os projetos do Evidently.
Quando você cria um projeto com a avaliação do lado do cliente habilitada, o Evidently cria um perfil de configuração do AWS AppConfig para o projeto. O perfil de configuração de cada projeto será diferente.
Controle de acesso para avaliação do lado do cliente
A avaliação do lado do cliente do Evidently usa um mecanismo de controle de acesso diferente do resto do Evidently. É altamente recomendável entender isso para poder implementar as medidas de segurança adequadas.
Com o Evidently, você pode criar políticas do IAM que limitam as ações que um usuário pode realizar em recursos individuais. Por exemplo, você pode criar um perfil de usuário que impeça que o usuário tenha a ação EvaluateFeature. Para obter mais informações sobre as ações do Evidently que podem ser controladas com políticas do IAM, consulte Ações definidas pelo Amazon CloudWatch Evidently.
O modelo de avaliação do lado do cliente permite avaliações locais de recursos do Evidently que usam metadados do projeto. Um usuário de projeto com a avaliação do lado do cliente habilitada pode chamar a API EvaluateFeature para um endpoint de host local; essa chamada de API não chegará ao Evidently e não será autenticada pelas políticas do IAM do serviço do Evidently. Essa chamada será bem-sucedida mesmo que o usuário não tenha a permissão do IAM para usar a ação EvaluateFeature. No entanto, o usuário ainda precisará da permissão PutProjectEvents para que o atendente armazene em buffer os eventos de avaliação ou eventos personalizados e transfira os dados para o Evidently de forma assíncrona.
Além disso, o usuário deve ter a permissão evidently:ExportProjectAsConfiguration
para poder criar um projeto que use avaliação do lado do cliente. Isso ajuda a controlar o acesso às ações EvaluateFeature que são chamadas durante a avaliação do lado do cliente.
Se você não prestar atenção, o modelo de segurança de avaliação do lado do cliente poderá subverter as políticas definidas no restante do Evidently. Um usuário com a permissão evidently:ExportProjectAsConfiguration
pode criar um projeto com a avaliação do lado do cliente habilitada e usar a ação EvaluateFeature para avaliação do lado do cliente com esse projeto, mesmo que a ação EvaluateFeature seja expressamente negada em uma política do IAM.
Comece a usar o Lambda
Atualmente, o Evidently oferece suporte à avaliação do lado do cliente usando um ambiente do AWS Lambda. Para começar, primeiro decida qual aplicação e ambiente do AWS AppConfig serão usados. Escolha uma aplicação e um ambiente existentes ou crie novos.
Os comandos de exemplo da AWS CLI do AWS AppConfig a seguir criam uma aplicação e um ambiente.
aws appconfig create-application --name
YOUR_APP_NAME
aws appconfig create-environment --application-id
YOUR_APP_ID
--nameYOUR_ENVIRONMENT_NAME
Em seguida, crie um projeto do Evidently usando esses recursos do AWS AppConfig. Para ter mais informações, consulte Criar um novo projeto da .
A avaliação do lado do cliente é compatível com o Lambda usando uma camada do Lambda. Essa é uma camada pública que faz parte do AWS-AppConfig-Extension
, uma extensão pública do AWS AppConfig criada pelo serviço AWS AppConfig. Para obter mais informações sobre camadas do Lambda, consulte Layer (Camada).
Para usar a avaliação do lado do cliente, é necessário adicionar essa camada à função Lambda e configurar as permissões e as variáveis de ambiente.
Como adicionar a camada do Lambda de avaliação do lado do cliente do Evidently à função Lambda e configurá-la
Crie uma função Lambda, caso ainda não tenha criado.
Adicione a camada de avaliação do lado do cliente à função. Você pode especificar seu ARN ou selecioná-lo na lista de camadas da AWS, caso ainda não tenha feito isso. Para obter mais informações, consulte Configurar funções para usar camadas e Versões disponíveis da extensão do Lambda para o AWS AppConfig.
Crie uma política do IAM chamada EvidentlyAppConfigCachingAgentPolicy com o seguinte conteúdo e anexe-a ao perfil de execução da função. Para obter mais informações, consulte Função de execução do Lambda.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "appconfig:GetLatestConfiguration", "appconfig:StartConfigurationSession", "evidently:PutProjectEvents" ], "Resource": "*" } ] }
Adicione a variável de ambiente necessária
AWS_APPCONFIG_EXTENSION_EVIDENTLY_CONFIGURATIONS
à função Lambda. Essa variável de ambiente especifica o mapeamento entre o projeto do Evidently e os recursos do AWS AppConfig.Se estiver usando essa função para um projeto do Evidently, defina o valor da variável de ambiente como:
applications/
APP_ID
/environments/ENVIRONMENT_ID
/configurations/PROJECT_NAME
Se estiver usando essa função para vários projetos do Evidently, use vírgula para separar os valores, como neste exemplo:
applications/
APP_ID_1
/environments/ENVIRONMENT_ID_1
/configurations/PROJECT_NAME_1
, applications/APP_ID_2
/environments/ENVIRONMENT_ID_2
/configurations/PROJECT_NAME_2
(Opcional) Defina outras variáveis de ambiente. Para obter mais informações, consulte Configurar a extensão do Lambda para o AWS AppConfig.
Em sua aplicação, obtenha avaliações do Evidently localmente enviando
EvaluateFeature
paralocalhost
.Exemplo do 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)
Exemplo 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; };
Exemplo 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);
Configure a frequência com que o cliente enviará dados ao Evidently
Para especificar com que frequência a avaliação do lado do cliente enviará dados ao Evidently, você pode configurar opcionalmente duas variáveis de ambiente.
AWS_APPCONFIG_EXTENSION_EVIDENTLY_EVENT_BATCH_SIZE
especifica o número de eventos por projeto a serem agrupados em lote antes de enviá-los ao Evidently. Os intervalos válidos são valores decimais entre 1 e 50, e o padrão é 40.AWS_APPCONFIG_EXTENSION_EVIDENTLY_BATCH_COLLECTION_DURATION
especifica a duração, em segundos, para aguardar os eventos antes de enviá-los ao Evidently. O padrão é 30.
Solução de problemas
Use as informações a seguir para ajudar a solucionar problemas com o uso do CloudWatch Evidently com avaliação do lado do cliente baseado no AWS AppConfig.
Ocorreu um erro (BadRequestException) ao chamar a operação EvaluateFeature: HTTP method not supported for provided path (Não há suporte para o método HTTP para o caminho fornecido)
As variáveis de ambiente podem estar configuradas incorretamente. Por exemplo, você pode ter usado EVIDENTLY_CONFIGURATIONS
como nome da variável de ambiente em vez de AWS_APPCONFIG_EXTENSION_EVIDENTLY_CONFIGURATIONS
.
ResourceNotFoundException: implantação não encontrada
A atualização dos metadados do projeto não foi implantada no AWS AppConfig. Verifique se há uma implantação ativa no ambiente do AWS AppConfig que você usou para avaliação do lado do cliente.
ValidationException: não há configuração do Evidently para o projeto
A variável de ambiente AWS_APPCONFIG_EXTENSION_EVIDENTLY_CONFIGURATIONS
pode estar configurada com o nome de projeto incorreto.