Oracle Database@AWS と Amazon Redshift の統合の設定 - Oracle Database@AWS

Oracle Database@AWS と Amazon Redshift の統合の設定

Oracle データベースと Amazon Redshift 間のゼロ ETL 統合を設定するには、次の手順を実行します。

  1. ODB ネットワークでゼロ ETL を有効にします。

  2. Oracle データベースの前提条件を設定します。

  3. AWS Secrets Manager と AWS Key Management Service をセットアップします。

  4. IAM 許可を設定します。

  5. Amazon Redshift リソースポリシーを設定します。

  6. ゼロ ETL 統合を作成します。

  7. Amazon Redshift にターゲットデータベースを作成します。

ステップ 1: ODB ネットワークのゼロ ETL を有効にする

ソース VM クラスターに関連付けられた ODB ネットワークのゼロ ETL 統合を有効にできます。デフォルトでは、この統合は無効になっています。

ゼロ ETL 統合を有効にするには
  1. https://console.aws.amazon.com/odb/ で Oracle Database@AWS コンソールを開きます。

  2. ナビゲーションペインで [ODB ネットワーク] を選択します。

  3. ゼロ ETL 統合を有効にする ODB ネットワークを選択します。

  4. [Modify] (変更) を選択します。

  5. [ゼロ ETL] を選択します。

  6. [続行] を選択してから、[修正] を選択します。

ゼロ ETL 統合を有効にするには、--zero-etl-access パラメータを指定して update-odb-network コマンドを使用します。

aws odb update-odb-network \ --odb-network-id odb-network-id \ --zero-etl-access ENABLED

ソース VM クラスターに関連付けられた ODB ネットワークのゼロ ETL 統合を有効にするには、update-odb-network コマンドを使用します。このコマンドは、ゼロ ETL 統合に必要なネットワークインフラストラクチャを設定します。

aws odb update-odb-network \ --odb-network-id your-odb-network-id \ --zero-etl-access ENABLED

ステップ 2: Oracle データベースの設定

前提条件」の説明に従って Oracle データベース設定を完了します。

  • レプリケーションユーザーを作成し、必要なアクセス許可を付与します。

  • アーカイブ REDO ログを有効にします。

  • SSL を設定します (Oracle Exadata のみ)。

  • 該当する場合、ASM ユーザーを設定します (Oracle Exadata のみ)。

ステップ 3: AWS Secrets Manager と AWS Key Management Service をセットアップする

カスタマーマネージドキー (CMK) を作成し、データベース認証情報を保存します。

  1. create-key コマンドを使用して AWS Key Management Service で CMK を作成します。

    aws kms create-key \ --description "ODB Zero-ETL Integration Key" \ --key-usage ENCRYPT_DECRYPT \ --key-spec SYMMETRIC_DEFAULT
  2. AWS Secrets Manager にデータベース認証情報を保存します。

    aws secretsmanager create-secret \ --name "ODBZeroETLCredentials" \ --description "Credentials for Oracle Database@AWS Zero-ETL integration" \ --kms-key-id your-cmk-key-arn \ --secret-string file://secret-content.json
  3. Oracle Database@AWS アクセスを許可するには、シークレットにリソースポリシーをアタッチします。

    aws secretsmanager put-resource-policy \ --secret-id "ODBZeroETLCredentials" \ --resource-policy file://secret-resource-policy.json

    上記のコマンドでは、secret-resource-policy.json に次の JSON が含まれています。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "zetl.odb.amazonaws.com" }, "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "*" } ] }
  4. CMK にリソースポリシーをアタッチします。暗号化されたゼロ ETL 統合をサポートするには、CMK リソースポリシーに Oracle Database@AWS サービスプリンシパルと Amazon Redshift サービスプリンシパルの両方のアクセス許可を含める必要があります。

    aws kms put-key-policy \ --key-id your-cmk-key-arn \ --policy-name default \ --policy file://cmk-resource-policy.json

    cmk-resource-policy.json には次のポリシーステートメントを含める必要があります。最初のステートメントは Oracle Database@AWS サービスアクセスを許可し、2 番目のステートメントは Amazon Redshift が暗号化されたデータオペレーションの KMS キーに許可を作成できるようにします。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "Allow ODB service access", "Effect": "Allow", "Principal": { "Service": "zetl.odb.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:CreateGrant" ], "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" ] } } } ] }

ステップ 4: IAM のアクセス許可を設定する

ゼロ ETL 統合オペレーションを許可する IAM ポリシーを作成してアタッチします。

aws iam create-policy \ --policy-name "ODBZeroETLIntegrationPolicy" \ --policy-document file://odb-zetl-iam-policy.json aws iam attach-user-policy \ --user-name your-iam-username \ --policy-arn policy-arn

次のポリシーは必要なアクセス許可を付与します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "ODBGlueIntegrationAccess", "Effect": "Allow", "Action": [ "glue:CreateIntegration", "glue:ModifyIntegration", "glue:DeleteIntegration", "glue:DescribeIntegrations", "glue:DescribeInboundIntegrations" ], "Resource": "*" }, { "Sid": "ODBZetlOperations", "Effect": "Allow", "Action": "odb:CreateOutboundIntegration", "Resource": "*" }, { "Sid": "ODBRedshiftFullAccess", "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": "ODBRedshiftDataAPI", "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": "ODBKMSAccess", "Effect": "Allow", "Action": [ "kms:CreateKey", "kms:DescribeKey", "kms:Encrypt", "kms:Decrypt", "kms:GenerateDataKey", "kms:ListKeys", "kms:CreateAlias", "kms:ListAliases" ], "Resource": "*" }, { "Sid": "ODBSecretsManagerAccess", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:CreateSecret", "secretsmanager:UpdateSecret", "secretsmanager:DeleteSecret", "secretsmanager:DescribeSecret", "secretsmanager:ListSecrets", "secretsmanager:GetResourcePolicy", "secretsmanager:PutResourcePolicy", "secretsmanager:ValidateResourcePolicy" ], "Resource": "*" } ] }

ステップ 5: Amazon Redshift リソースポリシーを設定する

Amazon Redshift クラスターにリソースポリシーを設定して、インバウンド統合を承認します。

aws redshift put-resource-policy \ --no-verify-ssl \ --resource-arn "your-redshift-cluster-arn" \ --policy '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": [ "redshift:AuthorizeInboundIntegration" ], "Condition": { "StringEquals": { "aws:SourceArn": "your-vm-cluster-arn" } } }, { "Effect": "Allow", "Principal": { "AWS": "your-account-id" }, "Action": [ "redshift:CreateInboundIntegration" ] } ] }' \ --region us-west-2
ヒント

または、AWS コンソールで [私のために修正] オプションを使用することもできます。このオプションを使用すると、手動で設定する必要なく、必要な Amazon Redshift ポリシーが自動的に設定されます。

ステップ 6: AWS Glue を使用してゼロ ETL 統合を作成する

AWS Glue create-integration コマンドを使用してゼロ ETL 統合を作成します。このコマンドでは、ソース VM クラスターとターゲット Amazon Redshift 名前空間を指定します。

次の例では、Exadata VM クラスターで実行されている pdb1 という名前の PDB との統合を作成します。ソース ARN で cloud-vm-clustercloud-autonomous-vm-cluster に置き換えることで、Autonomous VM クラスターを作成することもできます。KMS キーの指定はオプションです。キーを指定する場合、ステップ 3: AWS Secrets Manager と AWS Key Management Service をセットアップする で作成したキーとは異なる場合があります。

aws glue create-integration \ --integration-name "MyODBZeroETLIntegration" \ --source-arn "arn:aws:odb:region:account:cloud-vm-cluster/cluster-id" \ --target-arn "arn:aws:redshift:region:account:namespace/namespace-id" \ --data-filter "include: pdb1.*.*" \ --integration-config '{ "RefreshInterval": "10", "IntegrationMode": "DEFAULT", "SourcePropertiesMap": { "secret-arn": "arn:aws:secretsmanager:region:account:secret:secret-name" } }' \ --description "Zero-ETL integration for Oracle to Amazon Redshift" \ --kms-key-id "arn:aws:kms:region:account:key/key-id"

コマンドは統合 ARN を返し、ステータスを creating に設定します。describe-integrations コマンドを使用して統合ステータスをモニタリングできます。

aws glue describe-integrations \ --integration-identifier integration-id
重要

統合ごとに 1 つの PDB のみがサポートされます。データフィルターでは、include: pdb1.*.* のように単一の PDB を指定する必要があります。ソースは、統合が作成される AWS リージョンおよびアカウントと同じリージョンおよびアカウントにある必要があります。

ステップ 7: Amazon Redshift でターゲットデータベースを作成する

統合がアクティブになったら、Amazon Redshift クラスターにターゲットデータベースを作成します。

-- Connect to your Amazon Redshift cluster psql -h your-redshift-endpoint -U username -d database -- Create database from integration CREATE DATABASE target_database_name FROM INTEGRATION 'integration-id' DATABASE "source_pdb_name";

ターゲットデータベースを作成したら、レプリケートされたデータをクエリできます。

-- List databases to verify creation \l -- Connect to the new database \c target_database_name -- List tables to see replicated data \dt

ゼロ ETL 統合を検証する

AWS Glue で統合ステータスをクエリし、Oracle の変更が Amazon Redshift にレプリケートされていることを確認することで、統合が機能していることを確認します。

ゼロ ETL 統合が正しく機能していることを確認するには
  1. 統合ステータスを確認します。

    aws glue describe-integrations \ --integration-identifier integration-id

    ステータスは ACTIVE または REPLICATING である必要があります。

  2. Oracle データベースに変更を加え、Amazon Redshift に反映されるかどうかを確認して、データのレプリケーションを検証します。

  3. Amazon CloudWatch でレプリケーションメトリクスをモニタリングします (利用可能な場合)。