Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
如何为 Amazon Redshift 集群计划查询?
我想在 Amazon Redshift 集群中计划查询运行。
解决方案
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
使用查询编辑器 v2 为预置的 Amazon Redshift 集群运行、查看、保存和计划 SQL 查询。
配置查询编辑器权限
在创建计划查询之前,必须配置正确的 AWS Identity and Access Management (IAM) 角色和权限。计划查询要求 Amazon EventBridge 按计划启动查询,并要求 Amazon Redshift 数据 API 在集群上运行查询。
创建计划的 IAM 用户和运行查询的 IAM 角色都必须具有相应的权限。
IAM 用户访问权限
您可以附加 AmazonRedshiftDataFullAccess 和 AmazonEventBridgeFullAccess 等策略。
您也可以创建包含更具体的权限的自定义策略。有关详细信息,请参阅设置计划查询的权限。
查询的执行角色
要运行计划查询,请为您的 Amazon Redshift 集群或 Amazon Redshift Serverless 工作组指定或创建一个 IAM 角色。
然后,附加 AmazonRedshiftDataFullAccess 和 AmazonEventBridgeFullAccess 等策略,以便 Amazon Redshift 可以代入该角色并执行计划操作。
有关详细信息,请参阅将基于身份的策略(IAM 策略)用于 Amazon Redshift。
代入角色配置
更新角色的信任策略,以允许调度主体代入该角色。然后,使用 Amazon Redshift 控制台或 modify-cluster-iam-roles AWS CLI 命令将该角色关联到您的 Amazon Redshift 集群或 Amazon Redshift Serverless 工作组。
数据库身份验证
将您的凭证存储在您的 IAM 角色可以访问的 AWS Secrets Manager 密钥中。
添加适当的标签以允许使用 Amazon Redshift 数据 API。配置您的 IAM 角色以获取临时 Amazon Redshift 凭证。您的集群或工作组的 IAM 角色必须信任主体,且您的数据库用户必须具有必要的权限。
有关详细信息,请参阅对计划查询进行身份验证。
在 Amazon Redshift 控制台上计划查询
完成以下步骤:
- 打开 Amazon Redshift 控制台。
- 在导航窗格中,选择 Editor(编辑器),然后选择 Query editor V2(查询编辑器 V2)。
- 连接到集群中的数据库。
- 创建查询计划以运行 SQL 语句。
- (可选)如果您在 Amazon Redshift 中使用 Secrets Manager,请选择您的密钥。
- (可选)如果您使用的是临时 IAM 用户凭证,请选择您的集群并提供数据库和用户名。
**注意:**要调用 GetClusterCredentials 操作,您必须拥有一组最低权限。
要查看新创建的计划,请完成以下步骤:
- 打开 Amazon RedShift 控制台。
- 在导航窗格中,选择 Editor(编辑器),然后选择 Query editor V2(查询编辑器 V2)。
- 选择 Scheduled queries(计划查询)。
您可以启用 Amazon Simple Notification Service (Amazon SNS) 通知以监控查询的执行状态。
如果您启用了 Amazon SNS,请确保针对 events.amazonaws.com 存在 Publish(发布)API 操作。
针对 events.amazonaws.com 包含 Publish(发布)操作的访问策略示例:
{ "Sid": "Allow_Publish_Events", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-1:{ACCOUNT_ID}:{SNS_TOPIC_NAME}" }
有关详细信息,请参阅监控计划查询。
使用 EventBridge 计划查询
您可以使用 EventBridge 和 Amazon Redshift 数据 API 来计划 SQL 语句。
完成以下步骤:
-
定义一个名为 scheduled-refresh-currentEvents 的 EventBridge 事件规则。
-
使用 EventBridge 控制台计划事件规则定期运行或在特定时间运行。或者,运行以下 put-rule AWS CLI 命令:
aws events put-rule \ --name scheduled-refresh-currentEvents \ --schedule-expression "cron(0/5 * * * ? *)"**注意:**请将 5 替换为所需的刷新间隔分钟数。
-
使用文本编辑器创建并保存以下名为 refreshCurrentEvents.json 的 JSON 文件:
{ "Rule": "scheduled-refresh-currentEvents", "EventBusName": "default", "Targets": [ { "Id": "scheduled-refresh-currentEvents", "Arn": "Clsuter ARN", "RoleArn": "Role ARN", "RedshiftDataParameters": { "SecretManagerArn": "Secrets Manager ARN", "Database": "Database Name", "Sql": "REFRESH MATERIALIZED VIEW currentEvents;", "StatementName": "scheduled-refresh-currentEvents", "WithEvent": true } } ] }**注意:**请将 Cluster ARN、Role ARNSecrets Manager ARN 替换为您的 ARN 值。
-
运行以下 put-targets 命令,以使用保存的 JSON 文件创建事件目标:
aws events put-targets --cli-input-json file://refreshCurrentEvents.json -
运行以下 remove-targets 命令移除目标:
aws events remove-targets --rule scheduled-refresh-currentEvents --ids scheduled-refresh-currentEvents -
运行以下 delete-rule 命令删除规则:
aws events delete-rule --name scheduled-refresh-currentEvents
查看 SQL 状态和结果
完成以下步骤:
-
在导航窗格中,选择 Editor(编辑器),然后选择 Query editor V2(查询编辑器 V2)。
-
选择 Scheduled queries(计划查询)。
-
选择您的查询。
-
在 Schedule history(计划历史记录)中,记下要在后续步骤中使用的 ID。
-
要检索查询结果,请运行以下 assume-role 命令:
aws sts assume-role --role-arn "Role ARN" --role-session-name Example Session Name**注意:**请将 Role ARN 替换为用于计划查询的角色的 ARN,将 Example Session Name 替换为您的会话名称。该命令的输出将返回访问密钥 ID、秘密访问密钥和会话令牌。
-
运行以下导出命令来配置环境变量:
export AWS_ACCESS_KEY_ID=ExampleRoleAccessKeyID export AWS_SECRET_ACCESS_KEY=ExampleRoleSecretAccessKey export AWS_SESSION_TOKEN=ExampleSessionToken**注意:**请将示例值替换为您的值。
-
运行包含 get-statement-result 的 redshift-data 命令来检索结果:
aws redshift-data get-statement-result --id ID --region Region**注意:**请将 ID 替换为您的语句 ID,将 Region 替换为您的 AWS 区域。
相关信息
- 语言
- 中文 (简体)

相关内容
AWS 官方已更新 2 年前