Amazon Redshift クラスターのクエリをスケジュールするにはどうすればよいですか。

所要時間2分
0

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 を書き留めます。ステップ 7ID が必要になります。

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 データ API を使用して Amazon Redshift クラスターとやりとりする

スケジュールに従って実行する Amazon EventBridge ルールの作成

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ