本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Parameter StoreAWS Lambda 函數中的參數
Parameter Store是 的功能,為組態資料管理和秘密管理 AWS Systems Manager提供安全的階層式儲存。您可以儲存密碼、資料庫字串、Amazon Machine Image (AMI) IDs、 和 授權碼作為參數值。
若要從 使用參數 Parameter Store 在 AWS Lambda 函數中,不使用 SDK,您可以使用 AWS 參數和秘密 Lambda 延伸模組。此延伸會擷取參數值並對其進行快取以供今後使用。使用 Lambda 擴充功能可以透過減少 的API呼叫數量來降低成本 Parameter Store。 使用擴充功能也可以改善延遲,因為擷取快取的參數比從中擷取更快 Parameter Store.
Lambda 延伸是增強 Lambda 函數功能的隨附程序。延伸就像是與 Lambda 叫用平行執行的用戶端。此平行用戶端可在其生命週期中的任何時間點與您的功能連接。如需 Lambda 延伸模組的詳細資訊,請參閱 AWS Lambda 開發人員指南 中的 Lambda 延伸API模組。
AWS 參數和秘密 Lambda 延伸模組適用於兩者 Parameter Store 和 AWS Secrets Manager。若要了解如何將 Lambda 延伸模組與 Secrets Manager 的秘密搭配使用,請參閱 AWS Secrets Manager 使用者指南 中的在 AWS Lambda 函數中使用 AWS Secrets Manager 秘密。
相關資訊
使用 AWS Parameter and Secrets Lambda 延伸模組快取參數和秘密
延伸運作方式
若要在不含 Lambda 擴充功能的 Lambda 函數中使用參數,您必須將 Lambda 函數設定為透過與 GetParameter
API的動作整合來接收組態更新 Parameter Store.
當您使用 AWS Parameters and Secrets Lambda Extension 時,該延伸模組會從 擷取參數值 Parameter Store 並將其儲存在本機快取中。然後,快取值會用於進一步叫用,直至其過期。快取的值在傳遞其 time-to-live () 後過期TTL。您可以使用SSM_PARAMETER_STORE_TTL
環境變數 來設定TTL值,如本主題稍後所述。
如果設定的快取TTL尚未過期,則會使用快取的參數值。如果時間過期,快取的值會失效,並從中擷取參數值 Parameter Store.
此外,系統會偵測經常使用的參數值,並將其保留在快取中,同時清除已過期或未使用的參數值。
實作詳細資訊
使用下列詳細資訊來協助您設定 AWS 參數和秘密 Lambda 延伸模組。
- 身分驗證
-
若要授權和驗證 Parameter Store 請求,延伸模組會使用與用來執行 Lambda 函數本身相同的憑證。因此,用於執行函數的 AWS Identity and Access Management (IAM) 角色必須具有下列許可,才能與 互動 Parameter Store:
-
ssm:GetParameter
– 從 擷取參數所需的 Parameter Store -
kms:Decrypt
– 如果您要從 擷取SecureString
參數,則需要 Parameter Store
如需詳細資訊,請參閱《AWS Lambda 開發人員指南》中的 AWS Lambda 執行角色。
-
- 執行個體化
-
Lambda 會將與函數所要求並行層級相符的另外執行個體具現化。每個執行個體都彼此隔離,並維護自己組態資料的本機快取。如需有關 Lambda 執行個體的詳細資訊,請參閱《AWS Lambda 開發人員指南》中的設定預留並行一節。
- 無SDK相依性
-
AWS 參數和秘密 Lambda 擴充功能的運作與任何 AWS SDK語言程式庫無關。不需要向 AWS SDK提出GET請求 Parameter Store.
- Localhost port
-
在GET請求
localhost
中使用 。延伸模組向 發出請求 localhost 連接埠 2773。您無需指定外部或內部端點即可使用延伸。您可以設定環境變數PARAMETERS_SECRETS_EXTENSION_HTTP_PORT
來設定連接埠。例如,在 Python 中,您的 GETURL看起來可能會類似下列範例。
parameter_url = ('http://localhost:' + port + '/systemsmanager/parameters/get/?name=' + ssm_parameter_path)
- TTL 過期前參數值的變更
-
延伸模組不會偵測到參數值的變更,也不會在 TTL過期之前執行自動重新整理。如果您變更參數值,則使用快取參數值的操作可能會失敗,直至下次重新整理快取為止。如果您預期參數值經常變更,建議您設定較短TTL的值。
- 標頭要求
-
若要從延伸快取擷取參數,GET請求的標頭必須包含
X-Aws-Parameters-Secrets-Token
參考。將字符設定為AWS_SESSION_TOKEN
,這會由 Lambda 針對所有運行中的函數提供。使用此標頭表示呼叫者位於 Lambda 環境中。 - 範例
-
下列 Python 範例示範了擷取快取參數值的基本請求。
import urllib.request import os import json aws_session_token = os.environ.get('AWS_SESSION_TOKEN') def lambda_handler(event, context): # Retrieve /my/parameter from Parameter Store using extension cache req = urllib.request.Request('http://localhost:2773/systemsmanager/parameters/get?name=%2Fmy%2Fparameter') req.add_header('X-Aws-Parameters-Secrets-Token', aws_session_token) config = urllib.request.urlopen(req).read() return json.loads(config)
- ARM 支援
-
延伸模組不支援ARM架構, AWS 區域 其中 x86_64 以及 x86 支援 架構。
如需延伸模組 的完整清單ARNs,請參閱 AWS 參數和秘密 Lambda 延伸模組 ARNs。
- 日誌
-
Lambda 使用 Amazon CloudWatch Logs 記錄有關延伸項目的執行資訊以及 函數。根據預設,延伸模組會將最少量的資訊記錄到 CloudWatch。若要記錄更多詳細資訊,請將環境變數
PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL
設定為DEBUG
。
將延伸新增至 Lambda 函數
若要使用 AWS Parameters and Secrets Lambda 延伸模組,您可以將延伸模組作為層新增至 Lambda 函數。
使用以下方法之一將延伸新增至您的函數。
- AWS Management Console (新增圖層選項)
-
在 開啟 AWS Lambda 主控台https://console.aws.amazon.com/lambda/
。 -
選擇函數。在 Layers (圖層) 區域中,選擇 Add a layer (新增圖層)。
-
在選擇圖層區域中,選擇 AWS 圖層選項。
-
針對 AWS 圖層,選擇 AWS-Parameters-and-Secrets-Lambda-Extension,並選擇版本,然後選擇新增。
- AWS Management Console (指定ARN選項)
-
在 開啟 AWS Lambda 主控台https://console.aws.amazon.com/lambda/
。 -
選擇函數。在 Layers (圖層) 區域中,選擇 Add a layer (新增圖層)。
-
在選擇圖層區域中,選擇指定ARN選項。
-
對於指定 ARN,輸入 AWS 區域 和 架構 ARN的延伸,然後選擇新增 。
- AWS Command Line Interface
-
在 AWS CLI中執行以下命令。取代每個
example resource placeholder
使用您自己的資訊。aws lambda update-function-configuration \ --function-name
function-name
\ --layerslayer-ARN
相關資訊
AWS 參數和秘密 Lambda 延伸環境變數
您可以變更下列環境變數來設定延伸。若要查看目前的設定,請將 PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL
設定為 DEBUG
。如需詳細資訊,請參閱 AWS Lambda 開發人員指南 中的使用 AWS Lambda 環境變數。
注意
AWS Lambda 在 Amazon CloudWatch Logs 中記錄 Lambda 延伸模組和 Lambda 函數的操作詳細資訊。
環境變數 | 詳細資訊 | 必要 | 有效值 | 預設值 |
---|---|---|---|---|
|
請求的逾時,以毫秒為單位 Parameter Store.
0 (零) 值表示沒有逾時。 |
否 | 所有整數 | 0 (零) |
|
對 Secrets Manager 的請求逾時 (以毫秒為單位)。
0 (零) 值表示沒有逾時。 |
否 | 所有整數 |
0 (零) |
|
快取中參數失效之前的最大有效期限 (以秒為單位)。0 (零) 值表示應略過快取。如果 |
否 | 0 (零) 至 300 秒 (五分鐘) | 300 秒 (五分鐘) |
|
快取中機密失效之前的最大有效期限 (以秒為單位)。0 (零) 值表示略過快取。如果 |
否 | 0 (零) 至 300 秒 (五分鐘) | 300 秒 (5 分鐘) |
PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED |
確定是否啟用此延伸的快取。有效值: |
否 | TRUE | FALSE | TRUE |
PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE |
在項目數方面的快取大小上限。0 (零) 值表示略過快取。如果兩個快取TTL值都是 0 (零),則會忽略此變數。 |
否 | 0 (零) 至 1000 |
1000 |
PARAMETERS_SECRETS_EXTENSION_HTTP_PORT |
本機HTTP伺服器的連接埠。 | 否 | 1 - 65535 |
2773 |
PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS |
擴充功能用來向 發出請求之HTTP用戶端的連線數目上限 Parameter Store 或 Secrets Manager。這是 Secrets Manager 用戶端和 連線數目的每個用戶端組態 Parameter Store 用戶端對後端服務進行 。 |
否 | 最少 1 個;沒有上限。 |
3 |
PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL |
延伸日誌中報告的詳細資訊層級。 我們建議您在設定和測試延伸時,使用 Lambda 操作的日誌會自動推送至相關聯的 CloudWatch 日誌群組。 |
否 |
|
INFO |
使用 的範例命令 AWS Systems Manager Parameter Store 和 AWS Secrets Manager 延伸模組
本節中的範例示範搭配 使用API的動作 AWS Systems Manager Parameter Store 和 AWS Secrets Manager 擴充功能。
的範例命令 Parameter Store
Lambda 延伸模組會使用 GetParameterAPI動作的唯讀存取權。
若要呼叫此動作,請進行類似下列的HTTPGET呼叫。此命令格式可讓您存取標準參數層中的參數。
GET http://localhost:
port
/systemsmanager/parameters/get?name=parameter-name
&version=version
&label=label
&withDecryption={true|false}
就本範例而言,parameter-name
代表不在階層中的參數,或名為 /Dev/Production/East/Project-ABC/MyParameter
且屬於階層一部分的%2FDev%2FProduction%2FEast%2FProject-ABC%2FMyParameter
參數的完整參數名稱MyParameter
,例如 。
注意
使用 GET 呼叫時,參數值必須編碼為 HTTP,以保留特殊字元。例如, 不會將階層式路徑格式化為 /a/b/c
,而是編碼可以解譯為 一部分的字元URL,例如 %2Fa%2Fb%2Fc
。
version
以及 label
是可用於 GetParameter
動作的選取器。
GET http://localhost:
port
/systemsmanager/parameters/get/?name=MyParameter&version=5
若要呼叫階層中的參數,請進行類似下列的HTTPGET呼叫。
GET http://localhost:
port
/systemsmanager/parameters/get?name=%2Fa%2Fb%2F&label=release
若要呼叫公有 (全域) 參數,請進行類似下列的HTTPGET呼叫。
GET http://localhost:
port
/systemsmanager/parameters/get/?name=%2Faws%2Fservice%20list%2F…
使用 HTTPGET呼叫 Secrets Manager 秘密 Parameter Store 參考,進行類似下列的HTTPGET呼叫。
GET http://localhost:
port
/systemsmanager/parameters/get?name=%2Faws%2Freference%2Fsecretsmanager%2F…
若要使用 參數的 Amazon Resource Name (ARN) 進行呼叫,請進行類似下列的HTTPGET呼叫。
GET http://localhost:
port
/systemsmanager/parameters/get?name=arn:aws:ssm:us-east-1:123456789012:parameter/MyParameter
若要進行存取具有解密之SecureString
參數的呼叫,請進行類似下列的HTTPGET呼叫。
GET http://localhost:
port
/systemsmanager/parameters/get?name=MyParameter&withDecryption=true
您可以省略 withDecryption
或明確地將其設定為 false
,藉此來指定不解密的參數。您還可以指定版本或標籤,但不能同時指定兩者。如果您這樣做,只會URL使用 中問號 (?
) 之後放置的第一個。
AWS 參數和秘密 Lambda 延伸模組 ARNs
下表ARNs為支援的架構和區域提供擴充功能。
ARNs 的擴充功能 x86_64 以及 x86 架構
最後更新日期:2024 年 9 月 19 日
區域 | ARN |
---|---|
美國東部 (俄亥俄) |
|
美國東部 (維吉尼亞北部) |
|
美國西部 (加利佛尼亞北部) |
|
美國西部 (奧勒岡) |
|
非洲 (開普敦) |
|
Asia Pacific (Hong Kong) |
|
亞太區域 (海德拉巴) |
|
亞太區域 (雅加達) |
|
亞太區域 (墨爾本) |
|
亞太區域 (馬來西亞) |
arn:aws:lambda:ap-southeast-5:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1 |
亞太區域 (孟買) |
|
亞太區域 (大阪) |
|
亞太區域 (首爾) |
|
亞太區域 (新加坡) |
|
亞太區域 (雪梨) |
|
亞太區域 (東京) |
|
加拿大 (中部) |
|
加拿大西部 (卡加利) | arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2 |
中國 (北京) |
|
中國 (寧夏) |
|
歐洲 (法蘭克福) |
|
歐洲 (愛爾蘭) |
|
歐洲 (倫敦) |
|
歐洲 (米蘭) |
|
Europe (Paris) |
|
歐洲 (西班牙) 區域 |
|
歐洲 (斯德哥爾摩) |
|
以色列 (特拉維夫) |
|
歐洲 (蘇黎世) 區域 |
|
Middle East (Bahrain) |
|
中東 (UAE) | arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension:12 |
南美洲 (聖保羅) |
|
AWS GovCloud (美國東部) |
|
AWS GovCloud (美國西部) |
|
ARNs 的擴充功能 ARM64 以及 Mac with Apple silicon 架構
最後更新日期:2024 年 9 月 19 日
區域 | ARN |
---|---|
美國東部 (俄亥俄) |
|
美國東部 (維吉尼亞北部) |
|
美國西部 (加利佛尼亞北部) 區域 |
|
美國西部 (奧勒岡) |
|
非洲 (開普敦) 區域 |
|
亞太區域 (香港) 區域 |
|
亞太區域 (海德拉巴) |
|
亞太區域 (雅加達) |
|
亞太區域 (墨爾本) |
|
亞太區域 (馬來西亞) |
arn:aws:lambda:ap-southeast-5:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:1 |
亞太區域 (孟買) |
|
亞太區域 (大阪) |
|
亞太 (首爾) 區域 |
|
亞太區域 (新加坡) |
|
亞太區域 (雪梨) |
|
亞太區域 (東京) |
|
加拿大 (中部) 區域 |
|
加拿大西部 (卡加利) | arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:1 |
中國 (北京) |
|
中國 (寧夏) |
|
歐洲 (法蘭克福) |
|
歐洲 (愛爾蘭) |
|
歐洲 (倫敦) |
|
Europe (Milan) Region |
|
歐洲 (巴黎) 區域 |
|
歐洲 (西班牙) 區域 |
|
歐洲 (斯德哥爾摩) 區域 |
|
以色列 (特拉維夫) |
|
歐洲 (蘇黎世) 區域 |
|
Middle East (Bahrain) Region |
|
中東 (UAE) | arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm:1 |
南美洲 (聖保羅) 區域 |
|
AWS GovCloud (美國東部) |
|
AWS GovCloud (美國西部) |
|