クエリのスケジュール設定
重要
Amazon Redshift クエリエディタ v2 は、クエリのスケジュールをサポートするようになりました。クエリエディタ v2 の使用をお勧めします。詳細については、「クエリエディタ v2 でのクエリのスケジューリング」を参照してください。
SQL ステートメントを実行するスケジュールを作成するには、Amazon Redshift コンソールのクエリエディターを使用します。ビジネスニーズに合った時間間隔で SQL ステートメントを実行するスケジュールを作成できます。スケジュールされたクエリが実行される時間になると、Amazon EventBridge によってクエリが開始されます。
SQL ステートメントを実行するスケジュールを作成するには
コンソールとクエリエディタを開きます (クエリエディタの使用 を参照)。このクエリエディタは、プロビジョニングされたクラスターでのみ使用できます。
[Schedule] (スケジュール) を選択して、SQL ステートメントを実行するスケジュールを作成します。
スケジュールを定義する場合は、次の情報を指定します。
クエリの実行に必要なアクセス許可を引き受けるために使用される IAM ロール。詳細については、「クエリをスケジュールするアクセス許可の設定」を参照してください。
クラスターへのアクセスを許可する AWS Secrets Manager または一時的な認証情報の認証値。詳細については、「スケジュールされたクエリの認証」を参照してください。
スケジュールされたクエリの名前と、実行する単一の SQL 文です。
スケジュールの頻度とリピートオプション、または cron 形式の値。
オプションで、Amazon SNS 通知を有効にして、スケジュールされたクエリをモニタリングできます。クエリが実行されているにもかかわらず、SNS トピックに公開されているメッセージが表示されない場合は、Amazon EventBridge ユーザーガイドの「ルールがトリガーされているが、Amazon SNS トピックに公開されたメッセージが表示されない」を参照してください。
Amazon Redshift コンソールを使用して、スケジュールされたクエリを管理および更新することもできます。コンソールのバージョンによっては、スケジュールされたクエリが次の場所にリストされることがあります。
クラスタの詳細ページの [Schedules] (スケジュール) タブ。
クエリエディタの [Scheduled queries] (スケジュールされたクエリ) タブ。
これらの場所のいずれかから [Schedule name] (スケジュール名) を選択すると、スケジュールされたクエリの定義を表示および編集できます。
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" } ] }
EventBridge イベントの IAM ロールを作成する方法の詳細については、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 を使用したシークレットの作成と管理」を参照してください。
- 一時認証情報
-
この方法では、databaseおよびDB ユーザー値。
AmazonRedshiftDataFullAccess
ポリシーは、redshift_data_api_user
という名前のデータベースユーザーにredshift:GetClusterCredentials
のアクセス許可を許可します。別のデータベースユーザーを使用して SQL ステートメントを実行する場合は、IAM ロールにポリシーを追加してredshift:GetClusterCredentials
を許可します。次のポリシー例では、データベースユーザーawsuser
とmyuser
を許可しています。{ "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" ] } }