Come si crea una funzione AWS Lambda che esegua query in Amazon Redshift?

Ultimo aggiornamento: 11/03/2022

Sto cercando di creare una funzione AWS Lambda che esegua query su Amazon Redshift. In che modo posso farlo?

Risoluzione

Prerequisiti

Prima di creare una funzione Lambda, è necessario impostare i seguenti endpoint VPC:

1.    Crea un VPC con una sottorete privata.

2.    Crea un gruppo di sottorete. Aggiungi il VPC che hai appena creato.

3.    Crea un cluster Amazon Redshift privato selezionando il VPC e il gruppo di sottorete che hai appena creato.

4.    Crea un nuovo segreto per Amazon Redshift con AWS Secrets Manager. Dai un nome al tuo "redshift" segreto.

Crea la tua funzione Lambda

Per creare una funzione Lambda che interroghi il cluster Amazon Redshift, segui i passaggi riportati qui sotto:

1.    Apri la console Lambda.

2.    Scegli Create function (Crea funzione).

3.    Scegli l'opzioneAuthor from Scratch (Crea da zero).

4.    Aggiorna i seguenti campi:
Function name (Nome funzione): inserisci un nome personalizzato.
Runtime (Tempo di esecuzione): inserisci il tuo ambiente di codice. Gli esempi forniti in questo articolo sono compatibili con "Python 3.9".
Architetture (Architettura): inserisci l'architettura del tuo sistema. Gli esempi forniti in questo articolo sono compatibili con "x86_64".
Permissions (Autorizzazioni): scegli Create a new role with basic Lambda permissions (Crea un nuovo ruolo con autorizzazioni Lambda di base).

5.    Scegli Create function (Crea funzione).

Imposta le autorizzazioni corrette per la tua funzione Lambda

1.    Nella console Lambda, scegli Configuration (Configurazione).

2.    Scegli Permissions (Autorizzazioni).

3.    Scegli il ruolo creato per la tua funzione Lambda.

4.    Scegli Add Permissions (Aggiungi autorizzazioni).

5.    Fai clic su Attach policies (Allega policy).

6.    Aggiungi le policy "AmazonRedshiftDataFullAccess" e "SecretsManagerReadWrite" al tuo ruolo di esecuzione Lambda.

Aggiungi codice Python alla tua funzione Lambda

1.    Nella console Lambda, scegli Code (Codice).

2.    Incolla il seguente codice nella casellaCode (Codice):

import json
import urllib.parse
import boto3
import botocore.session as bc

print('Loading function')

s3 = boto3.client('s3')


def lambda_handler(event, context):
    print("Entered lambda_handler")

    secret_name='redshift' ## HERE add the secret name created.
    session = boto3.session.Session()
    region = session.region_name
    
    client = session.client(
            service_name='secretsmanager',
            region_name=region
        )
    
    get_secret_value_response = client.get_secret_value(
            SecretId=secret_name
        )
    secret_arn=get_secret_value_response['ARN']
    
    secret = get_secret_value_response['SecretString']
    
    secret_json = json.loads(secret)
    
    cluster_id=secret_json['dbClusterIdentifier']
    
    
    bc_session = bc.get_session()
    
    session = boto3.Session(
            botocore_session=bc_session,
            region_name=region,
        )
    
    # Setup the client
    client_redshift = session.client("redshift-data")
    print("Data API client successfully loaded")
    
    query_str = "create table public.lambda_func (id int);"
                      
    print(query_str)
    
    res = client_redshift.execute_statement(Database= 'dev', SecretArn= secret_arn, Sql= query_str, ClusterIdentifier= cluster_id)
    id=res["Id"]

Nota: assicurati di sostituire secret_name con il tuo nome segreto nel caso in cui tu abbia creato un segreto con un nome diverso da "redshift".

In questo esempio, Lambda si connette al database Amazon Redshift e crea una tabella lambda_func nello schema pubblico.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?