如何安排针对 Amazon Redshift 集群的查询?

2 分钟阅读
0

我正尝试安排在 Amazon Redshift 集群中运行查询。该如何操作?

简短描述

可以使用查询编辑器为预置的 Amazon Redshift 集群运行、查看、保存和安排 SQL 查询。安排的查询由 Amazon EventBridge 发起。

解决方案

**注意:**如果您在运行 AWS Command Line Interface (AWS CLI) 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

查询编辑器权限

要使用查询编辑器,用户必须拥有一组最低限度的 Amazon Redshift 权限。如果您的集群使用其他 AWS 服务,则用户还必须具有访问这些服务的权限。例如,AWS Secrets Manager 密钥和 AWS Key Management Service (AWS KMS) 密钥。有关更多信息,请参阅使用 Amazon Redshift 控制台查询编辑器所需的权限

您可以使用 AWS Identity and Access Management (IAM) 托管策略来管理基于 IAM 角色的权限。有关更多信息,请参阅 Amazon Redshift 的 AWS 托管(预定义)策略

要安排查询,与查询关联的 IAM 用户和角色必须具有管理查询编辑器的权限。有关说明,请参阅在 Amazon Redshift 控制台上设置权限以安排查询

使用 AWS 管理控制台安排查询

要使用 AWS 管理控制台安排查询,请按照以下步骤操作:

注意:

  • 必须使用查询编辑器 v1 来安排查询。
  • 您只能将此查询编辑器用于预置的集群。

1.    打开 Amazon Redshift 控制台

2.    在导航窗格中,选择 Query editor(查询编辑器)。

3.    按照说明连接到集群中的数据库

4.    按照说明创建运行 SQL 语句的安排

5.    如果您将 AWS Secrets Manager 与 Amazon Redshift 结合使用,请选择您的密钥。

6.    如果您使用的是临时 IAM 用户凭证,请选择您的集群并提供数据库和用户名。**注意:**IAM 用户必须具备 GetClusterCredentials 权限才能使用临时凭证。

7.    选择 Save(保存)。

**注意:**如果您开启 Simple Notification Service (Amazon SNS),请确保 "events.amazonaws.com" 的 "sns:Publish" API 操作存在。要进行确认,请添加以下语句:

{
  "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 和 SQL 语句安排查询

可以使用 EventBridge 和 Amazon Redshift Data API 安排 SQL 语句。在以下示例中,安排设置为每 5 分钟刷新一次当前事件。

1.    创建名为 "scheduled-refresh-currentEvents" 的 EventBridge 事件规则,并使用类似于以下内容的 Cron 或 Rate 表达式将其安排为每 5 分钟运行一次:

aws events put-rule \
--name scheduled-refresh-currentEvents \
--schedule-expression "cron(0/5 * * * ? *)"

2.    使用最爱的文本编辑器创建并保存名为 refreshCurrentEvents.json 的 JSON 文件,该文件包含集群、角色和 AWS Secrets Manager ARN:

{
  "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
      }
    }
  ]
}

3.    使用保存的 JSON 文件创建事件目标:

aws events put-targets --cli-input-json file://refreshCurrentEvents.json

4.    要移除目标并删除规则,请运行以下命令:

aws events remove-targets --rule scheduled-refresh-currentEvents --ids scheduled-refresh-currentEvents
aws events delete-rule --name scheduled-refresh-currentEvents

查看 SQL 状态和结果

要查看查询状态和结果,请执行以下步骤:

1.    打开 Amazon Redshift 控制台

2.    在导航窗格中,选择 Query editor(查询编辑器),然后选择 Scheduled queries(安排的查询)。

3.    选择您的查询名称。

4.    在 Schedule history(安排历史记录)中,记下 ID。在步骤 7 中,您将需要此 ID

5.    要检索查询结果,请使用 AWS CLI 命令 assume-role 担任用于安排查询的 IAM 角色,如下所示:

aws sts assume-role --role-arn "<Role ARN>" --role-session-name AWSCLI-Session

输出返回访问密钥 ID、秘密访问密钥和会话令牌。

6.    使用以下导出命令配置环境变量

export AWS_ACCESS_KEY_ID=<RoleAccessKeyID>
export AWS_SECRET_ACCESS_KEY=<RoleSecretKey>
export AWS_SESSION_TOKEN=<RoleSessionToken>

7.    使用 AWS CLI 命令 redshift-data 检索结果,如下所示:

aws redshift-data get-statement-result --id <ID> --region <Region>

相关信息

为什么我不能连接到 Amazon Redshift 查询编辑器?

使用 Amazon Redshift Data API 与 Amazon Redshift 集群进行交互

创建按计划运行的 Amazon EventBridge 规则

AWS 官方
AWS 官方已更新 1 年前