Eine Lambda-Funktion für eine benutzerdefinierte Erweiterung erstellen AWS AppConfig - AWS AppConfig

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Eine Lambda-Funktion für eine benutzerdefinierte Erweiterung erstellen AWS AppConfig

In den meisten Anwendungsfällen müssen Sie zum Erstellen einer benutzerdefinierten Erweiterung eine AWS Lambda Funktion erstellen, die alle in der Erweiterung definierten Berechnungen und Verarbeitungen durchführt. Dieser Abschnitt enthält Beispielcode für eine Lambda-Funktion für eine benutzerdefinierte AWS AppConfig Erweiterung. Dieser Abschnitt enthält auch Referenzdetails für Payload-Anfragen und Antworten. Informationen zum Erstellen einer Lambda-Funktion finden Sie unter Getting started with Lambda im AWS Lambda Developer Guide.

Beispiel-Code

Der folgende Beispielcode für eine Lambda-Funktion sichert, wenn er aufgerufen wird, automatisch eine AWS AppConfig Konfiguration in einem Amazon S3 S3-Bucket. Die Konfiguration wird jedes Mal gesichert, wenn eine neue Konfiguration erstellt oder bereitgestellt wird. Das Beispiel verwendet Erweiterungsparameter, sodass der Bucket-Name in der Lambda-Funktion nicht fest codiert werden muss. Mithilfe von Erweiterungsparametern kann der Benutzer die Erweiterung an mehrere Anwendungen anhängen und Konfigurationen in verschiedenen Buckets sichern. Das Codebeispiel enthält Kommentare zur näheren Erläuterung der Funktion.

Beispiel für eine Lambda-Funktion für eine Erweiterung AWS AppConfig

from datetime import datetime import base64 import json import boto3 def lambda_handler(event, context): print(event) # Extensions that use the PRE_CREATE_HOSTED_CONFIGURATION_VERSION and PRE_START_DEPLOYMENT # action points receive the contents of AWS AppConfig configurations in Lambda event parameters. # Configuration contents are received as a base64-encoded string, which the lambda needs to decode # in order to get the configuration data as bytes. For other action points, the content # of the configuration isn't present, so the code below will fail. config_data_bytes = base64.b64decode(event["Content"]) # You can specify parameters for extensions. The CreateExtension API action lets you define # which parameters an extension supports. You supply the values for those parameters when you # create an extension association by calling the CreateExtensionAssociation API action. # The following code uses a parameter called S3_BUCKET to obtain the value specified in the # extension association. You can specify this parameter when you create the extension # later in this walkthrough. extension_association_params = event.get('Parameters', {}) bucket_name = extension_association_params['S3_BUCKET'] write_backup_to_s3(bucket_name, config_data_bytes) # The PRE_CREATE_HOSTED_CONFIGURATION_VERSION and PRE_START_DEPLOYMENT action points can # modify the contents of a configuration. The following code makes a minor change # for the purposes of a demonstration. old_config_data_string = config_data_bytes.decode('utf-8') new_config_data_string = old_config_data_string.replace('hello', 'hello!') new_config_data_bytes = new_config_data_string.encode('utf-8') # The lambda initially received the configuration data as a base64-encoded string # and must return it in the same format. new_config_data_base64string = base64.b64encode(new_config_data_bytes).decode('ascii') return { 'statusCode': 200, # If you want to modify the contents of the configuration, you must include the new contents in the # Lambda response. If you don't want to modify the contents, you can omit the 'Content' field shown here. 'Content': new_config_data_base64string } def write_backup_to_s3(bucket_name, config_data_bytes): s3 = boto3.resource('s3') new_object = s3.Object(bucket_name, f"config_backup_{datetime.now().isoformat()}.txt") new_object.put(Body=config_data_bytes)

Wenn Sie dieses Beispiel in dieser exemplarischen Vorgehensweise verwenden möchten, speichern Sie es mit dem Namen MyS3ConfigurationBackUpExtension und kopieren Sie den Amazon-Ressourcennamen (ARN) für die Funktion. Im nächsten Abschnitt geben Sie an, ARN wann Sie die Rolle AWS Identity and Access Management (IAM) übernehmen. Sie geben den ARN und den Namen an, wenn Sie die Erweiterung erstellen.

Payload-Referenz

Dieser Abschnitt enthält Referenzinformationen zu Payload-Anfragen und Antworten für die Arbeit mit benutzerdefinierten AWS AppConfig Erweiterungen.

Struktur der Anfrage

PreCreateHostedConfigurationVersion

{ 'InvocationId': 'vlns753', // id for specific invocation 'Parameters': { 'ParameterOne': 'ValueOne', 'ParameterTwo': 'ValueTwo' }, 'ContentType': 'text/plain', 'ContentVersion': '2', 'Content': 'SGVsbG8gZWFydGgh', // Base64 encoded content 'Application': { 'Id': 'abcd123', 'Name': 'ApplicationName' }, 'ConfigurationProfile': { 'Id': 'ijkl789', 'Name': 'ConfigurationName' }, 'Description': '', 'Type': 'PreCreateHostedConfigurationVersion', 'PreviousContent': { 'ContentType': 'text/plain', 'ContentVersion': '1', 'Content': 'SGVsbG8gd29ybGQh' } }

PreStartDeployment

{ 'InvocationId': '765ahdm', 'Parameters': { 'ParameterOne': 'ValueOne', 'ParameterTwo': 'ValueTwo' }, 'ContentType': 'text/plain', 'ContentVersion': '2', 'Content': 'SGVsbG8gZWFydGgh', 'Application': { 'Id': 'abcd123', 'Name': 'ApplicationName' }, 'Environment': { 'Id': 'ibpnqlq', 'Name': 'EnvironmentName' }, 'ConfigurationProfile': { 'Id': 'ijkl789', 'Name': 'ConfigurationName' }, 'DeploymentNumber': 2, 'Description': 'Deployment description', 'Type': 'PreStartDeployment' }
Asynchrone Ereignisse

OnStartDeployment, OnDeploymentStep, OnDeployment

{ 'InvocationId': 'o2xbtm7', 'Parameters': { 'ParameterOne': 'ValueOne', 'ParameterTwo': 'ValueTwo' }, 'Type': 'OnDeploymentStart', 'Application': { 'Id': 'abcd123' }, 'Environment': { 'Id': 'efgh456' }, 'ConfigurationProfile': { 'Id': 'ijkl789', 'Name': 'ConfigurationName' }, 'DeploymentNumber': 2, 'Description': 'Deployment description', 'ConfigurationVersion': '2' }
Struktur der Antwort

Die folgenden Beispiele zeigen, was Ihre Lambda-Funktion als Antwort auf die Anfrage einer benutzerdefinierten AWS AppConfig Erweiterung zurückgibt.

Synchrone Ereignisse — erfolgreiche Antwort

Wenn Sie den Inhalt transformieren möchten, verwenden Sie Folgendes:

"Content": "SomeBase64EncodedByteArray"

Wenn Sie den Inhalt nicht transformieren möchten, geben Sie nichts zurück.

Asynchrone Ereignisse — erfolgreiche Antwort

Gib nichts zurück.

Alle Fehlerereignisse

{ "Error": "BadRequestError", "Message": "There was malformed stuff in here", "Details": [{ "Type": "Malformed", "Name": "S3 pointer", "Reason": "S3 bucket did not exist" }] }