使用 AWS AppConfig 代理程式 Lambda 延伸模組擷取組態 - AWS AppConfig

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

使用 AWS AppConfig 代理程式 Lambda 延伸模組擷取組態

AWS Lambda 擴充功能是增強 Lambda 函數功能的伴隨程序。擴展可以在調用函數之前啟動,與函數 parallel 運行,並在處理函數調用後繼續運行。實質上,Lambda 擴充功能就像是與 Lambda 叫用 parallel 執行的用戶端。此平行用戶端可在其生命週期中的任何時間點與您的功能連接。

如果您在 Lambda 函數中使用 AWS AppConfig 功能旗標或其他動態組態資料,建議您將 AWS AppConfig 代理程式 Lambda 延伸模組新增為 Lambda 函數的層。這使得調用功能標誌更簡單,擴展本身包括簡化使用, AWS AppConfig 同時降低成本的最佳實踐。由於對 AWS AppConfig 服務的 API 呼叫次數減少,並縮短 Lambda 函數處理時間,可降低成本。如需 Lambda 擴充的詳細資訊,請參閱AWS Lambda 開發人員指南中的 Lambda 擴充功能

注意

AWS AppConfig 定價是根據呼叫和接收組態的次數而定。如果 Lambda 執行多次冷啟動並經常擷取新的組態資料,您的成本就會增加。

本主題包括 AWS AppConfig 代理程式 Lambda 延伸模組的相關資訊,以及如何設定擴充功能以使用 Lambda 函數的程序。

運作方式

如果您使 AWS AppConfig 用含 Lambda 擴充功能的 Lambda 函數管理組態,則必須將 Lambda 函數設定為透過與StartConfigurationSessionGetLatestConfigurationAPI 動作整合來接收組態更新。

將 AWS AppConfig 代理程式 Lambda 延伸模組與 Lambda 函數整合,可簡化此程序 擴充功能負責呼叫 AWS AppConfig 服務、管理擷取資料的本機快取、追蹤下一次服務呼叫所需的組態 Token,以及定期在背景中檢查組態更新。下圖顯示了它是如何工作的。

AWS AppConfig 代理程式 Lambda 擴充功能的運作方式圖表
  1. 您可以將 AWS AppConfig 代理程式 Lambda 延伸模組設定為 Lambda 函數的一層。

  2. 若要存取其組態資料,您的函數會在上執行的 HTTP 端點呼叫 AWS AppConfig 擴充功能localhost:2772

  3. 延伸功能會維護組態資料的本機快取。如果資料不在快取中,擴充功能會呼叫 AWS AppConfig 以取得設定資料。

  4. 從服務接收組態後,擴充功能會將其儲存在本機快取中,並將其傳遞至 Lambda 函數。

  5. AWS AppConfig 代理程式 Lambda 延伸模組會定期在背景檢查組態資料的更新。每次叫用 Lambda 函數時,擴充功能都會檢查擷取組態後經過的時間。如果經歷時間大於設定的輪詢間隔,則擴充功能會呼叫 AWS AppConfig 以檢查新部署的資料、在發生變更時更新本機快取,並重設經過時間。

注意
  • Lambda 會將與函數所要求並行層級相符的另外執行個體具現化。每個執行個體都彼此隔離,並維護自己組態資料的本機快取。如需 Lambda 執行個體和並行的詳細資訊,請參閱管理 Lambda 函數的並行處理。

  • 在您部署更新的組態後,Lambda 函數中顯示組態變更所需的時間 AWS AppConfig,取決於您用於部署的部署策略以及您為擴充功能設定的輪詢間隔。

開始之前

啟用 AWS AppConfig 代理程式 Lambda 延伸模組之前,請執行下列動作:

  • 在 Lambda 函數中組織組織組態,以便您可以將它們外部化到 AWS AppConfig.

  • 建立 AWS AppConfig 人工因素和組態資料,包括功能旗標或自由格式組態資料。如需詳細資訊,請參閱 在中建立特徵旗標和任意格式組態資料 AWS AppConfig

  • 將其新增appconfig:GetLatestConfiguration至 Lambda 函數執行角色所使用的 AWS Identity and Access Management (IAM) 政策,appconfig:StartConfigurationSession並加入該政策。如需詳細資訊,請參閱《AWS Lambda 開發人員指南》中的 AWS Lambda 執行角色。如需有關 AWS AppConfig 權限的詳細資訊,請參閱服務授權參考 AWS AppConfig中的動作、資源和條件索引

新增 AWS AppConfig 代理程式 Lambda 延伸

若要使用 AWS AppConfig 代理程式 Lambda 延伸模組,您需要將擴充功能新增至您的 Lambda。這可以透過將 AWS AppConfig 代理程式 Lambda 延伸模組新增至 Lambda 函數作為層,或在 Lambda 函數上啟用擴充功能做為容器映像來完成。

注意

AWS AppConfig 擴充功能不受執行階段限制,並支援所有執行階段。

使用層和 ARN 新增 AWS AppConfig 代理程式 Lambda 延伸模組

若要使用 AWS AppConfig 代理程式 Lambda 延伸模組,您可以將擴充功能新增至 Lambda 函數做為一個層。有關如何向函數添加圖層的詳細信息,請參閱AWS Lambda 開發人員指南中的配置擴展。 AWS Lambda 控制台中擴展名的名稱是 AWS AppConfig-擴展名。另請注意,當您將擴充功能新增為 Lambda 的層時,必須指定 Amazon 資源名稱 (ARN)。從下列其中一個與平台對應的清單中選擇 ARN,以及您建立 Lambda 的 AWS 區域 位置。

如果您想在將擴充功能新增至函式之前先測試擴充功能,您可以使用下列程式碼範例來驗證其運作正常。

import urllib.request def lambda_handler(event, context): url = f'http://localhost:2772/applications/application_name/environments/environment_name/configurations/configuration_name' config = urllib.request.urlopen(url).read() return config

要對其進行測試,請為 Python 創建一個新的 Lambda 函數,添加擴展名,然後運行 Lambda 函數。執行 Lambda 函數之後, AWS AppConfig Lambda 函數會傳回您為 http://localhost:2772 路徑指定的組態。如需建立 Lambda 函數的詳細資訊,請參閱AWS Lambda 開發人員指南的使用主控台建立 Lambda 函數

若要將 AWS AppConfig 代理程式 Lambda 延伸模組新增為容器映像檔,請參閱使用容器映像檔新增 AWS AppConfig 代理程式 Lambda 延伸模組

設定 AWS AppConfig 代理程式 Lambda 延伸

您可以透過變更下列 AWS Lambda 環境變數來設定擴充功能。如需詳細資訊,請參閱AWS Lambda 開發人員指南中的使用 AWS Lambda 環境變數

預取組態資料

環境變數AWS_APPCONFIG_EXTENSION_PREFETCH_LIST可以改善函數的啟動時間。初始化 AWS AppConfig 代理程式 Lambda 延伸模組時,它會 AWS AppConfig 在 Lambda 開始初始化函數並叫用您的處理常式之前,擷取指定的組態。在某些情況下,在函數請求之前,配置數據已經在本地緩存中可用。

若要使用預先擷取功能,請將環境變數的值設定為對應於組態資料的路徑。例如,如果您的配置對應於分別名為「我的應用程序」,「我的環境」和「my_configation_data」的應用程序,環境和配置配置文件,則路徑將是。/applications/my_application/environments/my_environment/configurations/my_configuration_data您可以將多個組態項目列為逗號分隔清單來指定多個組態項目 (如果您的資源名稱包含逗號,請使用資源的 ID 值而非名稱)。

從另一個帳戶存取組態資料

AWS AppConfig 代理程式 Lambda 延伸模組可透過指定授與資料可的 IAM 角色,從另一個帳戶擷取組態資料。若要進行設定,請依照下列步驟執行:

  1. 在用 AWS AppConfig 於管理組態資料的帳戶中,建立具有信任政策的角色,該角色會授與執行 Lambda 函數的帳戶存取appconfig:StartConfigurationSessionappconfig:GetLatestConfiguration動作,以及與 AWS AppConfig 組態資源對應的部分或完整 ARN。

  2. 在執行 Lambda 函數的帳戶中,使用在步驟 1 中建立之角色的 ARN,將AWS_APPCONFIG_EXTENSION_ROLE_ARN環境變數新增至 Lambda 函數。

  3. (選擇性) 如有需要,可以使用AWS_APPCONFIG_EXTENSION_ROLE_EXTERNAL_ID環境變數指定外部 ID。同樣地,可以使用AWS_APPCONFIG_EXTENSION_ROLE_SESSION_NAME環境變數來配置工作階段名稱。

注意

記下以下資訊。

  • AWS AppConfig 代理程式 Lambda 擴充功能只能從一個帳戶擷取資料。如果您指定 IAM 角色,則擴充功能將無法從執行 Lambda 函數的帳戶擷取組態資料。

  • AWS Lambda 使用 Amazon CloudWatch 日誌記錄 AWS AppConfig 代理程式 Lambda 延伸模組和 Lambda 函數的相關資訊。

環境變數 詳細資訊 預設值

AWS_APPCONFIG_EXTENSION_HTTP_PORT

此環境變數指定主控擴充功能的本機 HTTP 伺服器執行的連接埠。

2772

AWS_APPCONFIG_EXTENSION_LOG_LEVEL

此環境變數指定要針對 AWS AppConfig 某個函數傳送至 Amazon Logs 的延伸特定 CloudWatch 日誌。有效且不區分大小寫的值為:debuginfowarnerror、和。none調試包括有關擴展程序的詳細信息,包括計時信息。

info

AWS_APPCONFIG_EXTENSION_MAX_CONNECTIONS

此環境變數會設定延伸模組用來擷取組態的連線數目上限。 AWS AppConfig

3

AWS_APPCONFIG_EXTENSION_POLL_INTERVAL_SECONDS

此環境變數可控制擴充功能輪詢更新組態的頻率 (以秒 AWS AppConfig 為單位)。

45

AWS_APPCONFIG_EXTENSION_POLL_TIMEOUT_MILLIS

此環境變數控制重新整理快取中的資料時,擴充功能會等待回應的最大 AWS AppConfig 時間量 (以毫秒為單位)。如果在指定的時間量內 AWS AppConfig 沒有回應,擴充功能會略過此輪詢間隔,並傳回先前更新的快取資料。

3000

AWS_APPCONFIG_EXTENSION_PREFETCH_LIST

此環境變數會指定擴充功能在函數初始化並執行處理常式之前開始擷取的組態資料。它可以顯著減少功能的冷啟動時間。

AWS_APPCONFIG_EXTENSION_PROXY_HEADERS 此環境變數會指定環AWS_APPCONFIG_EXTENSION_PROXY_URL境變數中參照之 Proxy 所需的標頭。此值是以逗號分隔的標頭清單。每個標題使用以下形式:
"header: value"
AWS_APPCONFIG_EXTENSION_PROXY_URL 此環境變數指定要用於從 AWS AppConfig 擴充功能到的連線的 Proxy URL AWS 服務。 HTTPSHTTP網址被支持。
AWS_APPCONFIG_EXTENSION_ROLE_ARN 此環境變數會指定 IAM 角色 ARN 對應至 AWS AppConfig 擴充功能假設以擷取組態的角色。
AWS_APPCONFIG_EXTENSION_ROLE_EXTERNAL_ID 此環境變數會指定要與假定角色 ARN 搭配使用的外部 ID。
AWS_APPCONFIG_EXTENSION_ROLE_SESSION_NAME 此環境變數會指定要與假設 IAM 角色的登入資料相關聯的工作階段名稱。
AWS_APPCONFIG_EXTENSION_SERVICE_REGION 此環境變數會指定擴充功能用來呼叫 AWS AppConfig 服務的替代區域。未定義時,擴充功能會使用目前「區域」中的端點。

AWS_APPCONFIG_EXTENSION_MANIFEST

此環境變數會設定 AWS AppConfig 代理程式,以利用額外的每個組態功能,例如多帳戶擷取,以及將組態儲存至磁碟。您可以輸入下列其中一個值:

  • "app:env:manifest-config"

  • "file:/fully/qualified/path/to/manifest.json"

如需這些功能的詳細資訊,請參閱其他擷取功能

true

AWS_APPCONFIG_EXTENSION_WAIT_ON_MANIFEST

此環境變數會設定 AWS AppConfig 代理程式等到資訊清單處理完成後才完成啟動。

true

從功能旗標組態擷取一或多個旗標

對於功能旗標組態 (類型的組態AWS.AppConfig.FeatureFlags),Lambda 擴充功能可讓您擷取組態中的單一旗標或旗標子集。如果 Lambda 只需要使用組態設定檔中的幾個旗標,擷取一或兩個旗標就很有用。下面的實例使用 Python。

注意

只有在 AWS AppConfig 代理程式 Lambda 延伸版本 2.0.45 及更新版本中,才能呼叫組態中的單一功能旗標或旗標子集。

您可以從本機 HTTP 端點擷取 AWS AppConfig 組態資料。若要存取特定旗標或旗標清單,請使用 AWS AppConfig 組態設定檔的 ?flag=flag_name query 參數。

若要存取單一旗標及其屬性

import urllib.request def lambda_handler(event, context): url = f'http://localhost:2772/applications/application_name/environments/environment_name/configurations/configuration_name?flag=flag_name' config = urllib.request.urlopen(url).read() return config

若要存取多個旗標及其屬性

import urllib.request def lambda_handler(event, context): url = f'http://localhost:2772/applications/application_name/environments/environment_name/configurations/configuration_name?flag=flag_name_one&flag=flag_name_two' config = urllib.request.urlopen(url).read() return config

檢視 AWS AppConfig 代理程式 Lambda 延伸

您可以在記錄中檢視 AWS AppConfig 代理程式 Lambda 延伸模組的 AWS Lambda 記錄資料。記錄項目前面加上。appconfig agent範例如下。

[appconfig agent] 2024/05/07 04:19:01 ERROR retrieve failure for 'SourceEventConfig:SourceEventConfigEnvironment:SourceEventConfigProfile': StartConfigurationSession: api error AccessDenied: User: arn:aws:sts::0123456789:assumed-role/us-east-1-LambdaRole/extension1 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::0123456789:role/test1 (retry in 60s)