Wie erstelle ich eine AWS-Lambda-Funktion, die Abfragen in Amazon Redshift ausführt?

Letzte Aktualisierung: 2022-03-11

Ich versuche, eine AWS-Lambda-Funktion zu erstellen, die Abfragen auf Amazon Redshift ausführt. Wie kann ich vorgehen?

Lösung

Voraussetzungen

Bevor Sie eine Lambda-Funktion erstellen, müssen Sie die folgenden VPC-Endpunkte einrichten:

1.    Erstellen Sie eine VPC mit einem privaten Subnetz.

2.    Erstellen Sie eine Subnetzgruppe. Fügen Sie die gerade erstellte VPC hinzu.

3.    Erstellen Sie einen privaten Amazon-Redshift-Cluster und wählen Sie die VPC und die Subnetzgruppe aus, die Sie gerade erstellt haben.

4.    Erstellen Sie ein neues Secret mit AWS Secrets Manager für Amazon Redshift. Benennen Sie Ihr geheimes „Redshift“.

Erstellen Sie Ihre Lambda-Funktion

Um eine Lambda-Funktion zu erstellen, die Ihren Amazon-Redshift-Cluster abfragt, führen Sie die folgenden Schritte aus:

1.    Öffnen Sie die Lambda-Konsole.

2.    Wählen Sie Funktion erstellen.

3.    Wählen Sie die Option Autor von Grund auf neu verfassen.

4.    Aktualisieren Sie die folgenden Felder:
Funktionsname: Geben Sie einen benutzerdefinierten Namen ein.
Laufzeit: Geben Sie Ihre Code-Umgebung ein. (Die Beispiele aus diesem Artikel sind mit „Python 3.9” kompatibel.)
Architektur: Geben Sie Ihre Systemarchitektur ein. (Die Beispiele aus diesem Artikel sind mit „x86_64“ kompatibel.)
Berechtigungen: Wählen Sie Neue Rolle mit grundlegenden Lambda-Berechtigungen erstellen.

5.    Wählen Sie Funktion erstellen.

Legen Sie die richtigen Berechtigungen für Ihre Lambda-Funktion fest

1.    Wählen Sie in der Lambda-Konsole Konfiguration aus.

2.    Wählen Sie Berechtigungen aus.

3.    Wählen Sie die Rolle aus, die für Ihre Lambda-Funktion erstellt wurde.

4.    Wählen Sie Berechtigungen hinzufügen aus.

5.    Wählen Sie Richtlinien anfügen aus.

6.    Fügen Sie die Richtlinien „AmazonRedshiftDataFullAccess“ und „SecretsManagerReadWrite“ zu Ihrer Lambda-Ausführungsrolle hinzu.

Fügen Sie Python-Code zu Ihrer Lambda-Funktion hinzu

1.    Wählen Sie in der Lambda-Konsole Code aus.

2.    Fügen Sie den folgenden Code in das Feld Code ein:

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"]

Hinweis: Stellen Sie sicher, dass Sie secret_name durch Ihren geheimen Namen ersetzen, falls Sie ein Secret mit einem anderen Namen als „redshift“ erstellt haben.

In diesem Beispiel stellt Lambda eine Verbindung zur Amazon Redshift-Datenbank her und erstellt eine lambda_func-Tabelle im öffentlichen Schema.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?