Amazon Redshift クラスターのクエリをスケジュールするにはどうすればよいですか。
Amazon Redshift クラスターで実行するようにクエリをスケジュールしようとしています。どうすればそれができますか。
簡単な説明
クエリエディタを使用して、プロビジョニングされた Amazon Redshift クラスターの SQL クエリを実行、表示、保存、およびスケジュールできます。スケジュールされたクエリは Amazon EventBridge によって開始されます。
解決方法
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
クエリエディタの権限
クエリエディタを使用するには、ユーザーには Amazon Redshift に対する最低限の権限が必要です。クラスターが他の AWS サービスを使用している場合、ユーザーにはそれらのサービスへのアクセス権限も必要です。たとえば、AWS Secrets Manager のシークレットや AWS Key Management Service (AWS KMS) キーなどです。詳細については、「Amazon Redshift コンソールのクエリエディタを使用するために必要なアクセス権限」を参照してください。
AWS ID およびアクセス管理 (IAM) 管理ポリシーを使用して、IAM ロールに基づいてアクセス許可を管理できます。詳細については、「Amazon Redshift の AWS マネージド (定義済み) ポリシー」を参照してください。
クエリをスケジュールするには、クエリに関連付けられた IAM ユーザーとロールに、クエリエディターを管理する権限が必要です。手順については、「Amazon Redshift コンソールでクエリをスケジュールするためのアクセス権限の設定」を参照してください。
AWS マネジメントコンソールを使用してクエリをスケジュールする
AWS マネジメントコンソールを使用してクエリをスケジュールするには、以下の手順に従います。
注:
- クエリをスケジュールするには、クエリエディタ v1 を使用する必要があります。
- このクエリエディターは、プロビジョニングされたクラスターでのみ使用できます。
1. Amazon Redshift コンソールを開きます。
2. ナビゲーションペインから [Query editor] (クエリエディタ) を選択します。
3. 指示に従って、クラスター内のデータベースに接続します。
4. 指示に従って、 SQL ステートメントを実行するスケジュールを作成します。
5. Amazon Redshift で AWS Secrets Manager を使用している場合は、シークレットを選択してください。
6. 一時的な IAM ユーザー認証情報を使用している場合は、クラスターを選択し、データベースとユーザー名を指定します。**注:**IAM ユーザーが一時的な認証情報を使用するには、GetClusterCredentials 権限が必要です。
7. [Save] (保存) を選択します。
注: 簡易通知サービス (Amazon SNS) を有効にした場合は、「events.amazonaws.com」に「SNS: 公開」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}" }
イベントブリッジで SQL ステートメントを使用してクエリをスケジュールする
イベントブリッジと Amazon Redshift データ API を使用して SQL ステートメントをスケジュールできます。次の例では、現在のイベントを 5 分ごとに更新するようにスケジュールを設定しています。
1. 「Scheduled-refresh-currentEvents」という名前の EventBridge イベントルールを作成し、以下のような cron またはレート式を使用して 5 分ごとに実行するようにスケジュールします。
aws events put-rule \ --name scheduled-refresh-currentEvents \ --schedule-expression "cron(0/5 * * * ? *)"
2. クラスター、ロール、および AWS Secrets Manager ARN を含むお好きなテキストエディタを使用して、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 } } ] }
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. [Scheduled 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 クエリエディタに接続できないのはなぜですか。
関連するコンテンツ
- 質問済み 2年前lg...
- 質問済み 8日前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 1年前
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前