通过 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 以查看查询是否 运行 或者它是否未启动。
我有一个通过 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 以查看查询是否 运行 或者它是否未启动。