Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Creazione di una funzione Lambda per un'estensione personalizzata AWS AppConfig
Nella maggior parte dei casi d'uso, per creare un'estensione personalizzata, è necessario creare una AWS Lambda funzione per eseguire qualsiasi calcolo ed elaborazione definiti nell'estensione. Questa sezione include il codice di esempio della funzione Lambda per un'estensione personalizzata AWS AppConfig . Questa sezione include anche i dettagli di riferimento della richiesta e della risposta del payload. Per informazioni sulla creazione di una funzione Lambda, consulta Getting started with Lambda nella Developer Guide.AWS Lambda
Codice di esempio
Il seguente codice di esempio per una funzione Lambda, quando richiamato, esegue automaticamente il backup di una AWS AppConfig configurazione in un bucket Amazon S3. Viene eseguito il backup della configurazione ogni volta che viene creata o distribuita una nuova configurazione. L'esempio utilizza i parametri di estensione in modo che il nome del bucket non debba essere codificato nella funzione Lambda. Utilizzando i parametri di estensione, l'utente può collegare l'estensione a più applicazioni ed eseguire il backup delle configurazioni in diversi bucket. L'esempio di codice include commenti per spiegare ulteriormente la funzione.
Esempio di funzione Lambda per un'estensione 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)
Se desideri utilizzare questo esempio durante questa procedura dettagliata, salvalo con il nome MyS3ConfigurationBackUpExtension
e copia Amazon Resource Name (ARN) per la funzione. Specifichi il ruolo di assunto AWS Identity and Access Management (IAM) al ARN momento della creazione nella sezione successiva. Specificate il nome ARN e il nome quando create l'estensione.
Riferimento del payload
Questa sezione include i dettagli di riferimento della richiesta di payload e della risposta per l'utilizzo delle estensioni personalizzate AWS AppConfig .
Struttura della richiesta
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' }
Eventi asincroni
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' }
Struttura della risposta
Gli esempi seguenti mostrano cosa restituisce la funzione Lambda in risposta alla richiesta di un'estensione personalizzata. AWS AppConfig
Eventi sincroni: risposta riuscita
Se vuoi trasformare il contenuto, usa quanto segue:
"Content": "SomeBase64EncodedByteArray"
Se non vuoi trasformare il contenuto, non restituisci nulla.
Eventi asincroni: risposta riuscita
Non restituisci nulla.
Tutti gli eventi di errore
{ "Error": "BadRequestError", "Message": "There was malformed stuff in here", "Details": [{ "Type": "Malformed", "Name": "S3 pointer", "Reason": "S3 bucket did not exist" }] }