在 AWS Lambda 函數中使用 Parameter Store 參數 - AWS Systems Manager

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

在 AWS Lambda 函數中使用 Parameter Store 參數

Parameter Store的功能 AWS Systems Manager,提供安全的階層式儲存,以進行組態資料管理和密碼管理。您可以存放密碼、資料庫字串、Amazon Machine Image (AMI) ID 和授權碼之類的資料做為參數值。

若要在不使用 SDK 的情況下Parameter Store在 AWS Lambda 函數中使用參數,您可以使用 AWS 參數和機密 Lambda 擴充功能。此延伸會擷取參數值並對其進行快取以供今後使用。使用 Lambda 延伸可藉由減少對 Parameter Store 的 API 呼叫次數來降低成本。使用延伸還可改善延遲,因為擷取快取的參數比從 Parameter Store 中擷取該參數快。

Lambda 延伸是增強 Lambda 函數功能的隨附程序。延伸就像是與 Lambda 叫用平行執行的用戶端。此平行用戶端可在其生命週期中的任何時間點與您的功能連接。如需有關 Lambda 延伸的詳細資訊,請參閱《AWS Lambda 開發人員指南》https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html中的 Lambda 延伸 API

AWS 參數和機密 Lambda 擴充功能適用於Parameter Store和 AWS Secrets Manager. 若要了解如何將 Lambda 擴充功能與來自 Secret 管理員的密碼搭配使用,請參閱使用AWS Secrets Manager 者指南中的在 AWS Lambda 函數中使用 AWS Secrets Manager 密碼。

相關資訊

使用 AWS 參數和機密 Lambda 擴充功能快取參數和密碼 (AWS 運算部落格)

延伸運作方式

若要在沒有 Lambda 延伸的情況下使用 Lambda 函數中的參數,必須將 Lambda 函數設定為透過整合 Parameter Store 的 GetParameter API 動作來接收組態更新。

當您使用 AWS 參數和 Secret Lambda 擴充功能時,擴充功能會從中擷取參數值,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 – 要從 Parameter Store 中擷取 SecureString 參數時需要

如需詳細資訊,請參閱《AWS Lambda 開發人員指南》中的 AWS Lambda 執行角色

執行個體化

Lambda 會將與函數所要求並行層級相符的另外執行個體具現化。每個執行個體都彼此隔離,並維護自己組態資料的本機快取。如需有關 Lambda 執行個體的詳細資訊,請參閱《AWS Lambda 開發人員指南》中的設定預留並行一節。

沒有 SDK 相依性

AWS 參數和機密 Lambda 擴充功能的運作獨立於任何 AWS SDK 語言程式庫。向其發出 GET 請求不需要 AWS SDK Parameter Store。

Localhost 連接埠

在 GET 請求中使用 localhost。延伸會向 localhost 連接埠 2773 提出請求。您無需指定外部或內部端點即可使用延伸。您可以設定環境變數 PARAMETERS_SECRETS_EXTENSION_HTTP_PORT 來設定連接埠。

例如,在 Python 中,您的 GET URL 可能看起來像下面的範例。

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 支援

在支援和架構的情 AWS 區域 況下,擴充功能x86_64並不支援 ARM x86 架構。

如需延伸 ARN 的完整清單,請參閱 AWS 參數和秘密 Lambda 擴展 ARN

日誌

Lambda 使用 Amazon CloudWatch 日誌記錄有關擴展程序的執行信息以及該函數。根據預設,擴充功能會將最少量的資訊記錄到 CloudWatch。若要記錄更多詳細資訊,請將環境變數 PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL 設定為 DEBUG

將延伸新增至 Lambda 函數

若要使用 AWS 參數和秘密 Lambda 擴充功能,您可以將擴充功能新增至 Lambda 函數做為一個層。

使用以下方法之一將延伸新增至您的函數。

AWS Management Console (新增圖層選項)
  1. 請在以下位置開啟 AWS Lambda 主控台。 https://console.aws.amazon.com/lambda/

  2. 選擇函數。在 Layers (圖層) 區域中,選擇 Add a layer (新增圖層)。

  3. 選擇圖層區域中,選擇 AWS 圖層選項。

  4. 針對 AWS 圖層,選擇 AWS-Parameters-and-Secrets-Lambda-Extension,並選擇版本,然後選擇新增

AWS Management Console (指定 ARN 選項)
  1. 請在以下位置開啟 AWS Lambda 主控台。 https://console.aws.amazon.com/lambda/

  2. 選擇函數。在 Layers (圖層) 區域中,選擇 Add a layer (新增圖層)。

  3. Choose a layer (選擇圖層) 區域中,選擇 Specify an ARN (指定 ARN) 選項。

  4. 針對 [指定 ARN],輸入您 AWS 區域 和架構的擴充功能 ARN,然後選擇 [新增]。

AWS Command Line Interface

在 AWS CLI中執行以下命令。將每個範例資源預留位置取代為您自己的資訊。

aws lambda update-function-configuration \ --function-name function-name \ --layers layer-ARN

相關資訊

搭配使用圖層和 Lambda 函數

設定延伸 (.zip 檔案封存)

AWS 參數和秘密 Lambda 擴充環境變數

您可以變更下列環境變數來設定延伸。若要查看目前的設定,請將 PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL 設定為 DEBUG。如需詳細資訊,請參閱AWS Lambda 開發人員指南中的使用 AWS Lambda 環境變數

注意

AWS Lambda 在 Amazon CloudWatch 日誌中記錄有關 Lambda 擴展和 Lambda 函數的操作詳細信息

環境變數 詳細資訊 必要 有效值 預設值

SSM_PARAMETER_STORE_TIMEOUT_MILLIS

對 Parameter Store 的請求逾時 (以毫秒為單位)。

0 (零) 值表示沒有逾時。

所有整數 0 (零)

SECRETS_MANAGER_TIMEOUT_MILLIS

對 Secrets Manager 的請求逾時 (以毫秒為單位)。

0 (零) 值表示沒有逾時。

所有整數

0 (零)

SSM_PARAMETER_STORE_TTL

快取中參數失效之前的最大有效期限 (以秒為單位)。0 (零) 值表示應略過快取。如果 PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE 的值為 0 (零),則會忽略此變數。

0 (零) 至 300 秒 (五分鐘) 300 秒 (五分鐘)

SECRETS_MANAGER_TTL

快取中機密失效之前的最大有效期限 (以秒為單位)。0 (零) 值表示略過快取。如果 PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE 的值為 0 (零),則會忽略此變數。

0 (零) 至 300 秒 (五分鐘) 300 秒 (5 分鐘)
PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED

確定是否啟用此延伸的快取。有效值:TRUE | FALSE

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

延伸用於向 Parameter Store 或 Secrets Manager 提出請求的 HTTP 用戶端連線數量上限。這是針對 Secrets Manager 用戶端和 Parameter Store 用戶端對後端服務建立連線數目的每個用戶端組態。

最少 1 個;沒有上限。

3

PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL

延伸日誌中報告的詳細資訊層級。

我們建議您在設定和測試延伸時,使用 DEBUG 了解快取組態的大多數詳細資訊。

Lambda 作業的記錄會自動推送至關聯的 CloudWatch 記錄日誌群組。

DEBUG | WARN | ERROR | NONE | INFO

INFO

使用 AWS Systems Manager Parameter Store 和 AWS Secrets Manager 延伸的範例指令

本節中的範例示範了與 AWS Systems Manager Parameter Store和 AWS Secrets Manager 擴充功能搭配使用的 API 動作。

Parameter Store 的範例命令

Lambda 擴充功能會使用 GetParameterAPI 動作的唯讀存取權。

若要呼叫此動作,請進行類似下列內容的 HTTP GET 呼叫。

GET http://localhost:port/systemsmanager/parameters/get?name=parameter-path&version=version&label=label&withDecryption={true|false}

在此範例中,參數路徑代表完整的參數名稱。 版本標籤是可與GetParameter動作搭配使用的選取器。此命令格式可讓您存取標準參數層中的參數。

注意

使用 GET 呼叫時,必須針對 HTTP 編碼參數值才能保留特殊字元。例如,不要格式化 /a/b/c 之類的階層式路徑,而是將可解譯為 URL 一部分的字元進行編碼,例如 %2Fa%2Fb%2Fc

GET http://localhost:port/systemsmanager/parameters/get/?name=MyParameter&version=5

若要呼叫階層中的參數,請進行類似下列所示的 HTTP GET 呼叫。

GET http://localhost:port/systemsmanager/parameters/get?name=%2Fa%2Fb%2F&label=release

若要呼叫公有 (全域) 參數,請進行類似下列所示的 HTTP GET 呼叫。

GET http://localhost:port/systemsmanager/parameters/get/?name=%2Faws%2Fservice%20list%2F…

若要使用 Parameter Store 參考來對 Secrets Manager 機密進行 HTTP GET 呼叫,請進行類似下列所示的 HTTP GET 呼叫。

GET http://localhost:port/systemsmanager/parameters/get?name=%2Faws%2Freference%2Fsecretsmanager%2F…

若要使用 Amazon Resource Name (ARN) 做為參數進行呼叫,請進行類似於下列所示的 HTTP GET 呼叫。

GET http://localhost:port/systemsmanager/parameters/get?name=arn:aws:ssm:us-east-1:123456789012:parameter/MyParameter

若要透過解密方式存取 SecureString 參數進行呼叫,請進行類似下列所示的 HTTP GET 呼叫。

GET http://localhost:port/systemsmanager/parameters/get?name=MyParameter&withDecryption=true

您可以省略 withDecryption 或明確地將其設定為 false,藉此來指定不解密的參數。您還可以指定版本或標籤,但不能同時指定兩者。如果這樣做,則只會使用 URL 中問號 (?) 後面的第一項。

AWS 參數和秘密 Lambda 擴展 ARN

下表針對支援的架構和區域提供了延伸 ARN。

適用於 x86_64 和 x86 架構的延伸 ARN

區域 ARN

美國東部 (俄亥俄)

arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

美國東部 (維吉尼亞北部)

arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

美國西部 (加利佛尼亞北部)

arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

美國西部 (奧勒岡)

arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

非洲 (開普敦)

arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Asia Pacific (Hong Kong)

arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

亞太區域 (海德拉巴)

arn:aws:lambda:ap-south-2:070087711984:layer:AWS-Parameters-and-Secrets-Lambda-Extension:8

亞太區域 (雅加達)

arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

亞太區域 (墨爾本)

arn:aws:lambda:ap-southeast-4:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1

亞太區域 (孟買)

arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

亞太區域 (大阪)

arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

亞太區域 (首爾)

arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

亞太區域 (新加坡)

arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

亞太區域 (雪梨)

arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

亞太區域 (東京)

arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

加拿大 (中部)

arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

加拿大西部 (卡加利) arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1
中國 (北京)

arn:aws-cn:lambda:cn-north-1:287114880934:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

中國 (寧夏)

arn:aws-cn:lambda:cn-northwest-1:287310001119:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

歐洲 (法蘭克福)

arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

歐洲 (愛爾蘭)

arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

歐洲 (倫敦)

arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

歐洲 (米蘭)

arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

Europe (Paris)

arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

歐洲 (西班牙) 區域

arn:aws:lambda:eu-south-2:524103009944:layer:AWS-Parameters-and-Secrets-Lambda-Extension:8

歐洲 (斯德哥爾摩)

arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

以色列 (特拉維夫)

arn:aws:lambda:il-central-1:148806536434:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1

歐洲 (蘇黎世) 區域

arn:aws:lambda:eu-central-2:772501565639:layer:AWS-Parameters-and-Secrets-Lambda-Extension:8

Middle East (Bahrain)

arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

中東 (阿拉伯聯合大公國) arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

南美洲 (聖保羅)

arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

AWS GovCloud (美國東部)

arn:aws-us-gov:lambda:us-gov-east-1:129776340158:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

AWS GovCloud (美國西部)

arn:aws-us-gov:lambda:us-gov-west-1:127562683043:layer:AWS-Parameters-and-Secrets-Lambda-Extension:11

適用於ARM64及Mac with Apple silicon架構的延伸 ARN

區域 ARN

美國東部 (俄亥俄)

arn:aws:lambda:us-east-2:590474943231:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

美國東部 (維吉尼亞北部)

arn:aws:lambda:us-east-1:177933569100:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

美國西部 (加利佛尼亞北部) 區域

arn:aws:lambda:us-west-1:997803712105:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

美國西部 (奧勒岡)

arn:aws:lambda:us-west-2:345057560386:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

非洲 (開普敦) 區域

arn:aws:lambda:af-south-1:317013901791:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

亞太區域 (香港) 區域

arn:aws:lambda:ap-east-1:768336418462:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

亞太區域 (雅加達)

arn:aws:lambda:ap-southeast-3:490737872127:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

亞太區域 (孟買)

arn:aws:lambda:ap-south-1:176022468876:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

亞太區域 (大阪)

arn:aws:lambda:ap-northeast-3:576959938190:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

亞太 (首爾) 區域

arn:aws:lambda:ap-northeast-2:738900069198:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

亞太區域 (新加坡)

arn:aws:lambda:ap-southeast-1:044395824272:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

亞太區域 (雪梨)

arn:aws:lambda:ap-southeast-2:665172237481:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

亞太區域 (東京)

arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

加拿大 (中部) 區域

arn:aws:lambda:ca-central-1:200266452380:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

歐洲 (法蘭克福)

arn:aws:lambda:eu-central-1:187925254637:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

歐洲 (愛爾蘭)

arn:aws:lambda:eu-west-1:015030872274:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

歐洲 (倫敦)

arn:aws:lambda:eu-west-2:133256977650:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:11

Europe (Milan) Region

arn:aws:lambda:eu-south-1:325218067255:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

歐洲 (巴黎) 區域

arn:aws:lambda:eu-west-3:780235371811:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

歐洲 (斯德哥爾摩) 區域

arn:aws:lambda:eu-north-1:427196147048:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

Middle East (Bahrain) Region

arn:aws:lambda:me-south-1:832021897121:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8

南美洲 (聖保羅) 區域

arn:aws:lambda:sa-east-1:933737806257:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:8