AWSセルフマネージド型データベースソースのゼロ ETL 統合 - AWSデータベース移行サービス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWSセルフマネージド型データベースソースのゼロ ETL 統合

AWSゼロ ETL 統合は、トランザクションデータと運用データを複数の運用データベースソースとトランザクションデータベースソースから Amazon Redshift、Amazon S3、Amazon S3 Tables で利用できるようにするフルマネージドソリューションです。ゼロ ETL を使用すると、MySQL、PostgreSQL、SQL Server、Oracle などのセルフマネージド型ソースデータベースから、既存の AWS Database Migration Service(AWS DMS) ソースエンドポイントを介して Amazon Redshift にデータをレプリケートできます。自動同期により、従来の抽出、変換、ロード (ETL) プロセスを回避できます。また、リアルタイム分析と AI ワークロードも有効にします。詳細については、「Amazon Redshift 管理ガイド」の「ゼロ ETL 統合」を参照してください。

ゼロ ETL 統合には、次の利点があります。

  • リアルタイムデータレプリケーション – Oracle データベースから Amazon Redshift への継続的なデータ同期を最小限のレイテンシーで実行します。

  • 複雑な ETL パイプラインの排除 – カスタムデータ統合ソリューションを構築および維持する必要はありません。

  • 運用オーバーヘッドの削減 – AWSAPIs による自動セットアップと管理。

  • データ統合アーキテクチャの簡素化 – セルフマネージド型データベースとAWS分析サービス間のシームレスな統合。

  • セキュリティの強化 – 組み込みの暗号化と IAM アクセスコントロール。

セルフマネージド型データベースソースでのゼロ ETL 統合の仕組み

以前にセルフマネージド型データベース用に作成した既存のAWS DMSエンドポイントを使用することも、新しいエンドポイントを作成することもできます。

  • AWS Glueコンソールまたは CLI を使用して、AWS Glueカタログのターゲットとして Amazon Redshift とのゼロ ETL 統合を作成します。ゼロ ETL 統合を作成するときに、スキーマとテーブルフィルターを指定できます。

  • 統合に関連する追加の読み取り専用リソースは、 AWS DMSサービス内で自動的に作成されます。ゼロ ETL エンジンを含むこれらのリソースは、全ロードおよび継続的なデータ変更プロセスを開始し、データを Amazon Redshift ターゲットデータベースと同期するために使用されます。

  • 統合ソース、ゼロ ETL 統合、Amazon Redshift データウェアハウスのそれぞれの作成時に、データの暗号化を制御します。

  • 統合では、データパイプラインの状態をモニタリングし、可能な場合は問題から回復します。

  • 同種ソースから単一の Amazon Redshift データウェアハウスに統合を作成して、複数のアプリケーションにわたって総合的なインサイトを引き出すことができます。

データがレプリケートされたら、Amazon Redshift の分析機能を使用できます。例えば、組み込みの機械学習 (ML)、マテリアライズドビュー、データ共有、複数のデータストアやデータレイクへの直接アクセスなどが利用できます。データエンジニアにとって、ゼロ ETL 統合は、複雑なデータパイプラインの断続的なエラーによって遅延する可能性のある、時間的制約のあるデータへのアクセスを提供します。トランザクションデータに対して分析クエリや機械学習モデルを実行して、時間的制約のあるイベントやビジネス上の意思決定について、タイムリーなインサイトを引き出すことができます。

Amazon Redshift イベント通知サブスクリプションを作成して、ゼロ ETL 統合で問題が発生したときに自動的に通知を受け取ることができます。統合関連のイベント通知のリストを表示するには、「Amazon EventBridge とのゼロ ETL 統合イベント通知」を参照してください。サブスクリプションを作成する最も簡単な方法は、Amazon Simple Notification Service コンソールを使用することです。Amazon SNS トピックの作成とサブスクリプションについては、「Amazon Simple Notification Service デベロッパーガイド」の「Amazon SNS の開始方法」を参照してください。

ゼロ ETL 統合のための IAM アクセス許可と暗号化の設定

ゼロ ETL 統合を作成および管理するには、適切な IAM アクセス許可、 AWS Key Management Service(AWS KMS) 暗号化キー、リソースポリシーを設定する必要があります。このセクションでは、必要なセキュリティコンポーネントの設定に関するガイダンスを提供します。

前提条件

ゼロ ETL 統合を作成する前に、以下があることを確認してください。

  • 統合を作成および管理するための適切なアクセス許可を持つ IAM ユーザーまたはロール

  • セルフマネージドデータベースの既存のAWS DMSソースエンドポイント

  • ターゲットとしての Amazon Redshift プロビジョンドクラスターまたはサーバーレス名前空間

  • VPC サブネットとセキュリティグループを含むネットワーク設定

KMS キーを作成する

まず、カスタマーマネージドAWS KMSキーを作成して、ゼロ ETL 統合でデータを暗号化します。次の例では、対称暗号化キーを作成します。

aws kms create-key \ --description "On-prem Zero-ETL Integration Encryption Key" \ --key-usage ENCRYPT_DECRYPT \ --key-spec SYMMETRIC_DEFAULT \ --region region

キーポリシーを設定して統合を作成するときに必要になるため、レスポンスKeyIdArnの と に注意してください。

出力例:

{ "KeyMetadata": { "AWSAccountId": "account-id", "KeyId": "4e2c14f8-7abe-4aec-851a-379f6ed973a8", "Arn": "arn:aws:kms:region:account-id:key/4e2c14f8-7abe-4aec-851a-379f6ed973a8", "CreationDate": 1763155061.148, "Enabled": true, "Description": "Zero-ETL Integration Encryption Key", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "Origin": "AWS_KMS", "KeyManager": "CUSTOMER", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeySpec": "SYMMETRIC_DEFAULT", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ], "MultiRegion": false } }

KMS キーポリシーの設定

KMS キーを作成したら、Amazon Redshift と AWS Glueのサービスがキーを暗号化および復号オペレーションに使用できるようにキーポリシーを設定します。キーポリシーは、サービスプリンシパルに必要なアクセス許可を付与し、統合の作成時に使用される暗号化コンテキストを含める必要があります。

次の例は、ゼロ ETL 統合のキーポリシーを示しています。

{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allows the Redshift and glue service principal to add a grant to a KMS key", "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com", "glue.amazonaws.com" ] }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:context-key": "context-value" }, "ForAllValues:StringEquals": { "kms:GrantOperations": [ "Decrypt", "GenerateDataKey", "CreateGrant", "GenerateDataKeyWithoutPlaintext", "ReEncryptTo" ] } } } ] }

kms:EncryptionContext 条件は、統合の作成時に指定した追加の暗号化コンテキストと一致する必要があります。キーポリシーは、 AWS KMSコンソールまたは次の CLI コマンドを使用して更新できます。

aws kms put-key-policy \ --key-id key-id \ --policy-name default \ --policy file://kms-key-policy.json

IAM ユーザーの作成と CLI AWSの設定

ゼロ ETL 統合の管理に使用される IAM ユーザーを作成し、適切な認証情報を使用して AWSCLI を設定します。

  1. IAM ユーザーを作成します。

    aws iam create-user --user-name cli-user
  2. ユーザーのアクセスキーを作成します。

    aws iam create-access-key --user-name cli-user

    CLI の設定に必要なため、出力SecretAccessKeyから AccessKeyIdと AWSを保存します。

IAM ポリシーを作成してアタッチする

ゼロ ETL 統合オペレーションのアクセス許可を付与する IAM ポリシーを作成します。ポリシーにはAWS Glue、、AWS DMSAmazon Redshift、AWS KMSおよび のアクセス許可を含める必要があります。

次のポリシーをファイル ( など/tmp/zetl-policy.json) に保存します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ZetlGlueIntegrationAccess", "Effect": "Allow", "Action": [ "glue:CreateIntegration", "glue:ModifyIntegration", "glue:DeleteIntegration", "glue:DescribeIntegrations", "glue:DescribeInboundIntegrations" ], "Resource": "*" }, { "Sid": "DMSIntegrationAccess", "Effect": "Allow", "Action": [ "dms:CreateOutboundIntegration", "dms:ModifyOutboundIntegration", "dms:CreateEndpoint", "dms:DescribeEndpoints", "dms:ModifyEndpoint", "dms:DeleteEndpoint", "dms:TestConnection" ], "Resource": "*" }, { "Sid": "ZetlRedshiftFullAccess", "Effect": "Allow", "Action": [ "redshift:*", "redshift-serverless:*", "ec2:DescribeAccountAttributes", "ec2:DescribeAddresses", "ec2:DescribeAvailabilityZones", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DescribeInternetGateways", "sns:CreateTopic", "sns:Get*", "sns:List*", "cloudwatch:Describe*", "cloudwatch:Get*", "cloudwatch:List*", "cloudwatch:PutMetricAlarm", "cloudwatch:EnableAlarmActions", "cloudwatch:DisableAlarmActions", "tag:GetResources", "tag:UntagResources", "tag:GetTagValues", "tag:GetTagKeys", "tag:TagResources" ], "Resource": "*" }, { "Sid": "ZetlRedshiftDataAPI", "Effect": "Allow", "Action": [ "redshift-data:ExecuteStatement", "redshift-data:CancelStatement", "redshift-data:ListStatements", "redshift-data:GetStatementResult", "redshift-data:DescribeStatement", "redshift-data:ListDatabases", "redshift-data:ListSchemas", "redshift-data:ListTables", "redshift-data:DescribeTable" ], "Resource": "*" }, { "Sid": "ZetlKMSAccess", "Effect": "Allow", "Action": [ "kms:CreateKey", "kms:DescribeKey", "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:ListKeys", "kms:CreateAlias", "kms:ListAliases", "kms:CreateGrant" ], "Resource": "*" }, { "Sid": "ZetlSecretsManagerAccess", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:CreateSecret", "secretsmanager:UpdateSecret", "secretsmanager:DeleteSecret", "secretsmanager:DescribeSecret", "secretsmanager:ListSecrets", "secretsmanager:GetResourcePolicy", "secretsmanager:PutResourcePolicy", "secretsmanager:ValidateResourcePolicy" ], "Resource": "*" } ] }

ポリシーを作成し、IAM ユーザーにアタッチします。

aws iam create-policy \ --policy-name ZetlCustomPolicy \ --policy-document file:///tmp/zetl-policy.json aws iam attach-user-policy \ --policy-arn arn:aws:iam::account-id:policy/ZetlCustomPolicy \ --user-name cli-user

CLI AWSプロファイルの設定

前のステップで作成したユーザー認証情報を使用して AWSCLI プロファイルを設定します。

aws configure set aws_access_key_id ACCESS_KEY_ID --profile cli-user aws configure set aws_secret_access_key SECRET_ACCESS_KEY --profile cli-user aws configure set region region --profile cli-user aws configure set output json --profile cli-user

プロファイル設定をテストします。

aws sts get-caller-identity --profile cli-user

出力には、ユーザーのアカウント ID、ユーザー ID、ARN が表示され、プロファイルが正しく設定されていることを確認します。

Redshift リソースポリシーの作成

Amazon Redshift リソースポリシーを作成して、AWS DMSソースエンドポイントが Amazon Redshift 名前空間とのインバウンド統合を作成することを承認します。このポリシーは Amazon Redshift 名前空間にアタッチされ、どのソースがデータをレプリケートできるかを制御します。

次の例は、Amazon Redshift 名前空間のリソースポリシーを作成する方法を示しています。

aws redshift put-resource-policy \ --policy '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": ["redshift.amazonaws.com"] }, "Action": ["redshift:AuthorizeInboundIntegration"], "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:dms:region:account-id:endpoint:endpoint-id" } } }, { "Effect": "Allow", "Principal": { "AWS": "account-id" }, "Action": [ "redshift:CreateInboundIntegration", "redshift:ModifyInboundIntegration" ] } ] }' \ --resource-arn arn:aws:redshift:region:account-id:namespace:namespace-id \ --region region

次のプレースホルダーを置き換えます。

  • region – リソースが配置されているAWSリージョン

  • account-id – AWSアカウント ID

  • endpoint-id – AWS DMSソースエンドポイントの ID

  • namespace-id – Amazon Redshift 名前空間の ID

例: 暗号化によるゼロ ETL 統合の作成

必要なアクセス許可と暗号化キーを設定したら、 AWS GlueAPI を使用してゼロ ETL 統合を作成できます。次の例は、KMS 暗号化を使用して MySQL ソースから Amazon Redshift ターゲットに統合を作成する方法を示しています。

aws glue create-integration \ --integration-name mysql-onprem-integration \ --source-arn arn:aws:dms:region:account-id:endpoint:source-endpoint-id \ --target-arn arn:aws:redshift:region:account-id:namespace:namespace-id \ --description "MySQL to Redshift integration" \ --integration-config '{"SourceProperties":{"SubnetIds":"subnet-id1,subnet-id2,subnet-id3","VpcSecurityGroupIds":"sg-id"}}' \ --data-filter "include: mysql.*" \ --kms-key-id arn:aws:kms:region:account-id:key/key-id \ --additional-encryption-context '{"context-key": "context-value"}' \ --profile cli-user \ --region region

コマンドには、次のキーパラメータが含まれます。

  • --integration-name – 統合の一意の名前

  • --source-arn – AWS DMSソースエンドポイントの ARN

  • --target-arn – Amazon Redshift 名前空間の ARN

  • --integration-config – サブネット IDsとセキュリティグループを含むネットワーク設定

  • --data-filter – レプリケートするスキーマとテーブルを指定します。

  • --kms-key-id – 暗号化用のAWS KMSキーの ARN

  • --additional-encryption-context – KMS キーポリシーと一致する必要がある暗号化コンテキストのキーと値のペア (例: {"context-key": "context-value"})

  • --profile – 使用する AWSCLI プロファイル (前に作成した cli-user プロファイル)

正常に作成されると、 コマンドは統合 ARN、ステータス、設定パラメータを含む統合の詳細を返します。出力例:

{ "SourceArn": "arn:aws:dms:region:account-id:endpoint:endpoint-id", "TargetArn": "arn:aws:redshift:region:account-id:namespace:namespace-id", "IntegrationName": "mysql-onprem-integration", "IntegrationArn": "arn:aws:glue:region:account-id:integration:integration-id", "KmsKeyId": "arn:aws:kms:region:account-id:key/key-id", "AdditionalEncryptionContext": { "context-key": "context-value" }, "Status": "CREATED", "CreateTime": 1763234086.001, "DataFilter": "include: mysql.*", "IntegrationConfig": { "SourceProperties": { "SubnetIds": "subnet-id1,subnet-id2,subnet-id3", "VpcSecurityGroupIds": "sg-id" } } }

セキュリティのベストプラクティス

ゼロ ETL 統合を設定するときは、次のセキュリティのベストプラクティスに従ってください。

  • 最小特権アクセスを使用する – 統合の作成と管理に必要な最小限のアクセス許可のみを付与します。可能な場合は、リソースレベルのアクセス許可の使用を検討してください。

  • 暗号化を有効にする – 常にカスタマーマネージドAWS KMSキーを使用して統合データを暗号化します。セキュリティを強化するために暗号化コンテキストを指定します。

  • 認証情報を定期的にローテーションする – IAM ユーザーアクセスキーを使用する場合は、定期的にローテーションします。代わりに一時的な認証情報で IAM ロールを使用することを検討してください。

  • アクセスのモニタリング – 統合の作成と管理に関連する API コールをモニタリングAWS CloudTrailするために使用します。

  • ネットワークアクセスの制限 – 必要なリソースのみにネットワークアクセスを制限するように VPC セキュリティグループを設定します。

  • リソースポリシーを使用する – Amazon Redshift リソースポリシーを実装して、データウェアハウスとの統合を作成できるソースを制御します。

  • タグリソース – 統合および関連リソースにタグを適用して、組織とコストの追跡を改善します。