Amazon Redshift Data API の使用 - Amazon Redshift

Amazon Redshift Data API の使用

組み込みの Amazon Redshift データ API を使用して、Amazon Redshift データベースにアクセスできます。この API を使用すると、AWS Lambda、Amazon SageMaker ノートブック、AWS Cloud9 などのウェブサービスベースのアプリケーションを使用して Amazon Redshift データにアクセスできます。これらのアプリケーションの詳細については、AWS LambdaAmazon SageMaker、および AWS Cloud9 を参照してください。

Data API は、DB クラスターへの永続的な接続を必要としません。代わりに、セキュア HTTP エンドポイントおよび AWS SDK との統合を利用できます。エンドポイントを使用して、接続を管理せずに SQL ステートメントを実行することができます。Data API の呼び出しは非同期です。

Data API は、AWS Secrets Manager に格納された認証情報か、一時的なデータベース認証情報を使用します。どちらの認証方法でも、API 呼び出しでパスワードを渡す必要はありません。AWS Secrets Manager の詳細については、AWS Secrets Manager ユーザーガイドAWS Secrets Manager とはを参照してください。

Data API オペレーションの詳細については、Amazon Redshift Data API のリファレンスを参照してください。

Amazon Redshift Data API の操作

Amazon Redshift データ API を使用する前に、以下の手順を確認してください。

  1. データ API の呼び出し元として承認されているかどうかを確認します。 認証の詳細については、「」を参照してくださいAmazon Redshift Data API へのアクセスの認可

  2. Secrets Manager から認証情報を使用してデータ API を呼び出すか、一時的に認証情報を使用するかを決定します。詳細については、Amazon Redshift データ API を呼び出すときの認証情報の選択 を参照してください。

  3. 認証情報に Secrets Manager を使用する場合は、シークレットを設定します。詳細については、AWS Secrets Manager へのデータベース認証情報の保存 を参照してください。

  4. Data API を呼び出す際の考慮事項と制限事項を確認してください。詳細については、Amazon Redshift Data API を呼び出す際の考慮事項 を参照してください。

  5. Data API は、AWS Command Line Interface (AWS CLI)、独自のコードから、または Amazon Redshift コンソールのクエリエディタを使用して呼び出します。AWS CLI からの呼び出しの例については、AWS CLI を使用した Data API の呼び出し を参照してください。

Amazon Redshift Data API へのアクセスの認可

ユーザーは Data API へのアクセスが許可されている必要があります。Data API へのアクセスをユーザーに承認するには、事前定義済みの AWS Identity and Access Management (IAM) のポリシーである管理ポリシーをユーザーに追加します。マネージドポリシーによって許可および拒否されるアクセス許可を確認するには、IAM コンソール (https://console.aws.amazon.com/iam/) 参照してください。

Amazon Redshift は、AmazonRedshiftDataFullAccess マネージドポリシーを提供します。このポリシーは、Amazon Redshift Data API オペレーションへのフルアクセスを提供します。このポリシーでは、Amazon Redshift クラスターの認証とアクセスに必要な特定の Amazon Redshift、AWS Secrets Manager、IAM API オペレーションへのスコープ付きアクセスも許可します。AWS Secrets Manager を使用して認証する場合、ポリシーでは secretsmanager:GetSecretValue アクションを使用してキー RedshiftDataFullAccess でタグ付けされたシークレットを取得できます。一時的な資格情報を使用して認証する場合、ポリシーでは、クラスター内の任意のデータベースのデータベースユーザー名 redshift_data_api_user に対する redshift:GetClusterCredentials アクションの使用が許可されます。このユーザー名は、データベースにすでに作成されている必要があります。

特定のリソースへのアクセスを許可する独自の IAM ポリシーを作成することもできます。ポリシーを作成するには、AmazonRedshiftDataFullAccess ポリシーを開始テンプレートとして使用します。作成したポリシーは、Data API にアクセスする必要がある各ユーザーに追加します。

IAM ポリシーの作成については、IAM ユーザーガイドIAM ポリシーの作成を参照してください。IAM ポリシーをユーザーに追加する方法については、IAM ユーザーガイドIAMアイデンティティ許可の追加および削除を参照してください。

AWS Secrets Manager へのデータベース認証情報の保存

Data API を呼び出すと、AWS Secrets Manager のシークレットを使用して DB クラスターの認証情報を渡すことができます。この方法で認証情報を渡すには、シークレットの名前またはシークレットの Amazon リソースネーム (ARN) を指定します。

Secrets Manager で認証情報を保存するには、SecretManagerReadWrite マネージドポリシー権限が必要です。最小アクセス許可の詳細については、AWS Secrets Manager ユーザーガイドAWS Secrets Manager を使用したシークレットの作成と管理を参照してください。

Amazon Redshift クラスターのシークレットに認証情報を保存するには

  1. AWS Secrets Manager を使用して、クラスターの認証情報が含まれているシークレットを作成します。

    • [Store a new secret (新しいシークレットを保存する)] を選択する場合は、[Credentials for Redshift cluster (Redshift クラスターの認証情報)]を選択します。

    • [User name (ユーザー名)] (データベースユーザー)、[Password (パスワード)]、および [DB cluster (DB クラスター)] (クラスター識別子) の値をシークレットに保存します。

    • キー RedshiftDataFullAccess でシークレットにタグを付けます。AWS が管理するポリシー AmazonRedshiftDataFullAccess は、キー RedshiftDataFullAccess でタグ付けされたシークレットに対してのみアクション secretsmanager:GetSecretValue を許可します。

    手順については、AWS Secrets Manager ユーザーガイド基本的なシークレットの作成を参照してください。

  2. AWS Secrets Manager コンソールを使用して、作成したシークレットの詳細を表示するか、aws secretsmanager describe-secret AWS CLI コマンドを実行します。

    シークレットの名前と ARN を書き留めます。これらは、Data API への呼び出しで使用できます。

Data API 用の Amazon VPC エンドポイント (AWS PrivateLink) の作成

Amazon Virtual Private Cloud (Amazon VPC) を使用すると、Amazon Redshift クラスターやアプリケーションなどの AWS リソースを Virtual Private Cloud (VPC) 内に起動できます。AWS PrivateLink は、Amazon ネットワーク上で Amazon VPC と AWS サービス間のプライベート接続を提供します。AWS PrivateLink を使用すると、Amazon VPC エンドポイントを作成できます。これにより、Amazon VPC に基づいて、異なるアカウントと VPC のサービスに接続できます。AWS PrivateLink の詳細については、Amazon Virtual Private Cloud ユーザーガイドから VPC エンドポイントサービス (AWS PrivateLink)を参照してください。

Amazon VPC エンドポイントを使用して Data API を呼び出すことができます。Amazon VPC エンドポイントを使用すると、パブリック IP アドレスを使用せずに、Amazon VPC 内のアプリケーションと AWS ネットワーク内の Data API 間のトラフィックが維持されます。Amazon VPC エンドポイントは、公共のインターネット接続の制限に関連するコンプライアンスおよび規制要件を満たすのに役立ちます。たとえば、Amazon VPC エンドポイントを使用する場合、Amazon EC2 インスタンスで実行されているアプリケーションと、それらを含む VPC 内の Data API 間のトラフィックを維持できます。

Amazon VPC エンドポイントを作成したら、アプリケーションでコードや設定を変更することなく、エンドポイントの使用を開始できます。

Data API に Amazon VPC エンドポイントを作成するには

  1. AWS マネジメントコンソールにサインインして Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。

  2. [ エンドポイント] を選択し、[エンドポイントの作成] を選択します。

  3. [エンドポイントの作成] ページで、[サービスカテゴリ] に [AWS のサービス] を選択します。を使用する場合[サービス名] で、[redshift Data(com.amazonaws.region.redshift-data)].

  4. [VPC] の場合は、VPC を選択してエンドポイントを作成します。

    Data API コールを行うアプリケーションを含む VPC を選択します。

  5. [サブネット] で、アプリケーションを実行している AWS サービスによって使用される各アベイラビリティーゾーン(AZ)のサブネットを選択します。

    Amazon VPC エンドポイントを作成するには、エンドポイントにアクセスできるプライベート IP アドレスの範囲を指定します。これを行うには、各アベイラビリティーゾーンのサブネットを選択します。これにより、VPC エンドポイントは各アベイラビリティーゾーンに固有のプライベート IP アドレス範囲に制限され、各アベイラビリティーゾーンに Amazon VPC エンドポイントが作成されます。

  6. [DNS 名を有効にする] で、[このエンドポイントで有効にする] を選択します。

    プライベート DNS は、標準の Data API DNS ホスト名 (https://redshift-data.region.amazonaws.com) を、Amazon VPC エンドポイントに固有の DNS ホスト名に関連付けられたプライベート IP アドレスに解決します。その結果、Data API エンドポイント URL を更新するためのコードや設定を変更することなく、AWS CLI または AWS SDK を使用して Data API VPC エンドポイントにアクセスできます。

  7. セキュリティグループで、Amazon VPC エンドポイントに関連付けるセキュリティグループを選択します。

    アプリケーションを実行している AWS のサービスへのアクセスを許可するセキュリティグループを選択します。たとえば、Amazon EC2 インスタンスでアプリケーションを実行している場合は、Amazon EC2 インスタンスへのアクセスを許可するセキュリティグループを選択します。セキュリティグループを使用すると、VPC 内のリソースから Amazon VPC エンドポイントへのトラフィックを制御できます。

  8. [Create endpoint (エンドポイントの作成)] を選択します。

エンドポイントを作成したら、AWS でリンクを選択して、エンドポイントの詳細を表示します。

エンドポイントの [Details (詳細)] タブには、Amazon VPC エンドポイントの作成中に生成された DNS ホスト名が表示されます。

標準エンドポイント (redshift-data.region.amazonaws.com) または VPC 固有のエンドポイントの 1 つを使用して、Amazon VPC 内の Data API を呼び出すことができます。標準 Data API エンドポイントは、自動的に Amazon VPC エンドポイントにルーティングします。このルーティングは、Amazon VPC エンドポイントの作成時にプライベート DNS ホスト名が有効になったために発生します。

Data API コールで Amazon VPC エンドポイントを使用すると、アプリケーションと Data API 間のすべてのトラフィックは、それらを含む Amazon VPC に残ります。Amazon VPC エンドポイントは、任意のタイプの Data API コールに使用できます。Data API を呼び出す方法については、「Amazon Redshift Data API を呼び出す際の考慮事項」を参照してください。

Amazon Redshift Data API を呼び出す際の考慮事項

Data API を呼び出すときは、以下について検討します。

  • クエリの最大期間は 24 時間です。

  • アクティブなクエリの最大数 (STARTED および SUBMITTED クエリ) は、Amazon Redshift クラスターあたり 200 です。

  • クエリ結果の最大サイズは 100 MB です。100 MB を超えるレスポンスデータが返されると、その呼び出しは終了します。

  • クエリ結果の最大保持時間は 24 時間です。

  • クエリステートメントの最大サイズは 100 KB です。

  • Data API は、次のノードタイプの単一ノードおよび複数ノードのクラスターを照会するために使用できます。

    • dc2.large

    • dc2.8xlarge

    • ds2.xlarge

    • ds2.8xlarge

    • ra3.xlplus

    • ra3.4xlarge

    • ra3.16xlarge

  • クラスターは、Amazon VPC サービスに基づいて Virtual Private Cloud (VPC) で作成する必要があります。

  • デフォルトでは、ExecuteStatementAPI オペレーションの実行者と同じ IAM ロールまたは IAM ユーザーを持つユーザーは、CancelStatementDescribeStatementGetStatementResultおよびListStatementsAPI オペレーションで同じステートメントを操作できます。

  • データ API が利用可能な AWS リージョンの一覧については、アマゾン ウェブ サービスの全般的なリファレンスRedshift データ API エンドポイントをご覧ください。

Amazon Redshift データ API を呼び出すときの認証情報の選択

データ API を呼び出すと、一部の API 操作で次のいずれかの認証方法を使用します。各メソッドでは、異なるパラメータの組み合わせが必要です。

AWS Secrets Manager

この方法では、AWS Secrets Manager に保存される secret-arn シークレット値を指定します。指定されたシークレットには、データベースに接続するための認証情報が含まれています。シークレットのクラスター識別子と一致する cluster-identifier の値も指定します。

一時認証情報

この方法では、cluster-identifierdatabase、および db-user の値を指定します。

どちらの方法でも、クラスターが配置されている AWS リージョンを指定する region 値を指定することもできます。

Amazon Redshift データ API を呼び出すときの JDBC データ型のマッピング

次の表は、Data API 呼び出しで指定したデータ型に Java Database Connectivity (JDBC) データ型をマッピングしたものです。

JDBC データ型

Data API のデータ型

INTEGER, TINYINT, SMALLINT, BIGINT

LONG

FLOAT, REAL, DOUBLE

DOUBLE

DECIMAL

STRING

BOOLEAN, BIT

BOOLEAN

BLOB, BINARY, LONGVARBINARY, VARBINARY

BLOB

CLOB

STRING

その他の型 (日時に関する型も含む)

STRING

DECIMALTIME などの特定のタイプでは、ヒントが必要になる場合があります。このヒントは、String 値を別のタイプとしてデータベースに渡す必要があることを Data API に指示します。これには、typeHint データ型の SqlParameter に値を含めます。typeHint に指定できる値は以下のとおりです。

  • DECIMAL – 対応する String パラメータ値は、DECIMAL タイプのオブジェクトとしてデータベースに送信されます。

  • TIMESTAMP – 対応する String パラメータ値は、TIMESTAMP タイプのオブジェクトとしてデータベースに送信されます。受け入れられる形式は YYYY-MM-DD HH:MM:SS[.FFF] です。

  • TIME – 対応する String パラメータ値は、TIME タイプのオブジェクトとしてデータベースに送信されます。受け入れられる形式は HH:MM:SS[.FFF] です。

  • DATE – 対応する String パラメータ値は、DATE タイプのオブジェクトとしてデータベースに送信されます。受け入れられる形式は YYYY-MM-DD です。

注記

現在、Data API はユニバーサル固有識別子 (UUID) の配列をサポートしていません。

Data API の呼び出し

Data API または AWS CLI を呼び出して、クラスターで SQL ステートメントを実行できます。SQL ステートメントを実行するための主要な操作は ExecuteStatement です。Data API は、AWS SDK でサポートされているプログラミング言語をサポートしています。詳細については、AWS で構築するツールを参照してください。

AWS CLI を使用した Data API の呼び出し

Data API は、AWS CLI を使用して呼び出すことができます。

以下の例では、AWS CLI を使用して Data API を呼び出します。例を実行するには、環境に合わせてパラメータ値を編集します。これらの例は、データ API 操作の一部を示しています。詳細については、AWS CLI コマンドリファレンスを参照してください。

SQL 文を実行するには

SQL ステートメントを実行するには、aws redshift-data execute-statement AWS CLI コマンドを使用します。

次の AWS CLI コマンドは、SQL ステートメントを実行し、結果を取得する識別子を返します。この例では、AWS Secrets Manager の認証方法を使用します。

aws redshift-data execute-statement --region us-west-2 --secret arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn --cluster-identifier mycluster-test --sql "select * from stl_query limit 1" --database dev

次は、レスポンスの例です。

{ "ClusterIdentifier": "mycluster-test", "CreatedAt": 1598323175.823, "Database": "dev", "Id": "c016234e-5c6c-4bc5-bb16-2c5b8ff61814", "SecretArn": "arn:aws:secretsmanager:us-west-2:123456789012:secret:yanruiz-secret-hKgPWn" }

次の AWS CLI コマンドは、SQL ステートメントを実行し、結果を取得する識別子を返します。この例では、一時的な認証情報認証方法を使用します。

aws redshift-data execute-statement --region us-west-2 --db-user myuser --cluster-identifier mycluster-test --database dev --sql "select * from stl_query limit 1"

次は、レスポンスの例です。

{ "ClusterIdentifier": "mycluster-test", "CreatedAt": 1598306924.632, "Database": "dev", "DbUser": "myuser", "Id": "d9b6c0c9-0747-4bf4-b142-e8883122f766" }

SQL 文に関するメタデータを一覧表示するには

SQL ステートメントに関するメタデータを一覧表示するには、aws redshift-data list-statements AWS CLI コマンドを使用します。このコマンドの実行の承認は、呼び出し元の IAM アクセス許可に基づいています。

次の AWS CLI コマンドは、実行された SQL ステートメントを示しています。

aws redshift-data list-statements --region us-west-2 --status ALL

次は、レスポンスの例です。

{ "Statements": [ { "CreatedAt": 1598306924.632, "Id": "d9b6c0c9-0747-4bf4-b142-e8883122f766", "QueryString": "select * from stl_query limit 1", "Status": "FINISHED", "UpdatedAt": 1598306926.667 }, { "CreatedAt": 1598311717.437, "Id": "e0ebd578-58b3-46cc-8e52-8163fd7e01aa", "QueryString": "select * from stl_query limit 1", "Status": "FAILED", "UpdatedAt": 1598311719.008 }, { "CreatedAt": 1598313683.65, "Id": "c361d4f7-8c53-4343-8c45-6b2b1166330c", "QueryString": "select * from stl_query limit 1", "Status": "ABORTED", "UpdatedAt": 1598313685.495 }, { "CreatedAt": 1598306653.333, "Id": "a512b7bd-98c7-45d5-985b-a715f3cfde7f", "QueryString": "select 1", "Status": "FINISHED", "UpdatedAt": 1598306653.992 } ] }

SQL ステートメントに関するメタデータを記述するには

SQL ステートメントのメタデータの説明を取得するには、aws redshift-data describe-statement AWS CLI コマンドを使用します。このコマンドの実行の承認は、呼び出し元の IAM アクセス許可に基づいています。

次の AWS CLI コマンドは、SQL ステートメントを示しています。

aws redshift-data describe-statement --id d9b6c0c9-0747-4bf4-b142-e8883122f766 --region us-west-2

次は、レスポンスの例です。

{ "ClusterIdentifier": "mycluster-test", "CreatedAt": 1598306924.632, "Duration": 1095981511, "Id": "d9b6c0c9-0747-4bf4-b142-e8883122f766", "QueryString": "select * from stl_query limit 1", "RedshiftPid": 20859, "RedshiftQueryId": 48879, "ResultRows": 1, "ResultSize": 4489, "Status": "FINISHED", "UpdatedAt": 1598306926.667 }

SQL 文の結果を取得するには

実行した SQL ステートメントから結果を取得するには、redshift-data get-statement-result AWS CLI コマンドを使用します。このコマンドの実行の承認は、呼び出し元の IAM アクセス許可に基づいています。

aws redshift-data get-statement-result --id d9b6c0c9-0747-4bf4-b142-e8883122f766 --region us-west-2

次は、レスポンスの例です。

{ "ColumnMetadata": [ { "isCaseSensitive": false, "isCurrency": false, "isSigned": true, "label": "userid", "length": 0, "name": "userid", "nullable": 0, "precision": 10, "scale": 0, "schemaName": "", "tableName": "stll_query", "typeName": "int4" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": true, "label": "query", "length": 0, "name": "query", "nullable": 0, "precision": 10, "scale": 0, "schemaName": "", "tableName": "stll_query", "typeName": "int4" }, { "isCaseSensitive": true, "isCurrency": false, "isSigned": false, "label": "label", "length": 0, "name": "label", "nullable": 0, "precision": 320, "scale": 0, "schemaName": "", "tableName": "stll_query", "typeName": "bpchar" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": true, "label": "xid", "length": 0, "name": "xid", "nullable": 0, "precision": 19, "scale": 0, "schemaName": "", "tableName": "stll_query", "typeName": "int8" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": true, "label": "pid", "length": 0, "name": "pid", "nullable": 0, "precision": 10, "scale": 0, "schemaName": "", "tableName": "stll_query", "typeName": "int4" }, { "isCaseSensitive": true, "isCurrency": false, "isSigned": false, "label": "database", "length": 0, "name": "database", "nullable": 0, "precision": 32, "scale": 0, "schemaName": "", "tableName": "stll_query", "typeName": "bpchar" }, { "isCaseSensitive": true, "isCurrency": false, "isSigned": false, "label": "querytxt", "length": 0, "name": "querytxt", "nullable": 0, "precision": 4000, "scale": 0, "schemaName": "", "tableName": "stll_query", "typeName": "bpchar" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": false, "label": "starttime", "length": 0, "name": "starttime", "nullable": 0, "precision": 29, "scale": 6, "schemaName": "", "tableName": "stll_query", "typeName": "timestamp" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": false, "label": "endtime", "length": 0, "name": "endtime", "nullable": 0, "precision": 29, "scale": 6, "schemaName": "", "tableName": "stll_query", "type": 93, "typeName": "timestamp" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": true, "label": "aborted", "length": 0, "name": "aborted", "nullable": 0, "precision": 10, "scale": 0, "schemaName": "", "tableName": "stll_query", "typeName": "int4" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": true, "label": "insert_pristine", "length": 0, "name": "insert_pristine", "nullable": 0, "precision": 10, "scale": 0, "schemaName": "", "tableName": "stll_query", "typeName": "int4" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": true, "label": "concurrency_scaling_status", "length": 0, "name": "concurrency_scaling_status", "nullable": 0, "precision": 10, "scale": 0, "schemaName": "", "tableName": "stll_query", "typeName": "int4" } ], "Records": [ [ { "longValue": 1 }, { "longValue": 3 }, { "stringValue": "health " }, { "longValue": 1023 }, { "longValue": 15279 }, { "stringValue": "dev " }, { "stringValue": "select system_status from stv_gui_status; " }, { "stringValue": "2020-08-21 17:33:51.88712" }, { "stringValue": "2020-08-21 17:33:52.974306" }, { "longValue": 0 }, { "longValue": 0 }, { "longValue": 6 } ] ], "TotalNumRows": 1 }

テーブルの説明

テーブルを記述するメタデータを取得するには、aws redshift-data describe-table AWS CLI コマンドを使用します。

次の AWS CLI コマンドは、SQL ステートメントを実行し、テーブルを説明するメタデータを返します。この例では、AWS Secrets Manager の認証方法を使用します。

aws redshift-data describe-table --region us-west-2 --cluster-identifier mycluster-test --database dev --schema information_schema --table sql_features --secret arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn

次は、レスポンスの例です。

{ "ColumnList": [ { "isCaseSensitive": false, "isCurrency": false, "isSigned": false, "length": 2147483647, "name": "feature_id", "nullable": 1, "precision": 2147483647, "scale": 0, "schemaName": "information_schema", "tableName": "sql_features", "typeName": "character_data" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": false, "length": 2147483647, "name": "feature_name", "nullable": 1, "precision": 2147483647, "scale": 0, "schemaName": "information_schema", "tableName": "sql_features", "typeName": "character_data" } ] }

次の AWS CLI コマンドは、テーブルを記述する SQL ステートメントを実行します。この例では、一時的な認証情報認証方法を使用します。

aws redshift-data describe-table --region us-west-2 --db-user myuser --cluster-identifier mycluster-test --database dev --schema information_schema --table sql_features

次は、レスポンスの例です。

{ "ColumnList": [ { "isCaseSensitive": false, "isCurrency": false, "isSigned": false, "length": 2147483647, "name": "feature_id", "nullable": 1, "precision": 2147483647, "scale": 0, "schemaName": "information_schema", "tableName": "sql_features", "typeName": "character_data" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": false, "length": 2147483647, "name": "feature_name", "nullable": 1, "precision": 2147483647, "scale": 0, "schemaName": "information_schema", "tableName": "sql_features", "typeName": "character_data" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": false, "length": 2147483647, "name": "sub_feature_id", "nullable": 1, "precision": 2147483647, "scale": 0, "schemaName": "information_schema", "tableName": "sql_features", "typeName": "character_data" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": false, "length": 2147483647, "name": "sub_feature_name", "nullable": 1, "precision": 2147483647, "scale": 0, "schemaName": "information_schema", "tableName": "sql_features", "typeName": "character_data" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": false, "length": 2147483647, "name": "is_supported", "nullable": 1, "precision": 2147483647, "scale": 0, "schemaName": "information_schema", "tableName": "sql_features", "typeName": "character_data" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": false, "length": 2147483647, "name": "is_verified_by", "nullable": 1, "precision": 2147483647, "scale": 0, "schemaName": "information_schema", "tableName": "sql_features", "typeName": "character_data" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": false, "length": 2147483647, "name": "comments", "nullable": 1, "precision": 2147483647, "scale": 0, "schemaName": "information_schema", "tableName": "sql_features", "typeName": "character_data" } ] }

クラスター内のデータベースを一覧表示するには

クラスター内のデータベースを一覧表示するには、aws redshift-data list-databases AWS CLI コマンドを使用します。

次の AWS CLI コマンドは、SQL ステートメントを実行してデータベースを一覧表示します。この例では、AWS Secrets Manager の認証方法を使用します。

aws redshift-data list-databases --region us-west-2 --secret arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn --cluster-identifier mycluster-test --database dev

次は、レスポンスの例です。

{ "Databases": [ "dev" ] }

次の AWS CLI コマンドは、SQL ステートメントを実行してデータベースを一覧表示します。この例では、一時的な認証情報認証方法を使用します。

aws redshift-data list-databases --region us-west-2 --db-user myuser --cluster-identifier mycluster-test --database dev

次は、レスポンスの例です。

{ "Databases": [ "dev" ] }

データベース内のスキーマを一覧表示するには

データベース内のスキーマを一覧表示するには、aws redshift-data list-schemas AWS CLI コマンドを使用します。

次の AWS CLI コマンドは、SQL ステートメントを実行して、データベース内のスキーマをリストします。この例では、AWS Secrets Manager の認証方法を使用します。

aws redshift-data list-schemas --region us-west-2 --secret arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn --cluster-identifier mycluster-test --database dev

次は、レスポンスの例です。

{ "Schemas": [ "information_schema", "pg_catalog", "pg_internal", "public" ] }

次の AWS CLI コマンドは、SQL ステートメントを実行して、データベース内のスキーマをリストします。この例では、一時的な認証情報認証方法を使用します。

aws redshift-data list-schemas --region us-west-2 --db-user mysuser --cluster-identifier mycluster-test --database dev

次は、レスポンスの例です。

{ "Schemas": [ "information_schema", "pg_catalog", "pg_internal", "public" ] }

データベース内のテーブルを一覧表示するには

データベース内のテーブルを一覧表示するには、aws redshift-data list-tables AWS CLI コマンドを使用します。

次の AWS CLI コマンドは、SQL ステートメントを実行して、データベース内のテーブルを一覧表示します。この例では、AWS Secrets Manager の認証方法を使用します。

aws redshift-data list-tables --region us-west-2 --secret arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn --cluster-identifier mycluster-test --database dev --schema information_schema

次は、レスポンスの例です。

{ "Tables": [ { "name": "sql_features", "schema": "information_schema", "type": "SYSTEM TABLE" }, { "name": "sql_implementation_info", "schema": "information_schema", "type": "SYSTEM TABLE" } }

次の AWS CLI コマンドは、SQL ステートメントを実行して、データベース内のテーブルを一覧表示します。この例では、一時的な認証情報認証方法を使用します。

aws redshift-data list-tables --region us-west-2 --db-user myuser --cluster-identifier mycluster-test --database dev --schema information_schema

次は、レスポンスの例です。

{ "Tables": [ { "name": "sql_features", "schema": "information_schema", "type": "SYSTEM TABLE" }, { "name": "sql_implementation_info", "schema": "information_schema", "type": "SYSTEM TABLE" } ] }

Amazon Redshift Data API のトラブルシューティングに関する問題

Data API に関する問題のトラブルシューティングには、「一般的なエラーメッセージ」というタイトルの以下のセクションを使用します。

クエリのパケットが大きすぎる

クエリのパケットが大きすぎることを示すエラーが表示された場合は、通常、ローに対して返される結果セットが大きすぎます。Data API のサイズ制限は、データベースから返る結果セットの 1 行あたり 64 KB です。

この問題を解決するには、結果セットの各行が 64 KB 以下であることを確認します。

データベース応答がサイズ制限を超えている

データベース応答がサイズ制限を超えていることを示すエラーが表示される場合、通常、データベースから返る結果セットのサイズが大きすぎます。Data API の制限は、データベースより返る結果セットで 100 MB です。

この問題を解決するには、Data API への呼び出しで返るデータが 100 MB 以下になるようにします。100 MB を超えるデータを返す必要がある場合は、クエリで LIMIT 句を使用して、複数のステートメント呼び出しを行います。

Amazon EventBridge を使用した Amazon Redshift Data API オペレーションのスケジューリング

Amazon EventBridge イベントは、AWS リソースの状態変化への対応に役立ちます。リソースの状態が変化すると、自動的にイベントがイベントストリームに送信されます。イベントは、Amazon Redshift データベースを含むアカウントに送信されます。選択したイベントをストリーム内で照合し、 関数にルーティングしてアクションを実行するためのルールを作成できます。ルールを使用して、あらかじめ決められたスケジュールに従ってアクションを実行することもできます。詳細については、Amazon EventBridge ユーザーガイドを参照してください。

EventBridge でデータ API オペレーションをスケジュールするには、関連付けられた IAM ロールが CloudWatch Events (events.amazonaws.com) のプリンシパルを信頼する必要があります。このロールには、管理対象ポリシー AmazonEventBridgeFullAccess に相当するものが添付されている必要があります。また、Data API によって管理される AmazonRedshiftDataFullAccess ポリシー権限も必要です。IAM コンソールで、これらのアクセス許可を持つ IAM ロールを作成できます。IAM コンソールでロールを作成するときは、CloudWatch Events 用に AWS サービスの信頼できるエンティティを選択します。IAM ロールの作成の詳細については、IAM ユーザーガイドAWS サービス用のロールを作成するを参照してください。

次の例では、AWS CLI を使用して、SQL ステートメントの実行に使用される EventBridge ルールを作成します。

aws events put-rule --name test-redshift-data --schedule-expression "rate(1 minute)"

次に、ルールで指定されたスケジュールで実行する EventBridge ターゲットが作成されます。

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

入力 data.json ファイルは次のとおりです。

{ "Rule": "test-redshift-data", "EventBusName": "default", "Targets": [ { "Id": "2", "Arn": "arn:aws:redshift:us-east-1:123456789012:cluster:mycluster", "RoleArn": "arn:aws:iam::123456789012:role/Administrator", "RedshiftDataParameters": { "Database": "dev", "DbUser": "root", "Sql": "select 1;", "StatementName": "test-scheduler-statement", "WithEvent": true } } ] }