本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS AppConfig提供的用戶端評估
重要
支援終止通知:2025 年 10 月 16 日, AWS 將停止對 CloudWatch Evidently 的支援。2025 年 10 月 16 日後,您將無法再存取 Evidently 主控台或 Evidently 資源。
您可以在專案中使用用戶端評估 - 由 AWS AppConfig (用戶端評估) 提供支援,這可讓您的應用程式在本機為使用者工作階段指派變化,而不是透過呼叫 EvaluateFeature 操作來指派變化。這可降低API通話所伴隨的延遲和可用性風險。
若要使用用戶端評估,請將 AWS AppConfig Lambda 延伸模組作為圖層連接至 Lambda 函數,並設定環境變數。用戶端評估會在本機主機上以副程序的形式執行。然後,您可以針對 呼叫 EvaluationFeature和 PutProjectEvent操作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
--nameYOUR_ENVIRONMENT_NAME
接下來,使用這些 AWS AppConfig 資源建立 Evidently 專案。如需詳細資訊,請參閱建立新專案。
在 Lambda 中支援使用 Lambda 層進行用戶端評估。這是屬於 的公有層AWS-AppConfig-Extension
,是由 AWS AppConfig 服務建立的公 AWS AppConfig 有延伸。如需有關 Lambda 層的詳細資訊,請參閱層。
若要使用用戶端評估,您必須將此層新增至 Lambda 函數,並設定許可和環境變數。
將 Evidently 用戶端評估 Lambda 層新增至 Lambda 函數並進行設定
如果您尚未建立 Lambda 函數,請進行建立。
將用戶端評估層新增至函數。如果您尚未指定,可以從 AWS 圖層ARN清單中選擇它。如需詳細資訊,請參閱設定函數以使用 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。
故障診斷
使用下列資訊來協助疑難排解使用 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
環境變數。