在 Amazon Redshift 控制台上计划查询 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

在 Amazon Redshift 控制台上计划查询

要创建运行 SQL 语句的计划,您可以使用 Amazon Redshift 控制台上的查询编辑器。您可以创建一个计划,以便按照与您的业务需求相匹配的时间间隔运行 SQL 语句。当计划查询运行时,Amazon EventBridge 会启动查询。

要创建计划以在控制台上运行 SQL 语句

  1. 打开控制台和查询编辑器,如使用查询编辑器中所述。

  2. 选择 Schedule(计划)以创建运行 SQL 语句的计划。

    在定义计划时,您需要提供以下信息:

您还可以使用 Amazon Redshift 控制台管理和更新计划查询。根据控制台版本的不同,计划查询可能会在以下位置列出:

  • 在集群的详细信息页面的 Schedules(计划)选项卡上。

  • 在您可以从导航窗格访问的计划查询列表上。要查看列表,请在导航窗格中选择 QUERIES(查询)、Schedule query list(计划查询列表)。

  • 在查询编辑器的 Scheduled queries(计划查询)选项卡中。

如果您从以下位置之一选择 Schedule name(计划名称),则可以查看和编辑计划查询的定义。

设置在 Amazon Redshift 控制台上计划查询的权限

要计划查询,定义计划的 Amazon Identity and Access Management (IAM) 用户以及与计划关联的 IAM 角色必须按如下方式进行配置。

对于登录 Amazon Redshift 控制台的 IAM 用户,请执行以下操作:

  • 附加 AmazonEventBridgeFullAccess Amazon 托管策略。

  • 附加一个策略,该策略具有您在定义计划 SQL 语句时指定的 IAM 角色的 sts:AssumeRole 权限。

    以下示例显示了代入指定 IAM 角色的策略。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AssumeIAMRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::account-id:role/sql-statement-iam-role" } ] }

对于您指定的使调度程序能够运行查询的 IAM 角色,请执行以下操作:

  • 确保此 IAM 角色指定了 EventBridge 服务委托人 (events.amazonaws.com)。以下是示例信任关系。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

    有关如何为 EventBridge 事件创建 IAM 角色的更多信息,请参阅使用 Amazon EventBridge 调度程序所需的权限

  • AmazonRedshiftDataFullAccess Amazon 托管策略附加到 IAM 角色。

  • 要允许 IAM 用户查看计划历史记录,请编辑 IAM 角色以添加 sts:AssumeRole 权限。

以下是 IAM 角色定义的示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" }, { "Sid": "AssumeRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:user/user-name" }, "Action": "sts:AssumeRole" } ] }

以下示例代码段允许特定 IAM 用户查看计划历史记录。

{ "Sid": "AssumeRole", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::account-id:user/testRedshiftUser", "arn:aws:iam::account-id:user/myusername" ] }, "Action": "sts:AssumeRole" }

对计划查询进行身份验证

当您计划查询时,在查询 SQL 运行时使用下列身份验证方法之一。每种方法都需要来自 Amazon Redshift 控制台的不同输入组合。

Amazon Secrets Manager

使用此方法,为存储在 Amazon Secrets Manager 中的 secret-arn 提供一个密钥值。此密钥包含用于连接到数据库的凭证。密钥必须使用键 RedshiftDataFullAccess 进行标记。

有关最低权限的更多信息,请参阅 Amazon Secrets Manager 用户指南中的使用 Amazon Secrets Manager 创建和管理密钥

临时凭证

使用此方法,提供 databasedb-user 值。

AmazonRedshiftDataFullAccess 策略允许为 redshift:GetClusterCredentials 使用名为 redshift_data_api_user 权限的数据库用户 如果要使用其他数据库用户运行 SQL 语句,请向 IAM 角色添加策略以允许 redshift:GetClusterCredentials。以下示例策略允许数据库用户 awsusermyuser

{ "Version": "2012-10-17", "Statement": [ { "Sid": "UseTemporaryCredentialsForAllDbUsers", "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": [ "arn:aws:redshift:*:*:dbuser:*/awsuser", "arn:aws:redshift:*:*:dbuser:*/myuser" ] } ] }

创建一个在查询完成时运行的 Amazon EventBridge 规则

您可以创建事件规则,以在查询结束时发送通知。有关使用 Amazon EventBridge 控制台的过程,请参阅《Amazon EventBridge 用户指南》中的创建 Amazon EventBridge 规则以对事件做出反应。有关更多信息,请参阅 Amazon EventBridge 用户指南Amazon EventBridge 事件模式

例如,在查询处于 FINISHED 状态时发送以下示例事件。

{ "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "Redshift Data Statement Status Change", "source": "aws.redshift-data", "account": "123456789012", "time": "2020-12-22T17:00:00Z", "region": "us-west-1", "resources": [ "arn:aws:redshift:us-east-2:123456789:cluster:t1" ], "detail": { "statementId": "01bdaca2-8967-4e34-ae3f-41d9728d5644", "clusterId": "test-dataapi", "statementName": "awsome query", "state": "FINISHED", "pages": 5, "expireAt": "2020-12-22T18:43:48Z", "principal": "arn:aws:sts::123456789012:assumed-role/any", "queryId": 123456 } }

您可以创建事件模式规则来筛选事件。

{ "source": [ "aws.redshift-data" ], "detail-type": [ "Redshift Data Statement Status Change" ], "detail": { "state": [ "FINISHED" ] } }