本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS AppConfig提供的用戶端評估
重要
支援終止通知:2025 年 10 月 16 日, AWS 將停止對 CloudWatch Evidently 的支援。2025 年 10 月 16 日之後,您將無法再存取 Evidently 主控台或 Evidently 資源。
您可以在專案中使用用戶端評估 - 由 AWS AppConfig (用戶端評估) 提供,這可讓您的應用程式在本機將變化指派給使用者工作階段,而不是呼叫 EvaluateFeature 操作來指派變化。這樣可以減輕 API 呼叫所帶來的延遲和可用性風險。
若要使用用戶端評估,請將 AWS AppConfig Lambda 延伸模組做為 layer 連接至 Lambda 函數,並設定環境變數。用戶端評估會在本機主機上以副程序的形式執行。然後,您可以針對 localhost
呼叫 EvaluationFeature 和 PutProjectEvent 操作。用戶端評估程序會處理變化指派、快取和資料同步。如需 的詳細資訊 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 功能進行本機評估。啟用用戶端評估的專案使用者可以針對本機主機端點呼叫 EvaluateFeature API,並且此 API 呼叫不會連上 Evidently,且 Evidently 服務的 IAM 政策不會對此呼叫進行驗證。即便使用者沒有 IAM 許可,無法使用 EvaluateFeature 動作,此呼叫仍會成功。但是,使用者仍然需要代理程式的 PutProjectEvents 許可來緩衝評估事件或自訂事件,並以非同步方式將資料卸載至 Evidently。
此外,使用者必須擁有 evidently:ExportProjectAsConfiguration
許可才能夠建立使用用戶端評估的專案。這可協助您控制對用戶端評估期間呼叫的 EvaluateFeature 動作的存取。
如果您未留意,用戶端評估安全性模型可能會推翻您在其餘 Evidently 功能中設定的政策。即使在 IAM 政策中已明確拒絕 EvaluateFeature 動作,具有 evidently:ExportProjectAsConfiguration
許可的使用者也可建立啟用用戶端評估的專案,然後使用 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
--nameYOUR_ENVIRONMENT_NAME
接著,使用這些 AWS AppConfig 資源建立 Evidently 專案。如需詳細資訊,請參閱建立新專案。
在 Lambda 中支援使用 Lambda 層進行用戶端評估。這是屬於 的公有 layerAWS-AppConfig-Extension
,由 AWS AppConfig 服務建立的公 AWS AppConfig 有延伸。如需有關 Lambda 層的詳細資訊,請參閱層。
若要使用用戶端評估,您必須將此層新增至 Lambda 函數,並設定許可和環境變數。
將 Evidently 用戶端評估 Lambda 層新增至 Lambda 函數並進行設定
如果您尚未建立 Lambda 函數,請進行建立。
將用戶端評估層新增至函數。如果您尚未指定其 ARN,您可以從 AWS 圖層清單中選取它。如需詳細資訊,請參閱設定函數以使用層和 Lambda AWS AppConfig 延伸的可用版本。
建立名為 EvidentlyAppConfigCachingAgentPolicy 且包含以下內容的 IAM 政策,並將其連接到函數的執行角色。如需詳細資訊,請參閱 Lambda 執行角色。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "appconfig:GetLatestConfiguration", "appconfig:StartConfigurationSession", "evidently:PutProjectEvents" ], "Resource": "*" } ] }
將所需的環境變數
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
(選用) 設定其他環境變數。如需詳細資訊,請參閱設定 AWS AppConfig Lambda 延伸模組。
在應用程式中,透過將
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。
故障診斷
使用以下資訊,協助對搭配 AWS AppConfig提供之用戶端評估使用 CloudWatch Evidently 的問題進行疑難排解。
呼叫 EvaluateFeature 操作時發生錯誤 (BadRequestException):提供的路徑不支援 HTTP 方法
環境變數的設定可能不正確。例如,您可能已使用 EVIDENTLY_CONFIGURATIONS
作為環境變數名稱 (而不是 AWS_APPCONFIG_EXTENSION_EVIDENTLY_CONFIGURATIONS
)。
ResourceNotFoundException:找不到部署
您對專案中繼資料的更新尚未部署到 AWS AppConfig。檢查您用於用戶端評估 AWS AppConfig 的環境中是否有作用中的部署。
ValidationException:專案沒有 Evidently 組態
可能使用不正確的專案名稱設定了 AWS_APPCONFIG_EXTENSION_EVIDENTLY_CONFIGURATIONS
環境變數。