通过 redshift-data api 在 AWS Redshift 中创建 table

Create table in AWS Redshift via redshift-data api

我有一个通过 terraform 创建的 Redshift 集群。当集群启动时,将调用一个 lambda 函数,其中我试图通过 redshift-data api 在 Redshift 中创建 table。代码没有抛出任何错误,cloudwatch 日志中也没有错误,但是我在数据库中看不到 table。

附加到 lambda 函数的角色具有以下权限,因此我假设它具有执行查询的权限

"redshift-data:ExecuteStatement",
"redshift-data:CancelStatement",
"redshift-data:ListStatements",
"redshift-data:GetStatementResult",
"redshift-data:DescribeStatement",
"redshift-data:ListDatabases",
"redshift-data:ListSchemas",
"redshift-data:ListTables",
"redshift-data:DescribeTable"

下面是 lambda 函数中的代码。

import json
import boto3

EVENT_TYPE = "REDSHIFT-EVENT-2000"


def hello(event=None, context=None):
    print(event)
    if event is not None:
        message = event['Records'][0]['Sns']['Message']
        print(message)
        if message is not None and EVENT_TYPE in message:
            # convert the str to python dictionary
            message_dict = json.loads(message)
            print(message)
            # get the cluster details
            cluster_name = message_dict.get('Resource', None)
            print(cluster_name)
            if cluster_name is not None:
                client_red = boto3.client('redshift',region_name = 'us-east-2')
                clusters = client_red.describe_clusters(ClusterIdentifier=cluster_name)
                cluster_detail = clusters.get('Clusters')[0]
                print(cluster_detail)
                db_name = cluster_detail.get('DBName')
                user_name = cluster_detail.get('MasterUsername')
                db_endpoint = cluster_detail.get('Endpoint')
                print(db_endpoint)
                db_address = db_endpoint.get('Address')
                db_port = db_endpoint.get('Port')

                print(db_name)
                print(db_address)
                print(db_port)
                print(user_name)

                client_data = boto3.client('redshift-data' , region_name = 'us-east-2')

                response = client_data.execute_statement(
                    ClusterIdentifier = cluster_name,
                    Database = db_name,
                    DbUser = user_name,
                    Sql = 'CREATE TABLE TEST (key LONG);'
                )

                print(response)

有人可以帮助我吗,因为我无法弄清楚问题到底是什么 is.Thank 你

我希望您需要执行这些操作。添加提交;到你的 SQL.

如果没有,您可以查看 stl_query 以查看查询是否 运行 或者它是否未启动。