Parameter Store, eine Funktion von AWS Systems Manager, stellt eine sichere, hierarchische Speicherung für Verwaltung von Konfigurationsdaten und Geheimnissen bereit. Sie können Daten wie Passwörter, Datenbankzeichenfolgen, Amazon Machine Image (AMI) IDs und Lizenzcodes als Parameterwerte speichern.
Um Parameter von Parameter Store in AWS Lambda-Funktionen zu verwenden, ohne ein SDK zu verwenden, können Sie die AWS-Parameter und Secrets-Lambda-Erweiterung verwenden. Diese Erweiterung ruft Parameterwerte ab und speichert sie zur späteren Verwendung. Durch die Verwendung der Lambda-Erweiterung können Sie Ihre Kosten senken, indem Sie die Anzahl der API-Aufrufe auf Parameter Store reduzieren. Durch die Verwendung der Erweiterung kann auch die Latenzzeit verbessert werden, da der Abruf eines zwischengespeicherten Parameters schneller ist als der Abruf von Parameter Store.
Eine Lambda-Erweiterung ist ein begleitender Prozess, der die Fähigkeiten einer Lambda-Funktion erweitert. Eine Erweiterung ist wie ein Client, der parallel zu einem Lambda-Aufruf ausgeführt wird. Dieser parallele Client kann jederzeit während seines Lebenszyklus mit Ihrer Funktion verbunden werden. Weitere Informationen zu Lambda-Erweiterungen finden Sie unter Lambda-Erweiterungs-API im AWS Lambda-Entwicklerhandbuch.
Die AWS-Parameter und Secrets-Lambda-Erweiterung funktioniert sowohl für Parameter Store als auch für AWS Secrets Manager. Informationen zur Verwendung der Lambda-Erweiterung mit Secrets von Secrets Manager finden Sie unter Verwendung von AWS Secrets Manager-Secrets in AWS Lambda-Funktionen im AWS Secrets Manager-Benutzerhandbuch.
Verwandte Informationen
Verwenden der AWS-Parameter und Secrets-Lambda-Erweiterung zum Zwischenspeichern von Parametern und Geheimnissen
So funktioniert die Erweiterung
Um Parameter in einer Lambda-Funktion ohne die Lambda-Erweiterung zu verwenden, müssen Sie Ihre Lambda-Funktion so konfigurieren, dass sie Konfigurationsaktualisierungen erhält, indem Sie sie in die GetParameter
-API-Aktion für Parameter Store integrieren.
Wenn Sie die AWS-Parameter und Secrets-Lambda-Erweiterung verwenden, ruft die Erweiterung den Parameterwert von Parameter Store ab und speichert ihn im lokalen Cache. Dann wird der zwischengespeicherte Wert für weitere Aufrufe verwendet, bis er abläuft. Zwischengespeicherte Werte verfallen, nachdem sie ihre Lebensdauer (TTL) überschritten haben. Sie können den TTL-Wert mithilfe der Umgebungsvariablen SSM_PARAMETER_STORE_TTL
konfigurieren, wie weiter unten in diesem Thema erläutert.
Wenn die konfigurierte Cache-TTL nicht abgelaufen ist, wird der zwischengespeicherte Parameterwert verwendet. Wenn die Zeit abgelaufen ist, wird der zwischengespeicherte Wert ungültig und der Parameterwert wird von Parameter Store abgerufen.
Außerdem erkennt das System Parameterwerte, die häufig verwendet werden, und behält sie im Cache bei, während abgelaufene oder nicht verwendete Werte gelöscht werden.
Wichtig
Die Erweiterung kann nur in der INVOKE
-Phase des Lambda und nicht während der INIT
-Phase aufgerufen werden.
Implementierungsinformationen
Verwenden Sie die folgenden Details, um die AWS-Parameter und Secrets-Lambda-Erweiterung zu konfigurieren.
- Authentifizierung
-
Um Parameter Store-Anfragen zu autorisieren und zu authentifizieren, verwendet die Erweiterung dieselben Anmeldeinformationen wie diejenigen, die zum Ausführen der Lambda-Funktion verwendet werden. Daher muss die AWS Identity and Access Management (IAM)-Rolle, die zum Ausführen der Funktion verwendet wird, über die folgenden Berechtigungen verfügen, um mit Parameter Store zu interagieren:
-
ssm:GetParameter
– Erforderlich, um Parameter von Parameter Store abzurufen -
kms:Decrypt
– Erforderlich, wenn SieSecureString
-Parameter von Parameter Store abrufen
Weitere Informationen finden Sie unter AWS Lambda-Ausführungsrolle im AWS Lambda-Entwicklerhandbuch.
-
- Instanziierung
-
Lambda instanziiert separate Instances, die der Gleichzeitigkeitsstufe entsprechen, die Ihre Funktion benötigt. Jede Instance ist isoliert und verwaltet ihren eigenen lokalen Cache Ihrer Konfigurationsdaten. Weitere Informationen über Lambda-Instances und Gleichzeitigkeit finden Sie unter Konfigurieren der reservierten Währung im AWS Lambda-Entwicklerhandbuch.
- Keine SDK-Abhängigkeit
-
Die AWS-Parameter and Secrets-Lambda-Erweiterung funktioniert unabhängig von jeder AWS-SDK-Sprachbibliothek. Ein AWS-SDK ist nicht erforderlich, um GET-Anfragen an Parameter Store zu stellen.
- Localhost-Port
-
Verwenden Sie
localhost
in Ihren GET-Anfragen. Die Erweiterung stellt Anfragen an den localhost-Port 2773. Sie müssen keinen externen oder internen Endpunkt angeben, um die Erweiterung zu verwenden. Sie können den Port konfigurieren, indem Sie die Umgebungsvariable aufPARAMETERS_SECRETS_EXTENSION_HTTP_PORT
setzen.In Python könnte Ihre GET-URL beispielsweise wie im folgenden Beispiel aussehen.
parameter_url = ('http://localhost:' + port + '/systemsmanager/parameters/get/?name=' + ssm_parameter_path)
- Änderungen an einem Parameterwert, bevor TTL abläuft
-
Die Erweiterung erkennt keine Änderungen am Parameterwert und führt keine automatische Aktualisierung durch, bevor die TTL abläuft. Wenn Sie einen Parameterwert ändern, schlagen Vorgänge, die den zwischengespeicherten Parameterwert verwenden, möglicherweise fehl, bis der Cache das nächste Mal aktualisiert wird. Wenn Sie häufige Änderungen an einem Parameterwert erwarten, empfehlen wir Ihnen, einen kürzeren TTL-Wert einzustellen.
- Anfordern eines Headers
-
Um Parameter aus dem Erweiterungs-Cache abzurufen, muss der Header Ihrer GET-Anfrage eine
X-Aws-Parameters-Secrets-Token
-Referenz enthalten. Setzen Sie das Token aufAWS_SESSION_TOKEN
, das von Lambda für alle laufenden Funktionen bereitgestellt wird. Die Verwendung dieses Headers zeigt an, dass sich der Anrufer in der Lambda-Umgebung befindet. - Beispiel
-
Das folgende Beispiel in Python demonstriert eine einfache Anfrage zum Abrufen des Wertes eines zwischengespeicherten Parameters.
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-Unterstützung
-
Die Erweiterung unterstützt die ARM-Architektur in den meisten AWS-Regionen, in denen die x86_64- und x86-Architekturen unterstützt werden. Wenn Sie die ARM-Architektur verwenden, empfehlen wir Ihnen, zu überprüfen, ob Ihre Architektur unterstützt wird. Eine vollständige Liste der Erweiterungs-ARNs finden Sie unter AWS-Parameter und Secrets Lambda Extension ARNs.
- Protokollierung
-
Lambda protokolliert Ausführungsinformationen über die Erweiterung zusammen mit der Funktion mithilfe von Amazon CloudWatch Logs. Standardmäßig protokolliert die Erweiterung eine minimale Menge an Informationen in CloudWatch. Um weitere Details zu protokollieren, setzen Sie die Umgebungsvariable
PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL
aufDEBUG
.
Hinzufügen der Erweiterung zu einer Lambda-Funktion
Um die AWS-Parameter und Secrets-Lambda-Erweiterung zu verwenden, fügen Sie die Erweiterung als Ebene zu Ihrer Lambda-Funktion hinzu.
Verwenden Sie eine der folgenden Methoden, um die Erweiterung zu Ihrer Funktion hinzuzufügen.
- AWS Management Console (Option „Ebene hinzufügen“)
-
Öffnen Sie die AWS Lambda-Konsole unter https://console.aws.amazon.com/lambda/
. -
Wählen Sie Ihre Funktion. Wählen Sie im Bereich Layers (Ebenen) die Option Add a layer (Ebene hinzufügen) aus.
-
Wählen Sie im Bereich Eine Ebene auswählen die Option AWS-Ebenen aus.
-
Wählen Sie für AWS-Ebenen AWS-Parameter und Secrets-Lambda-Erweiterung aus, wählen Sie eine Version und wählen Sie anschließend Hinzufügen aus.
- AWS Management Console (Option ARN angeben)
-
Öffnen Sie die AWS Lambda-Konsole unter https://console.aws.amazon.com/lambda/
. -
Wählen Sie Ihre Funktion. Wählen Sie im Bereich Layers (Ebenen) die Option Add a layer (Ebene hinzufügen) aus.
-
Wählen Sie im Bereich Choose a layer (Ebene auswählen) die Option Specify an ARN (ARN angeben) aus.
-
Geben Sie unter Specify an ARN (ARN angeben) die ARN-Erweiterung für Ihre AWS-Region und Architektur ein und wählen Sie dann Add (Hinzufügen) aus.
- AWS Command Line Interface
-
Führen Sie in der AWS CLI den folgenden aus. Ersetzen Sie jeden
Beispiel Platzhalter für Ressourcen
mit Ihren eigenen Informationen.aws lambda update-function-configuration \ --function-name
function-name
\ --layerslayer-ARN
Ähnliche Informationen
Verwenden von Ebenen mit Ihrer Lambda-Funktion
Konfigurieren von Erweiterungen (ZIP-Dateiarchiv)
AWS-Parameter und Umgebungsvariablen von Secrets Lambda Extension
Sie können die Erweiterung konfigurieren, indem Sie die folgenden Umgebungsvariablen ändern. Um die aktuellen Einstellungen zu sehen, setzen Sie PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL
auf DEBUG
. Weitere Informationen finden Sie unter Verwenden von AWS Lambda-Umgebungsvariablen im AWS Lambda-Entwicklerhandbuch.
Anmerkung
AWS Lambda zeichnet Betriebsdetails über die Lambda-Erweiterung und die Lambda-Funktion in Amazon CloudWatch Logs auf.
Umgebungsvariable | Details | Erforderlich | Zulässige Werte | Standardwert |
---|---|---|---|---|
|
Timeout in Millisekunden für Anfragen an Parameter Store.
Ein Wert von 0 (null) gibt an, dass kein Timeout vorliegt. |
Nein | Alle ganzen Zahlen | 0 (Null) |
|
Timeout in Millisekunden für Anfragen an Secrets Manager.
Ein Wert von 0 (null) gibt an, dass kein Timeout vorliegt. |
Nein | Alle ganzen Zahlen |
0 (Null) |
|
Maximal gültige Lebensdauer eines Parameters im Cache in Sekunden, bevor er ungültig wird. Ein Wert von 0 (Null) gibt an, dass der Cache umgangen werden soll. Diese Variable wird ignoriert, wenn der Wert für |
Nein | 0 (Null) bis 300 Sek. (Fünf Minuten) | 300 Sek. (Fünf Minuten) |
|
Maximal gültige Lebensdauer eines Secrets im Cache in Sekunden, bevor es ungültig wird. Ein Wert von 0 (Null) gibt an, dass der Cache umgangen wurde. Diese Variable wird ignoriert, wenn der Wert für |
Nein | 0 (Null) bis 300 Sek. (Fünf Minuten) | 300 Sek. (5 Minuten) |
PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED |
Bestimmt, ob der Cache für die Erweiterung aktiviert ist. Gültige Werte: |
Nein | TRUE | FALSE | TRUE |
PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE |
Die maximale Größe des Caches in Bezug auf die Anzahl der Elemente. Ein Wert von 0 (Null) gibt an, dass der Cache umgangen wurde. Diese Variable wird ignoriert, wenn beide Cache-TTL-Werte 0 (Null) sind. |
Nein | 0 (Null) bis 1 000 |
1000 |
PARAMETERS_SECRETS_EXTENSION_HTTP_PORT |
Der Port für den lokalen HTTP-Server. | Nein | 1–65 535 |
2 773 |
PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS |
Maximale Anzahl von Verbindungen für die HTTP-Clients, die die Erweiterung verwendet, um Anfragen an Parameter Store oder Secrets Manager zu stellen. Dies ist eine Konfiguration pro Client für die Anzahl der Verbindungen, die sowohl der Secrets-Manager-Client als auch der Parameter Store-Client zu den Backend-Diensten herstellen. |
Nein | Mindestens 1; Keine Höchstgrenze. |
3 |
PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL |
Der Detaillierungsgrad, der in Protokollen für die Erweiterung gemeldet wird. Wir empfehlen die Verwendung von Protokolle für Lambda-Vorgänge werden automatisch an eine zugehörige CloudWatch-Logs-Protokollgruppe übertragen. |
Nein |
|
INFO |
Beispielbefehle für die Verwendung der AWS Systems Manager Parameter Store- und AWS Secrets Manager-Erweiterung
Die Beispiele in diesem Abschnitt zeigen API-Aktionen zur Verwendung mit der AWS Systems Manager Parameter Store- und AWS Secrets Manager-Erweiterung an.
Beispielbefehle für Parameter Store
Die Lambda-Erweiterung verwendet schreibgeschützten Zugriff auf die API-Aktion GetParameter.
Führen Sie zum Aufrufen dieser Aktion einen HTTP-GET-Aufruf ähnlich dem folgenden durch. Dieses Befehlsformat bietet Zugriff auf Parameter in der Standardparameterebene.
GET http://localhost:
port
/systemsmanager/parameters/get?name=parameter-name
&version=version
&label=label
&withDecryption={true|false}
In diesem Beispiel steht Parametername
für den vollständigen Parameternamen, z. B. MyParameter
, für einen Parameter, der sich nicht in einer Hierarchie befindet, oder %2FDev%2FProduction%2FEast%2FProject-ABC%2FMyParameter
für einen Parameter mit dem Namen /Dev/Production/East/Project-ABC/MyParameter
, der Teil einer Hierarchie ist.
Anmerkung
Bei Verwendung von GET-Aufrufen müssen Parameterwerte für HTTP codiert werden, um Sonderzeichen zu erhalten. Anstatt beispielsweise einen hierarchischen Pfad wie /a/b/c
zu formatieren, codieren Sie Zeichen, die als Teil der URL interpretiert werden könnten, wie z. B. %2Fa%2Fb%2Fc
.
Version
und Label
sind die Selektoren, die für die Verwendung mit der Aktion GetParameter
verfügbar sind.
GET http://localhost:
port
/systemsmanager/parameters/get/?name=MyParameter&version=5
Um einen Parameter in einer Hierarchie aufzurufen, führen Sie einen HTTP-GET-Aufruf ähnlich dem folgenden durch.
GET http://localhost:
port
/systemsmanager/parameters/get?name=%2Fa%2Fb%2F&label=release
Um einen öffentlichen (globalen) Parameter aufzurufen, führen Sie einen HTTP-GET-Aufruf ähnlich dem folgenden durch.
GET http://localhost:
port
/systemsmanager/parameters/get/?name=%2Faws%2Fservice%20list%2F…
Um einen HTTP-GET-Aufruf an ein Secrets-Manager-Secret mithilfe von Parameter Store-Referenzen durchzuführen, führen Sie einen HTTP-GET-Aufruf ähnlich dem folgenden durch.
GET http://localhost:
port
/systemsmanager/parameters/get?name=%2Faws%2Freference%2Fsecretsmanager%2F…
Um einen Aufruf unter Verwendung des Amazon-Ressourcennamens (ARN) für einen Parameter zu tätigen, führen Sie einen HTTP-GET-Aufruf ähnlich dem folgenden durch.
GET http://localhost:
port
/systemsmanager/parameters/get?name=arn:aws:ssm:us-east-1:123456789012:parameter/MyParameter
Um einen Aufruf zu tätigen, der auf einen SecureString
-Parameter mit Entschlüsselung zugreift, führen Sie einen HTTP-GET-Aufruf ähnlich dem folgenden durch.
GET http://localhost:
port
/systemsmanager/parameters/get?name=MyParameter&withDecryption=true
Sie können angeben, dass Parameter nicht entschlüsselt werden, indem Sie withDecryption
weglassen oder explizit auf false
setzen. Sie können auch entweder eine Version oder ein Label angeben, aber nicht beides. Wenn Sie dies tun, wird nur der erste davon verwendet, der in der URL nach dem Fragezeichen (?
) steht.
AWS-Parameter und Secrets Lambda Extension ARNs
Die folgenden Tabellen enthalten Erweiterungs-ARNs für unterstützte Architekturen und Regionen.
Themen
Erweiterungs-ARNs für die x86_64- und x86-Architekturen
Letzte Aktualisierung: 19. September 2024
Region | ARN |
---|---|
US East (Ohio) |
|
USA Ost (Nord-Virginia) |
|
USA West (Nordkalifornien) |
|
USA West (Oregon) |
|
Africa (Cape Town) |
|
Asia Pacific (Hongkong) |
|
Region Asien-Pazifik (Hyderabad) |
|
Asien-Pazifik (Jakarta) |
|
Asien-Pazifik (Melbourne) |
|
Asien-Pazifik (Malaysia) |
arn:aws:lambda:ap-southeast-5:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension:1 |
Asien-Pazifik (Mumbai) |
|
Asien-Pazifik (Osaka) |
|
Asien-Pazifik (Seoul) |
|
Asien-Pazifik (Singapur) |
|
Asien-Pazifik (Sydney) |
|
Asien-Pazifik (Tokio) |
|
Canada (Central) |
|
Kanada West (Calgary) | arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2 |
China (Peking) |
|
China (Ningxia) |
|
Europe (Frankfurt) |
|
Europa (Irland) |
|
Europa (London) |
|
Europa (Milan) |
|
Europa (Paris) |
|
Region Europa (Spanien) |
|
Europa (Stockholm) |
|
Israel (Tel Aviv) |
|
Region Europa (Zürich) |
|
Naher Osten (Bahrain) |
|
Naher Osten (VAE) | arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension:12 |
Südamerika (São Paulo) |
|
AWS GovCloud (USA-Ost) |
|
AWS GovCloud (USA-West) |
|
Erweiterungs-ARNs für die ARM64- und Mac with Apple silicon-Architekturen
Letzte Aktualisierung: 19. September 2024
Region | ARN |
---|---|
US East (Ohio) |
|
USA Ost (Nord-Virginia) |
|
Region USA West (Nordkalifornien) |
|
USA West (Oregon) |
|
Region Afrika (Kapstadt) |
|
Region Asien-Pazifik (Hongkong) |
|
Region Asien-Pazifik (Hyderabad) |
|
Region Asien-Pazifik (Jakarta) |
|
Asien-Pazifik (Melbourne) |
|
Asien-Pazifik (Malaysia) |
arn:aws:lambda:ap-southeast-5:090732460067:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:1 |
Asien-Pazifik (Mumbai) |
|
Asien-Pazifik (Osaka) |
|
Region Asien-Pazifik (Seoul) |
|
Asien-Pazifik (Singapur) |
|
Asien-Pazifik (Sydney) |
|
Asien-Pazifik (Tokio) |
|
Region Kanada (Zentral) |
|
Kanada West (Calgary) | arn:aws:lambda:ca-west-1:243964427225:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm64:1 |
China (Peking) |
|
China (Ningxia) |
|
Europe (Frankfurt) |
|
Europa (Irland) |
|
Europa (London) |
|
Region Europa (Mailand) |
|
Region Europa (Paris) |
|
Region Europa (Spanien) |
|
Region Europa (Stockholm) |
|
Israel (Tel Aviv) |
|
Region Europa (Zürich) |
|
Region Naher Osten (Bahrain) |
|
Naher Osten (VAE) | arn:aws:lambda:me-central-1:858974508948:layer:AWS-Parameters-and-Secrets-Lambda-Extension-Arm:1 |
Region Südamerika (São Paulo) |
|
AWS GovCloud (USA-Ost) |
|
AWS GovCloud (USA-West) |
|