使用用戶端評估- AWS AppConfig - Amazon CloudWatch

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

使用用戶端評估- AWS AppConfig

您可以使用客戶端評估- AWS AppConfig (客戶端評估)在項目中,它允許您的應用程序在本地為用戶會話分配變體,而不是通過調用EvaluateFeature操作來分配變體。這樣可以減輕API通話所帶來的延遲和可用性風險。

若要使用用戶端評估,請附上 AWS AppConfig Lambda 擴充功能做為 Lambda 函數的一個層,並設定環境變數。用戶端評估會在本機主機上以副程序的形式執行。然後,您可以呼叫EvaluationFeaturePutProjectEvent作業localhost。用戶端評估程序會處理變化指派、快取和資料同步。如需關於 AWS AppConfig,看看如何 AWS AppConfig 作品

當您整合 AWS AppConfig,您可以指定 AWS AppConfig 應用程式識別碼和 AWS AppConfig 環境 ID 顯然。您可以在各 Evidently 專案中使用相同的應用程式 ID 和環境 ID。

當您創建啟用客戶端評估的項目時,顯然會創建一個 AWS AppConfig 該項目的配置文件。每個專案的組態設定檔都不同。

用戶端評估存取控制

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

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

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

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

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

開始使用 Lambda

顯然目前通過使用支持客戶端評估 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 的費用。如需詳細資訊,請參閱建立新專案

在 Lambda 中支援使用 Lambda 層進行用戶端評估。這是一個公共層AWS-AppConfig-Extension,是一個公共的一部分 AWS AppConfig 由建立的副檔名 AWS AppConfig 服務。如需有關 Lambda 層的詳細資訊,請參閱

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

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

  2. 將用戶端評估層新增至函數。您可以指定它,ARN也可以從清單中選取 AWS 圖層,如果你還沒有。如需詳細資訊,請參閱配置函數以使用圖層AWS AppConfig Lambda 擴展

  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 函數。此環境變數會指定「明顯」專案與 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 Evenly 與用戶端評估相關的問題- AWS AppConfig.

調用 EvaluateFeature 操作時發生錯誤(BadRequestException):提供的路徑不支持HTTP方法

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

ResourceNotFoundException:找不到部署

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

ValidationException:沒有明顯的項目配置

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