Knowledge Center Monthly Newsletter - July 2025
Stay up to date with the latest from the Knowledge Center. See all new Knowledge Center articles published in the last month, and re:Post’s top contributors.
Wie erstelle ich eine AWS Lambda-Funktion, die Abfragen in Amazon Redshift ausführt?
Ich möchte eine AWS Lambda-Funktion erstellen, die Abfragen auf Amazon Redshift ausführt.
Behebung
Voraussetzung: Bevor du eine Lambda-Funktion erstellst, musst du die folgenden Amazon Virtual Private Cloud (Amazon VPC)-Endpunkte einrichten:
- Erstelle eine VPC mit einem privaten Subnetz.
- Erstelle eine Subnetzgruppe. Füge die VPC und das Subnetz hinzu, die du gerade erstellt hast.
- Erstelle einen privaten Amazon Redshift-Cluster. Wähle die VPC und die Subnetzgruppe aus, die du gerade erstellt hast.
- Erstelle mit dem AWS Secrets Manager ein neues Secret für Amazon Redshift. Benenne dein Secret redshift.
Deine Lambda-Funktion erstellen
Gehe folgendermaßen vor, um eine Lambda-Funktion zu erstellen, die den Amazon Redshift-Cluster abfragt:
-
Öffne die Lambda-Konsole.
-
Wähle Funktion erstellen aus.
-
Wähle die Option Ohne Vorgabe erstellen aus.
-
Aktualisiere die folgenden Felder:
Funktionsname: Gib einen benutzerdefinierten Namen ein.
Laufzeit: Gib deine Code-Umgebung ein. (Die Beispiele in dieser Auflösung sind mit Python 3.9 kompatibel.)
Architektur: Gib deine Systemarchitektur ein. (Die Beispiele in dieser Auflösung sind mit x86_64 kompatibel.)
Genehmigungen: Wähle Create a new role with basic Lambda permissions (Neue Rolle mit grundlegenden Lambda-Berechtigungen erstellen) aus. -
Wähle Funktion erstellen aus.
Die richtigen Berechtigungen für die Lambda-Funktion festlegen
Wähle in der Lambda-Konsole Konfiguration aus.
- Wähle Berechtigungen aus.
- Wähle die Rolle aus, die für die Lambda-Funktion erstellt wurde.
- Wähle Berechtigungen hinzufügen aus.
- Wähle Attach policies (Richtlinien anfügen) aus.
- Füge der Lambda-Ausführungsrolle die Richtlinien AmazonRedshiftDataFullAccess und SecretsManagerReadWrite hinzu.
Hinweis: Es hat sich bewährt, die geringste Berechtigung nur für die Berechtigungen zu gewähren, die für die Ausführung einer Aufgabe erforderlich sind. Weitere Informationen findest du unter Berechtigungen mit den geringsten Rechten anwenden.
Der Lambda-Funktion Python-Code hinzufügen
- Wähle in der Lambda-Konsole Code aus.
- Füge den folgenden Code in das Feld Code ein:
Wichtig:
- Ersetze „dev“ durch den Namen deiner Datenbank.
- Füge im Konfigurationsbereich der Lambda-Funktion eine Umgebungsvariable für den Schlüssel SecretId und secret_name hinzu.
import os import json import boto3 import botocore import botocore.session as bc from botocore.client import Config print('Loading function') secret_name=os.environ['SecretId'] # getting SecretId from Environment varibales session = boto3.session.Session() region = session.region_name # Initializing Secret Manager's client 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'] # Initializing Botocore client bc_session = bc.get_session() session = boto3.Session( botocore_session=bc_session, region_name=region ) # Initializing Redshift's client config = Config(connect_timeout=5, read_timeout=5) client_redshift = session.client("redshift-data", config = config) def lambda_handler(event, context): print("Entered lambda_handler") query_str = "create table public.lambda_func (id int);" try: result = client_redshift.execute_statement(Database= 'dev', SecretArn= secret_arn, Sql= query_str, ClusterIdentifier= cluster_id) print("API successfully executed") except botocore.exceptions.ConnectionError as e: client_redshift_1 = session.client("redshift-data", config = config) result = client_redshift_1.execute_statement(Database= 'dev', SecretArn= secret_arn, Sql= query_str, ClusterIdentifier= cluster_id) print("API executed after reestablishing the connection") return str(result) except Exception as e: raise Exception(e) return str(result)
In diesem Beispiel stellt Lambda eine Verbindung zur Amazon Redshift-Datenbank her und erstellt eine lambda_func-Tabelle im öffentlichen Schema.
- Themen
- Analysen
- Tags
- Amazon Redshift
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 4 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Monaten
- AWS OFFICIALAktualisiert vor 2 Monaten