

# Amazon Redshift との Amazon RDS ゼロ ETL 統合の作成
<a name="zero-etl.creating"></a>

Amazon RDS ゼロ ETL 統合を作成するには、ソース RDS データベースとターゲットの Amazon Redshift データウェアハウスを指定します。暗号化設定をカスタマイズし、タグを追加することもできます。Amazon RDS はソースデータベースとそのターゲットの間の統合を作成します。統合がアクティブになると、ソースデータベースに挿入したデータはすべて、設定された Amazon Redshift ターゲットにレプリケートされます。

## 前提条件
<a name="zero-etl.create-prereqs"></a>

ゼロ ETL 統合を作成する前に、ソースのデータベースとターゲットの Amazon Redshift データウェアハウスを作成する必要があります。また、データベースを承認済みの統合ソースとして追加することによって、データウェアハウスへのレプリケーションを許可する必要があります。

これらの各手順の実行方法については、「[Amazon RDS ゼロ ETL 統合の開始方法](zero-etl.setting-up.md)」を参照してください。

## 必要なアクセス許可
<a name="zero-etl.create-permissions"></a>

ゼロ ETL 統合を作成するには、特定の IAM アクセス権限が必要です。少なくとも、次のアクションを実行するためのアクセス権限が必要です。
+ ソースの RDS データベースのゼロ ETL 統合を作成します。
+ すべてのゼロ ETL 統合を表示および削除します。
+ ターゲットデータウェアハウスへのインバウンド統合を作成します。

以下のサンプルポリシーは、統合の作成と管理に必要な[最小特権](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)を示しています。ユーザーまたはロールが `AdministratorAccess` マネージドポリシーなど、より広範なアクセス許可を持つ場合、これらの正確なアクセス許可を必要としない場合があります。

**注記**  
Redshift Amazon リソースネーム (ARN) の形式は次のとおりです。サーバーレス名前空間 UUID の前にコロン (`:`) ではなくフォワードスラッシュ (`(/`) を使用していることに注意してください。  
プロビジョニング済みクラスタ — `arn:aws:redshift:{region}:{account-id}:namespace:namespace-uuid`
サーバーレス - `arn:aws:redshift-serverless:{region}:{account-id}:namespace/namespace-uuid`

### Redshift ターゲットのサンプルポリシー
<a name="zero-etl.create-sample-policy"></a>

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CreateIntegration",
      "Effect": "Allow",
      "Action": [
        "rds:CreateIntegration"
      ],
      "Resource": [
        "arn:aws:rds:us-east-1:123456789012:db:source-db",
        "arn:aws:rds:us-east-1:123456789012:integration:*"
      ]
    },
    {
      "Sid": "DescribeIntegrationDetails",
      "Effect": "Allow",
      "Action": [
        "rds:DescribeIntegrations"
      ],
      "Resource": [
      "arn:aws:rds:us-east-1:123456789012:integration:*"
  ]
    },
    {
      "Sid": "ChangeIntegrationDetails",
      "Effect": "Allow",
      "Action": [
        "rds:DeleteIntegration",
        "rds:ModifyIntegration"
      ],
      "Resource": [
        "arn:aws:rds:us-east-1:123456789012:integration:*"
      ]
    },
    {
      "Sid": "AllowRedShiftIntegration",
      "Effect": "Allow",
      "Action": [
        "redshift:CreateInboundIntegration"
      ],
      "Resource": [
        "arn:aws:redshift:us-east-1:123456789012:namespace:namespace-uuid"
      ]
    }
  ]
}
```

------

### 別のアカウントでターゲットデータウェアハウスを選択する
<a name="zero-etl.create-permissions-cross-account"></a>

別の AWS アカウント にあるターゲット Amazon Redshift データウェアハウスを指定する場合は、現在のアカウントのユーザーがターゲットアカウントのリソースにアクセスするのを許可するロールを作成する必要があります。詳細については、「[所有している別の AWS アカウント の IAM ユーザーにアクセス権を付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)」を参照してください。

ロールには以下のアクセス許可が必要です。これにより、ユーザーは使用可能な Amazon Redshift のプロビジョニング済みクラスターとターゲットアカウントの Redshift Serverless 名前空間を表示できます。

#### 必要なアクセス許可ポリシー
<a name="zero-etl.cross-account-sample-policy"></a>

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "redshift:DescribeClusters",
            "redshift-serverless:ListNamespaces"
         ],
         "Resource":[
            "*"
         ]
      }
   ]
}
```

------

ロールには、ターゲットアカウント ID を指定する次の信頼ポリシーが必要です。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

ロールを作成する手順については、「[カスタム信頼ポリシーを使用したロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)」を参照してください。

## ゼロ ETL 統合の作成
<a name="zero-etl.create"></a>

AWS マネジメントコンソール、AWS CLI、または RDS API を使用してゼロ ETL 統合を作成できます。

**重要**  
ゼロ ETL 統合は、更新または再同期オペレーションをサポートしていません。作成後に統合で問題が発生した場合は、統合を削除して新しい統合を作成する必要があります。

デフォルトで、RDS for MySQL はバイナリログファイルをすぐに消去します。ゼロ ETL 統合では、ソースからターゲットへのデータレプリケーションをバイナリログに依存しているため、ソースデータベースインスタンスの保持期間は 1 時間以上である必要があります。統合を作成したら、直ちに Amazon RDS は選択したソースデータベースのバイナリログファイルの保持期間を確認します。現在の値が 0 時間の場合、Amazon RDS は自動的に 1 時間に変更します。それ以外の場合、値は変わりません。

### RDS コンソール
<a name="zero-etl.create-console"></a>

**ゼロ ETL 統合を作成するには**

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

1. 左側のナビゲーションペインから、**[ゼロ ETL 統合]** を選択します。

1. **[ゼロ ETL 統合の作成]** を選択します。

1. **[統合 ID]** に、統合の名前を入力します。名前には最大 63 文字の英数字を使用でき、ハイフンを含めることができます。
**重要**  
カタログ名の長さは 19 文字に制限されています。カタログ名として使用する場合は、統合識別子がこの要件を満たしていることを確認します。

1. [**次へ**] を選択します。

1. **[ソース]** で、データの送信元となる RDS データベースを選択します。
**注記**  
DBパラメータが正しく設定されていないと、RDS から通知されます。このメッセージを受け取った場合は、**[Fix it for me]** を選択するか、手動で設定することができます。手動で修正する手順については、「[ステップ 1: カスタム DB のパラメータグループを作成する](zero-etl.setting-up.md#zero-etl.parameters)」を参照してください。  
DB パラメータを変更するには再起動が必要です。統合を作成する前に、再起動が完了し、新しいパラメータ値のデータベースのへの適用が正常に完了している必要があります。

1. ソースデータベースが正常に設定されたら、**[次へ]** を選択します。

1. **[ターゲット]** で、以下を実行します。

   1. (オプション) Amazon Redshift  ターゲットとして別の AWS アカウント を使用するには、**[別のアカウントを指定]** を選択します。次に、データウェアハウスを表示するアクセス許可を持つ IAM ロールの ARN を入力します。IAM ロールの作成手順については、「[別のアカウントでターゲットデータウェアハウスを選択する](#zero-etl.create-permissions-cross-account)」を参照してください。

   1. **[Amazon Redshift データウェアハウス]** で、ソースデータベースからのレプリケートデータのターゲットを選択します。ターゲットとして、プロビジョニングされた Amazon Redshift *クラスター*または Redshift Serverless *名前空間*を選択できます。
**注記**  
指定したデータウェアハウスのリソースポリシーまたは大文字と小文字の区別の設定が正しく構成されていないと、RDS から通知されます。このメッセージを受け取った場合は、**[Fix it for me]** を選択するか、手動で設定することができます。手動で修正する手順については、「*Amazon Redshift 管理ガイド*」の「[データウェアハウスの大文字と小文字の区別を有効にする](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.setting-up.html#zero-etl-setting-up.case-sensitivity)」と「[データウェアハウスの認可を設定する](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.setting-up.html#zero-etl-using.redshift-iam)」を参照してください。  
*プロビジョニングされた* Redshift クラスターの大文字と小文字の区別を変更するには、再起動が必要です。インテグレーションを作成する前に、再起動を完了し、新しいパラメータ値をクラスターに正常に適用する必要があります。  
選択したソースとターゲットの AWS アカウント が異なる場合、Amazon RDS はこれらの設定を自動的に修正できません。他のアカウントに移動し、Amazon Redshift で手動で修正する必要があります。

1. ターゲットデータウェアハウスを正しく設定したら、**[次へ]** を選択します。

1. (オプション) **[タグ]** で、1 つ以上のタグを統合に追加します。詳細については、「[ Amazon RDS リソースのタグ付け](USER_Tagging.md)」を参照してください。

1. **[暗号化]** として、統合の暗号化方法を指定します。デフォルトでは、RDS はすべての統合を AWS 所有のキー で暗号化します。代わりにカスタマーマネージドキーを選択するには、**[暗号化設定のカスタマイズ]** を有効にして、暗号化に使用する KMS キーを選択します。詳細については、「[Amazon RDS リソースの暗号化](Overview.Encryption.md)」を参照してください。

   オプションで、暗号化コンテキストを追加します。詳しくは、*AWS Key Management Service デベロッパーガイド*の [Encryption context](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) を参照してください。
**注記**  
Amazon RDS は、追加する以下に加えて、次の暗号化コンテキストペアを追加します。  
`aws:redshift:integration:arn` - `IntegrationArn`
`aws:servicename:id` - `Redshift`
これにより、追加できるペアの総数が 8 から 6 に減り、許可の制約の全体的な文字数制限に影響します。詳細については、「AWS Key Management Service デベロッパーガイド**」の「[Using grant constraints](https://docs.aws.amazon.com/kms/latest/developerguide/create-grant-overview.html#grant-constraints)」を参照してください。

1. [**次へ**] を選択します。

1. 統合設定を確認し、**[ゼロ ETL 統合を作成]** を選択します。

   作成に失敗した場合は、トラブルシューティングの手順について「[ゼロ ETL 統合を作成できない](zero-etl.troubleshooting.md#zero-etl.troubleshooting.creation)」を参照してください。

統合のステータスは、作成中は `Creating` であり、ターゲットの Amazon Redshift データウェアハウスのステータスは `Modifying` です。この間、データウェアハウスをクエリしたり、設定を変更したりすることはできません。

統合が正常に作成されると、統合とターゲットの Amazon Redshift データウェアハウスの両方のステータスが `Active` に変わります。

### AWS CLI
<a name="zero-etl.create-cli"></a>

AWS CLI を使用してゼロ ETL 統合を作成するには、[create-integration](https://docs.aws.amazon.com/cli/latest/reference/rds/create-integration.html) コマンドに以下のオプションを指定して使用します。

**注記**  
カタログ名は 19 文字に制限されていることにご注意ください。カタログ名として使用する場合は、それに応じて統合名を選択します。
+ `--integration-name` — 統合の名前を指定します。
+ `--source-arn` — 統合のソースとなる RDS データベースの ARN を指定します。
+ `--target-arn` — 統合のターゲットとなる Amazon Redshift データウェアハウスの ARN を指定します。

**Example**  
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
```

### RDS API
<a name="zero-etl.create-api"></a>

Amazon RDS API を使用してゼロ ETL 統合を作成するには、以下のパラメータを指定して [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateIntegration.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateIntegration.html) オペレーションを使用します。

**注記**  
カタログ名は 19 文字に制限されています。カタログ名として使用する場合は、IntegrationName パラメータがこの要件を満たしていることを確認します。
+ `IntegrationName` — 統合の名前を指定します。
+ `SourceArn` — 統合のソースとなる RDS データベースの ARN を指定します。
+ `TargetArn` — 統合のターゲットとなる Amazon Redshift データウェアハウスの ARN を指定します。

## カスタマーマネージドキーでの統合の暗号化
<a name="zero-etl.create-encrypt"></a>

統合の作成時に AWS 所有のキー ではなくカスタム KMS キーを指定する場合、キーポリシーは Amazon Redshift サービスプリンシパルに `CreateGrant` アクションへのアクセスを提供する必要があります。さらに、現在のユーザーに `DescribeKey` アクションと `CreateGrant` アクションの実行を許可する必要があります。

次のポリシー例は、キーポリシーに必要なアクセス許可を指定する方法を示しています。アクセス許可の範囲をさらに狭めるためのコンテキストキーが含まれています。

### キーポリシーの例
<a name="zero-etl.kms-sample-policy"></a>

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "Key policy",
    "Statement": [
        {
            "Sid": "Enables IAM user permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333: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::111122223333: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::111122223333:role/{role-name}"
            },
            "Action": "kms:DescribeKey",
            "Resource": "*"
        }
    ]
}
```

------

詳細については、「*AWS Key Management Service デベロッパーガイド*」の「[キーポリシーの作成](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-overview.html)」を参照してください。

## 次のステップ
<a name="zero-etl.create-next"></a>

ゼロ ETL 統合を正常に作成した後、ターゲット Amazon Redshift クラスターまたはワークグループ内にデスティネーションデータベースを作成する必要があります。これで、ソースの RDS データベースにデータを追加し、Amazon Redshift でクエリを実行できるようになります。手順については、「[Amazon Redshift でのデスティネーションデータベースの作成](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html)」を参照してください。