

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

# AWS セルフマネージド型データベースソースのゼロ ETL 統合
<a name="zero-etl"></a>

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 統合](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.html)」を参照してください。 **

ゼロ ETL 統合には、次のような利点があります。
+  **リアルタイムデータレプリケーション** – Oracle データベースから Amazon Redshift への継続的なデータ同期を最小限のレイテンシーで実行します。
+  **複雑な ETL パイプラインの排除** – カスタムデータ統合ソリューションを構築および維持する必要はありません。
+  **運用上のオーバーヘッドの削減** – AWS APIs による自動セットアップと管理。
+  **データ統合アーキテクチャの簡素化** – セルフマネージド型データベースと AWS 分析サービス間のシームレスな統合。
+  **セキュリティの強化** – 組み込みの暗号化と IAM アクセスコントロール。

## セルフマネージド型データベースソースでのゼロ ETL 統合の仕組み
<a name="zero-etl.how-it-works"></a>

以前にセルフマネージド型データベース用に作成した既存の AWS DMS エンドポイントを使用することも、新しいエンドポイントを作成することもできます。
+  AWS Glue コンソールまたは [CLI](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-integrations.html) を使用して、 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 統合イベント通知](https://docs.aws.amazon.com/redshift/latest/mgmt/integration-event-notifications.html)」を参照してください。サブスクリプションを作成する最も簡単な方法は、Amazon Simple Notification Service コンソールを使用することです。Amazon SNS トピックの作成とサブスクリプションについては、「**Amazon Simple Notification Service デベロッパーガイド」の「[Amazon SNS の開始方法](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html)」を参照してください。

## 統合を作成する前のソースデータベース設定
<a name="zero-etl.source-database-configuration"></a>

ゼロ ETL 統合を設定する前に、データベースエンジンの要件に従ってソースデータベースを適切に設定する必要があります。各エンジンには、特定の設定要件と制限があります。

SQL Server
+ 設定要件については、[「Microsoft SQL Server データベースをソースとして使用する AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html)」を参照してください。
+ 変更データキャプチャ (CDC) の要件については、[「SQL Server からの継続的なレプリケーションのためのデータ変更のキャプチャ](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.CDC.html)」を参照してください。

**注記**  
RDS SQL Server と Azure SQL Server をセルフマネージドゼロ ETL 統合のソースとして使用することはできません。

Oracle
+ 設定の要件と制限については、[「Using an Oracle database as a source for AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)」を参照してください。

MySQL
+ 設定の要件と制限については、[MySQL 互換データベースをソースとして使用する AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MySQL.html)」を参照してください。

[PostgreSQL]
+ 設定の要件と制限については、[PostgreSQL データベースを AWS DMS ソースとして使用する](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html)」を参照してください。
+ セルフマネージド PostgreSQL データベースをソースとして使用する場合、次の制限が適用されます。
  + セルフマネージド PostgreSQL ソースの場合、ソースエンドポイントの作成時に PostgreSQL エンドポイント設定`false`で を `CaptureDdls`に設定する必要があります。このパラメータを設定するには、ソースエンドポイントを作成するときに以下を使用します。

    ```
    --postgre-sql-settings '{"CaptureDdls": false}'
    ```

     CaptureDdls を false に設定しない場合、タスクが正常に開始されない可能性があります。
  + `CaptureDdls` を に設定すると`false`、レプリケーション中にソースデータベースで実行された DDL オペレーション (CREATE TABLE、ALTER TABLE、DROP TABLE など) はキャプチャされず、ターゲットにレプリケートされません。

## ゼロ ETL 統合のための IAM アクセス許可と暗号化の設定
<a name="zero-etl.iam-setup"></a>

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

### 前提条件
<a name="zero-etl.iam-setup.prerequisites"></a>

ゼロ ETL 統合を作成する前に、以下があることを確認してください。
+ 統合を作成および管理するための適切なアクセス許可を持つ IAM ユーザーまたはロール
+ セルフマネージドデータベースの AWS DMS ソースエンドポイントを設定します。詳細については、「[統合を作成する前のソースデータベース設定](#zero-etl.source-database-configuration)」を参照してください。
+ ターゲットとしての Amazon Redshift プロビジョンドクラスターまたはサーバーレス名前空間
+ VPC サブネットとセキュリティグループを含むネットワーク設定

### KMS キーを作成する
<a name="zero-etl.iam-setup.kms-key"></a>

まず、カスタマーマネージド 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
```

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

出力例:

```
{
    "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 キーポリシーの設定
<a name="zero-etl.iam-setup.kms-policy"></a>

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 の設定
<a name="zero-etl.iam-setup.user-setup"></a>

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

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

   ```
   aws iam create-user --user-name cli-user
   ```

1. ユーザーのアクセスキーを作成します。

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

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

### IAM ポリシーを作成してアタッチする
<a name="zero-etl.iam-setup.iam-policy"></a>

ゼロ ETL 統合オペレーションのアクセス許可を付与する IAM ポリシーを作成します。ポリシーには AWS Glue、、 AWS DMS Amazon 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 プロファイルの設定
<a name="zero-etl.iam-setup.cli-config"></a>

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

```
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 リソースポリシーの作成
<a name="zero-etl.iam-setup.resource-policy"></a>

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 統合の作成
<a name="zero-etl.iam-setup.example"></a>

必要なアクセス許可と暗号化キーを設定したら、 AWS Glue API を使用してゼロ 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` – 使用する AWS CLI プロファイル (前に作成した 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"
        }
    }
}
```

### セキュリティのベストプラクティス
<a name="zero-etl.iam-setup.best-practices"></a>

ゼロ ETL 統合を設定するときは、次のセキュリティのベストプラクティスに従ってください。
+  **最小特権アクセスを使用する** – 統合の作成と管理に必要な最小限のアクセス許可のみを付与します。可能な場合は、リソースレベルのアクセス許可の使用を検討してください。
+  **暗号化を有効にする** – 常にカスタマーマネージド AWS KMS キーを使用して統合データを暗号化します。セキュリティを強化するために暗号化コンテキストを指定します。
+  **認証情報を定期的にローテーション**する – IAM ユーザーアクセスキーを使用する場合は、定期的にローテーションします。代わりに一時的な認証情報で IAM ロールを使用することを検討してください。
+  **アクセスのモニタリング** – 統合の作成と管理に関連する API コールをモニタリング AWS CloudTrail するために使用します。
+  **ネットワークアクセスの制限** – 必要なリソースのみにネットワークアクセスを制限するように VPC セキュリティグループを設定します。
+  **リソースポリシーを使用する** – Amazon Redshift リソースポリシーを実装して、データウェアハウスとの統合を作成できるソースを制御します。
+  **タグリソース** – 統合および関連リソースにタグを適用して、組織とコストの追跡を改善します。