Amazon Redshift との Amazon ゼロ ETL 統合の作成
Aurora ゼロ ETL 統合を作成するには、ソース Aurora DB クラスターとターゲットの Amazon Redshift データウェアハウスを指定します。暗号化設定をカスタマイズし、タグを追加することもできます。Aurora はソース DB クラスターとそのターゲットの間の統合を作成します。統合がアクティブになると、ソース DB クラスターに挿入したデータはすべて、設定された Amazon Redshift ターゲットにレプリケートされます。
前提条件
ゼロ ETL 統合を作成する前に、ソースの DB クラスターとターゲットの Amazon Redshift データウェアハウスを作成する必要があります。また、DB クラスターを承認済みの統合ソースとして追加することによって、データウェアハウスへのレプリケーションを許可する必要があります。
これらの各手順の実行方法については、「Amazon Redshift との Aurora ゼロ ETL 統合の開始方法」を参照してください。
必要なアクセス許可
ゼロ ETL 統合を作成するには、特定の IAM アクセス権限が必要です。少なくとも、次のアクションを実行するためのアクセス権限が必要です。
ソースの Aurora DB クラスターのゼロ ETL 統合を作成します。
すべてのゼロ ETL 統合を表示および削除します。
ターゲットデータウェアハウスへのインバウンド統合を作成します。同じアカウントが Amazon Redshift データウェアハウスを所有していて、このアカウントがそのデータウェアハウスの承認済みプリンシパルである場合は、このアクセス許可が不要となります。承認済みプリンシパルの追加については、「Amazon Redshift データウェアハウスの承認の設定」を参照してください。
以下のサンプルポリシーは、インテグレーションの作成と管理に必要な最小特権を示しています。ユーザーまたはロールが AdministratorAccess
マネージドポリシーなど、より広範なアクセス許可を持つ場合、これらの正確なアクセス許可を必要としない場合があります。
注記
Redshift Amazon リソースネーム (ARN) の形式は次のとおりです。サーバーレス名前空間 UUID の前にコロン (:
) ではなくフォワードスラッシュ ((/
) を使用していることに注意してください。
-
プロビジョニング済みクラスタ —
arn:aws:redshift:{region}:{account-id}:namespace:
namespace-uuid
-
サーバーレス -
arn:aws:redshift-serverless:{region}:{account-id}:namespace/
namespace-uuid
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"rds:CreateIntegration"
],
"Resource": [
"arn:aws:rds:{region}
:{account-id}
:cluster:source-db
",
"arn:aws:rds:{region}
:{account-id}
:integration:*"
]
},
{
"Effect": "Allow",
"Action": [
"rds:DescribeIntegrations"
],
"Resource": ["*"]
},
{
"Effect": "Allow",
"Action": [
"rds:DeleteIntegration",
"rds:ModifyIntegration"
],
"Resource": [
"arn:aws:rds:{region}
:{account-id}
:integration:*"
]
},
{
"Effect": "Allow",
"Action": [
"redshift:CreateInboundIntegration"
],
"Resource": [
"arn:aws:redshift:{region}
:{account-id}
:namespace:namespace-uuid
"
]
}]
}
別のアカウントでターゲットデータウェアハウスを選択する
別の AWS アカウント にあるターゲット Amazon Redshift データウェアハウスを指定する場合は、現在のアカウントのユーザーがターゲットアカウントのリソースにアクセスするのを許可するロールを作成する必要があります。詳細については、「所有している別の AWS アカウント の IAM ユーザーにアクセス権を付与する」を参照してください。
ロールには以下のアクセス許可が必要です。これにより、ユーザーは使用可能な Amazon Redshift のプロビジョニング済みクラスターとターゲットアカウントの Redshift Serverless 名前空間を表示できます。
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"redshift:DescribeClusters",
"redshift-serverless:ListNamespaces"
],
"Resource":[
"*"
]
}
]
}
ロールには、ターゲットアカウント ID を指定する次の信頼ポリシーが必要です。
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"AWS": "arn:aws:iam::{external-account-id}
:root"
},
"Action":"sts:AssumeRole"
}
]
}
ロールを作成する手順については、「カスタム信頼ポリシーを使用したロールの作成」を参照してください。
ゼロ ETL 統合の作成
AWS Management Console、AWS CLI、または RDS API を使用してゼロ ETL 統合を作成できます。
ゼロ ETL 統合を作成するには
AWS Management Console にサインインし、Amazon RDS コンソール https://console.aws.amazon.com/rds/
を開きます。 -
左側のナビゲーションペインから、[ゼロ ETL 統合] を選択します。
-
[ゼロ ETL 統合の作成] を選択します。
-
[統合 ID] に、統合の名前を入力します。名前には最大 63 文字の英数字を使用でき、ハイフンを含めることができます。
-
[次へ] を選択します。
[ソース] で、データの送信元となる Aurora DB クラスターを選択します。
注記
DB クラスターパラメータが正しく設定されていないと、RDS から通知されます。このメッセージを受け取った場合は、[Fix it for me] を選択するか、手動で設定することができます。手動で修正する手順については、「ステップ 1: カスタム DB クラスターのパラメータグループを作成する」を参照してください。
DB クラスターパラメータを変更するには再起動が必要です。統合を作成する前に、再起動が完了し、新しいパラメータ値ののクラスターへの適用が正常に完了している必要があります。
-
(オプション) [データフィルタリングオプションのカスタマイズ] を選択して、統合にデータフィルターを追加します。データフィルターを使用して、ターゲットデータウェアハウスへのレプリケーションの範囲を定義できます。詳細については、「Amazon Redshift との Aurora ゼロ ETL 統合でのデータフィルタリング」を参照してください。
-
ソース DB クラスターが正常に設定されたら、[次へ] を選択します。
[ターゲット] で、以下を実行します。
(オプション) Amazon Redshift ターゲットとして別の AWS アカウント を使用するには、[別のアカウントを指定] を選択します。次に、データウェアハウスを表示するアクセス許可を持つ IAM ロールの ARN を入力します。IAM ロールの作成手順については、「別のアカウントでターゲットデータウェアハウスを選択する」を参照してください。
[Amazon Redshift データウェアハウス] で、ソース DB クラスターからのレプリケートデータのターゲットを選択します。ターゲットとして、プロビジョニングされた Amazon Redshift クラスターまたは Redshift Serverless 名前空間を選択できます。
注記
指定したデータウェアハウスのリソースポリシーまたは大文字と小文字の区別の設定が正しく構成されていないと、RDS から通知されます。このメッセージを受け取った場合は、[Fix it for me] を選択するか、手動で設定することができます。手動で修正する手順については、「Amazon Redshift 管理ガイド」の「データウェアハウスの大文字と小文字の区別を有効にする」と「データウェアハウスの認可を設定する」を参照してください。
プロビジョニングされた Redshift クラスターの大文字と小文字の区別を変更するには、再起動が必要です。インテグレーションを作成する前に、再起動を完了し、新しいパラメータ値をクラスターに正常に適用する必要があります。
選択したソースとターゲットの AWS アカウント が異なる場合、Amazon RDS はこれらの設定を自動的に修正できません。他のアカウントに移動し、Amazon Redshift で手動で修正する必要があります。
-
ターゲットデータウェアハウスを正しく設定したら、[次へ] を選択します。
-
(オプション) [タグ] で、1 つ以上のタグを統合に追加します。詳細については、「Amazon Aurora および Amazon RDS リソースのタグ付け」を参照してください。
-
[暗号化] として、統合の暗号化方法を指定します。デフォルトでは、RDS はすべての統合を AWS 所有のキー で暗号化します。代わりにカスタマーマネージドキーを選択するには、[暗号化設定のカスタマイズ] を有効にして、暗号化に使用する KMS キーを選択します。詳細については、「Amazon Aurora リソースの暗号化」を参照してください。
オプションで、暗号化コンテキストを追加します。詳しくは、AWS Key Management Service デベロッパーガイドの Encryption context を参照してください。
注記
Amazon RDS は、追加する以下に加えて、次の暗号化コンテキストペアを追加します。
-
aws:redshift:integration:arn
-IntegrationArn
-
aws:servicename:id
-Redshift
これにより、追加できるペアの総数が 8 から 6 に減り、許可の制約の全体的な文字数制限に影響します。詳細については、「AWS Key Management Service デベロッパーガイド」の「Using grant constraints」を参照してください。
-
-
[Next] を選択します。
統合設定を確認し、[ゼロ ETL 統合を作成] を選択します。
作成に失敗した場合は、トラブルシューティングの手順について「ゼロ ETL 統合を作成できない」を参照してください。
統合のステータスは、作成中は Creating
であり、ターゲットの Amazon Redshift データウェアハウスのステータスは Modifying
です。この間、データウェアハウスをクエリしたり、設定を変更したりすることはできません。
統合が正常に作成されると、統合とターゲットの Amazon Redshift データウェアハウスの両方のステータスが Active
に変わります。
AWS CLI を使用してゼロ ETL 統合を作成するには、create-integration コマンドに以下のオプションを指定して使用します。
-
--integration-name
— 統合の名前を指定します。 -
--source-arn
— 統合のソースとなる Aurora DB クラスターの ARN を指定します。 -
--target-arn
— 統合のターゲットとなる Amazon Redshift データウェアハウスの ARN を指定します。
Linux、macOS、Unix の場合:
aws rds create-integration \ --integration-name
my-integration
\ --source-arn arn:aws:rds:{region}
:{account-id}
:my-db
\ --target-arn arn:aws:redshift:{region}
:{account-id}
:namespace:namespace-uuid
Windows の場合:
aws rds create-integration ^ --integration-name
my-integration
^ --source-arn arn:aws:rds:{region}
:{account-id}
:my-db
^ --target-arn arn:aws:redshift:{region}
:{account-id}
:namespace:namespace-uuid
Amazon RDS API を使用してゼロ ETL 統合を作成するには、以下のパラメータを指定して CreateIntegration
オペレーションを使用します。
-
IntegrationName
— 統合の名前を指定します。 -
SourceArn
— 統合のソースとなる Aurora DB クラスターの ARN を指定します。 -
TargetArn
— 統合のターゲットとなる Amazon Redshift データウェアハウスの ARN を指定します。
カスタマーマネージドキーでの統合の暗号化
統合の作成時に AWS 所有のキー ではなくカスタム KMS キーを指定する場合、キーポリシーは Amazon Redshift サービスプリンシパルに CreateGrant
アクションへのアクセスを提供する必要があります。さらに、現在のユーザーに DescribeKey
アクションと CreateGrant
アクションの実行を許可する必要があります。
次のポリシー例は、キーポリシーに必要なアクセス許可を指定する方法を示しています。アクセス許可の範囲をさらに狭めるためのコンテキストキーが含まれています。
{
"Version": "2012-10-17",
"Id": "Key policy",
"Statement": [
{
"Sid": "Enables IAM user permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::{account-ID}
:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allows the Redshift service principal to add a grant to a KMS key",
"Effect": "Allow",
"Principal": {
"Service": "redshift.amazonaws.com"
},
"Action": "kms:CreateGrant",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:EncryptionContext:{context-key}
":"{context-value}
"
},
"ForAllValues:StringEquals": {
"kms:GrantOperations": [
"Decrypt",
"GenerateDataKey",
"CreateGrant"
]
}
}
},
{
"Sid": "Allows the current user or role to add a grant to a KMS key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::{account-ID}
:role/{role-name}
"
},
"Action": "kms:CreateGrant",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:EncryptionContext:{context-key}
":"{context-value}
",
"kms:ViaService": "rds.us-east-1.amazonaws.com"
},
"ForAllValues:StringEquals": {
"kms:GrantOperations": [
"Decrypt",
"GenerateDataKey",
"CreateGrant"
]
}
}
},
{
"Sid": "Allows the current uer or role to retrieve information about a KMS key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::{account-ID}
:role/{role-name}
"
},
"Action": "kms:DescribeKey",
"Resource": "*"
}
]
}
詳細については、「AWS Key Management Service デベロッパーガイド」の「キーポリシーの作成」を参照してください。
次のステップ
ゼロ ETL 統合を正常に作成した後、ターゲット Amazon Redshift クラスターまたはワークグループ内にデスティネーションデータベースを作成する必要があります。これで、ソースの Aurora DB クラスターにデータを追加し、Amazon Redshift でクエリを実行できるようになります。手順については、「Amazon Redshift でのデスティネーションデータベースの作成」を参照してください。