排程查詢 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

排程查詢

重要

Amazon Redshift 查詢編輯器 v2 現在支援排程查詢。建議您使用查詢編輯器 v2。如需詳細資訊,請參閱 使用查詢編輯器 v2 來排程查詢

若要建立執行 SQL 陳述式的排程,您可以使用 Amazon Redshift 主控台上的查詢編輯器。您可以建立排程,以符合您業務需求的時間間隔執行 SQL 陳述式。當排程查詢執行時,Amazon EventBridge 會啟動查詢。

建立排程以執行 SQL 陳述式
  1. 開啟主控台和查詢編輯器,如使用查詢編輯器中所述。此查詢編輯器只能與佈建叢集搭配使用。

  2. 選擇排程以建立用來執行 SQL 陳述式的排程。

    在定義排程時,您會提供下列資訊:

    • 用來擔任執行查詢時所需許可的 IAM 角色。如需詳細資訊,請參閱 設定用來排程查詢的許可

    • 用於授權存取叢集的驗證值 AWS Secrets Manager 或臨時認證。如需詳細資訊,請參閱 驗證已排程的查詢

    • 已排程查詢的名稱以及要執行的單一 SQL 陳述式。

    • 排程頻率和重複選項或 cron 格式值。

    • 您也可以選擇啟用 Amazon SNS 通知來監控所排程的查詢。如果您的查詢正在執行中,但您沒有看到 SNS 主題中發佈的訊息,請參閱 Amazon EventBridge 使用者指南中的「我的規則已觸發,但我看不到任何訊息發佈到 Amazon SNS 主題中」。

您也可以使用 Amazon Redshift 主控台來管理和更新已排程的查詢。視主控台的版本而定,已排程的查詢可能會列在下列位置:

  • 叢集詳細資訊頁面的排程索引標籤上。

  • 查詢編輯器的已排程的查詢索引標籤上。

如果您從這兩個位置的其中一個選擇排程名稱,便可以檢視和編輯已排程查詢的定義。

設定用來在 Amazon Redshift 主控台上排程查詢的許可

若要排程查詢,定義排程的 AWS Identity and Access Management (IAM) 使用者和與排程相關聯的 IAM 角色必須設定如下。

對於已登入 Amazon Redshift 主控台的 IAM 使用者,請執行以下操作:

  • 將受AmazonEventBridgeFullAccess AWS 管政策附加到 IAM 角色。

  • 為政策附加您在定義已排程的 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" } ] }

    如需如何為事件建立 IAM 角色的詳細資 EventBridge 訊,請參閱使用 Amazon EventBridge 排程器所需的許可

  • 將受AmazonRedshiftDataFullAccess AWS 管政策附加到 IAM 角色。

  • 若要允許使用者檢視排程歷史記錄,請編輯 IAM 角色以新增 sts:AssumeRole 權限。

IAM 角色中的信任政策範例如下。

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

驗證已排程的查詢

在排程查詢時,您會在查詢 SQL 執行時使用下列其中一種身分驗證方法。每種方法需要來自 Amazon Redshift 主控台的不同輸入組合。

AWS Secrets Manager

使用此方法時,請為儲存在 AWS Secrets Manager中的 secret-arn 提供機密值。此秘密包含用來連線至資料庫的憑證。此機密必須標記了索引鍵 RedshiftDataFullAccess

如需最基本許可的相關資訊,請參閱《AWS Secrets Manager 使用者指南》中的使用 AWS Secrets Manager建立和管理機密

臨時憑證

使用此方法時,請提供您的資料庫db-user 值。

AmazonRedshiftDataFullAccess 政策允許名為 redshift_data_api_user 的資料庫使用者獲得 redshift:GetClusterCredentials 的許可。如果您想要使用不同的資料庫使用者來執行 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": "awesome 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" ] } }