使用 AWS AppConfig提供的用戶端評估 - Amazon CloudWatch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 AWS AppConfig提供的用戶端評估

重要

支援終止通知:2025 年 10 月 16 日, AWS 將停止對 CloudWatch Evidently 的支援。2025 年 10 月 16 日後,您將無法再存取 Evidently 主控台或 Evidently 資源。

您可以在專案中使用用戶端評估 - 由 AWS AppConfig (用戶端評估) 提供支援,這可讓您的應用程式在本機為使用者工作階段指派變化,而不是透過呼叫 EvaluateFeature 操作來指派變化。這可降低API通話所伴隨的延遲和可用性風險。

若要使用用戶端評估,請將 AWS AppConfig Lambda 延伸模組作為圖層連接至 Lambda 函數,並設定環境變數。用戶端評估會在本機主機上以副程序的形式執行。然後,您可以針對 呼叫 EvaluationFeaturePutProjectEvent操作localhost。用戶端評估程序會處理變化指派、快取和資料同步。如需 的詳細資訊 AWS AppConfig,請參閱 AWS AppConfig 的運作方式。

當您與 整合時 AWS AppConfig,您可以將 AWS AppConfig 應用程式 ID 和 AWS AppConfig 環境 ID 指定給 Evidently。您可以在各 Evidently 專案中使用相同的應用程式 ID 和環境 ID。

當您在啟用用戶端評估的情況下建立專案時,Evidently 會為該專案建立 AWS AppConfig 組態設定檔。每個專案的組態設定檔都不同。

用戶端評估存取控制

Evidently 用戶端評估使用的存取控制機制與其餘 Evidently 功能不同。我們強烈建議您了解這一點,以便您可以實作適當的安全措施。

透過 Evidently,您可以建立IAM政策,限制使用者對個別資源可執行的動作。例如,您可以建立不允許使用者執行EvaluateFeature動作的使用者角色。如需可使用IAM政策控制的 Evidently 動作的詳細資訊,請參閱 Amazon CloudWatch Evidently 定義的動作

用戶端評估模型允許對使用專案中繼資料的 Evidently 功能進行本機評估。啟用用戶端評估的專案使用者可以EvaluateFeatureAPI針對本機主機端點呼叫 ,而且此API呼叫不會達到 Evidently,也不會由 Evidently 服務IAM的政策進行驗證。即使使用者沒有使用該EvaluateFeature動作的IAM許可,此呼叫也會成功。不過,使用者仍需要PutProjectEvents代理程式緩衝評估事件或自訂事件,以及將資料以非同步方式卸載至 Evidently。

此外,使用者必須擁有 evidently:ExportProjectAsConfiguration 許可才能夠建立使用用戶端評估的專案。這可協助您控制對用戶端評估期間呼叫之EvaluateFeature動作的存取。

如果您未留意,用戶端評估安全性模型可能會推翻您在其餘 Evidently 功能中設定的政策。具有 evidently:ExportProjectAsConfiguration 許可的使用者可在啟用用戶端評估的情況下建立專案,然後使用 EvaluateFeature動作對該專案進行用戶端評估,即使IAM政策中明確拒絕該EvaluateFeature動作。

開始使用 Lambda

Evidently 目前支援透過使用 AWS Lambda 環境進行用戶端評估。若要開始使用,請先決定要使用 AWS AppConfig 的應用程式和環境。選擇現有的應用程式和環境,或建立新的應用程式和環境。

下列範例 AWS AppConfig AWS CLI 命令會建立應用程式和環境。

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

接下來,使用這些 AWS AppConfig 資源建立 Evidently 專案。如需詳細資訊,請參閱建立新專案

在 Lambda 中支援使用 Lambda 層進行用戶端評估。這是屬於 的公有層AWS-AppConfig-Extension,是由 AWS AppConfig 服務建立的公 AWS AppConfig 有延伸。如需有關 Lambda 層的詳細資訊,請參閱

若要使用用戶端評估,您必須將此層新增至 Lambda 函數,並設定許可和環境變數。

將 Evidently 用戶端評估 Lambda 層新增至 Lambda 函數並進行設定
  1. 如果您尚未建立 Lambda 函數,請進行建立。

  2. 將用戶端評估層新增至函數。如果您尚未指定,可以從 AWS 圖層ARN清單中選擇它。如需詳細資訊,請參閱設定函數以使用 Lambda 延伸模組 的層和可用版本 AWS AppConfig

  3. 使用下列內容建立名為 EvidentlyAppConfigCachingAgentPolicy IAM的政策,並將其連接至函數的執行角色。如需詳細資訊,請參閱 Lambda 執行角色

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "appconfig:GetLatestConfiguration", "appconfig:StartConfigurationSession", "evidently:PutProjectEvents" ], "Resource": "*" } ] }
  4. 將所需的環境變數 AWS_APPCONFIG_EXTENSION_EVIDENTLY_CONFIGURATIONS 新增至 Lambda 函數。此環境變數指定 Evidently 專案與 AWS AppConfig 資源之間的映射。

    如果您將此函數用於某個 Evidently 專案,請將環境變數的值設定為:applications/APP_ID/environments/ENVIRONMENT_ID/configurations/PROJECT_NAME

    如果您將此函數用於多個 Evidently 專案,請使用逗號來分隔值,如下列範例所示: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. (選用) 設定其他環境變數。如需詳細資訊,請參閱設定 AWS AppConfig Lambda 延伸模組 。

  6. 在應用程式中,透過將 EvaluateFeature 傳送至 localhost 以在本機取得 Evidently 評估。

    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)

    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; };

    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);

設定用戶端將資料傳送至 Evidently 的頻率

若要指定用戶端評估將資料傳送至 Evidently 的頻率,您可以選擇性地設定兩個環境變數。

  • AWS_APPCONFIG_EXTENSION_EVIDENTLY_EVENT_BATCH_SIZE 指定在將每個專案的事件傳送到 Evidently 之前批次處理的事件數量。有效值是介於 1 到 50 之間的整數,預設值為 40。

  • AWS_APPCONFIG_EXTENSION_EVIDENTLY_BATCH_COLLECTION_DURATION 指定在將事件傳送到 Evidently 之前等待的持續時間 (以秒為單位)。預設值為 30。

故障診斷

使用下列資訊來協助疑難排解使用 CloudWatch Evidently 搭配用戶端評估的問題 - 由 提供支援 AWS AppConfig。

呼叫 EvaluateFeature 操作時發生錯誤 (BadRequestException):提供的路徑不支援 HTTP 方法

環境變數的設定可能不正確。例如,您可能已使用 EVIDENTLY_CONFIGURATIONS 作為環境變數名稱 (而不是 AWS_APPCONFIG_EXTENSION_EVIDENTLY_CONFIGURATIONS)。

ResourceNotFoundException:找不到部署

您對專案中繼資料的更新尚未部署到 AWS AppConfig。檢查您用於用戶端評估 AWS AppConfig 的環境中是否有作用中的部署。

ValidationException:專案沒有 Evidently 組態

可能使用不正確的專案名稱設定了 AWS_APPCONFIG_EXTENSION_EVIDENTLY_CONFIGURATIONS 環境變數。