

# 创建 Amazon RDS 与 Amazon SageMaker 智能湖仓的零 ETL 集成
<a name="zero-etl.creating-smlh"></a>

在创建 Amazon RDS 与 Amazon SageMaker 智能湖仓的零 ETL 集成时，您应指定源 RDS 数据库和目标 Amazon Glue 托管目录。您还可以自定义加密设置和添加标签。Amazon RDS 在源数据库与其目标之间创建集成。在集成处于活动状态后，您插入到源数据库中的任何数据都将复制到配置的目标中。

## 先决条件
<a name="zero-etl.create-prereqs-smlh"></a>

在创建与 Amazon SageMaker 智能湖仓的零 ETL 集成之前，必须创建源数据库和目标 Amazon Glue 托管目录。您还必须通过将数据库添加为授权的集成源来支持复制到目录。

有关完成其中每个步骤的说明，请参阅[开始使用 Amazon RDS 零 ETL 集成](zero-etl.setting-up.md)。

## 所需的权限
<a name="zero-etl.create-permissions-smlh"></a>

创建与 Amazon SageMaker 智能湖仓的零 ETL 集成需要具有某些 IAM 权限。至少您需要具有执行以下操作的权限：
+ 为源 RDS 数据库创建零 ETL 集成。
+ 查看和删除所有零 ETL 集成。
+ 创建到目标 Amazon Glue 托管目录的入站集成。
+ 访问 Amazon Glue 托管目录使用的 Amazon S3 存储桶。
+ 如果配置了自定义加密，则使用 Amazon KMS 密钥进行加密。
+ 将资源注册到 Lake Formation 中。
+ 将资源策略放在 Amazon Glue 托管目录上以对入站集成进行授权。

以下示例策略演示了创建和管理与 Amazon SageMaker 智能湖仓的集成所需的[最低权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。如果您的用户或角色具有更广泛的权限（例如 `AdministratorAccess` 托管式策略），则可能不需要这些确切的权限。

此外，您必须在目标 Amazon Glue 托管目录上配置资源策略以便对入站集成进行授权。使用以下 Amazon CLI 命令来应用资源策略。

### 在目标目录上对入站集成进行授权的示例 Amazon CLI 命令
<a name="zero-etl.create-sample-policy-smlh"></a>

```
aws glue put-resource-policy \
      --policy-in-json  '{
    "Version": "2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Principal": {
            "Service": "glue.amazonaws.com"
        },
        "Action": [
            "glue:AuthorizeInboundIntegration"
        ],
        "Resource": ["arn:aws:glue:region:account_id:catalog/catalog_name"],
        "Condition": {
            "StringEquals": {
                "aws:SourceArn": "arn:aws:rds:region:account_id:db:source_name"
            }
        }
    },
    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "account_id"
        },
        "Action": ["glue:CreateInboundIntegration"],
        "Resource": ["arn:aws:glue:region:account_id:catalog/catalog_name"]
    }
    ]
}' \
      --region region
```

**注意**  
Glue 目录 Amazon 资源名称（ARN）的格式如下：  
Glue 目录：`arn:aws:glue:{region}:{account-id}:catalog/catalog-name`

### 选择不同账户中的目标 Amazon Glue 托管目录
<a name="zero-etl.create-permissions-cross-account-smlh"></a>

如果您计划指定位于另一个 Amazon Web Services 账户中的目标 Amazon Glue 托管目录，则必须创建一个角色，以支持当前账户中的用户访问目标账户中的资源。有关更多信息，请参阅[在您拥有的其他 Amazon Web Services 账户中向 IAM 用户提供访问权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)。

该角色必须具有以下权限，这些权限支持用户查看目标账户中可用的 Amazon Glue 目录。

#### 必需的权限和信任策略
<a name="zero-etl.cross-account-sample-policy-smlh"></a>

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "glue:GetCatalog"
         ],
         "Resource":[
            "*"
         ]
      }
   ]
}
```

------

该角色必须具有以下信任策略，该策略指定目标账户 ID。

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

****  

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

------

有关创建角色的说明，请参阅[使用自定义信任策略创建角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

## 创建与 Amazon SageMaker 智能湖仓的零 ETL 集成
<a name="zero-etl.create-smlh"></a>

您可以使用 Amazon Web Services 管理控制台、Amazon CLI 或 RDS API 创建与 Amazon SageMaker 智能湖仓的零 ETL 集成。

**重要**  
与 Amazon SageMaker 智能湖仓的零 ETL 集成不支持刷新或重新同步操作。如果在创建集成后遇到与集成相关的问题，必须删除此集成并创建一个新集成。

默认情况下，RDS for MySQL 会立即清除二进制日志文件。由于零 ETL 集成依赖二进制日志将数据从源复制到目标，因此源数据库的保留期必须至少为一小时。创建集成后，Amazon RDS 会立即检查所选源数据库的二进制日志文件保留期。如果当前值为 0 小时，则 Amazon RDS 会自动将其更改为 1 小时。否则，该值将保持不变。

### RDS 控制台
<a name="zero-etl.create-console-smlh"></a>

**创建与 Amazon SageMaker 智能湖仓的零 ETL 集成**

1. 登录 Amazon Web Services 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 在左侧导航窗格中，选择**零 ETL 集成**。

1. 选择**创建零 ETL 集成**。

1. 在**集成标识符**中，输入集成的名称。该名称可包含最多 63 个字母数字字符，并且可以包含连字符。

1. 选择**下一步**。

1. 对于**源**，选择数据将源自其中的 RDS 数据库。
**注意**  
如果数据库参数配置不正确，RDS 会通知您。如果您收到此消息，可以选择**为我修复**，也可以手动配置它们。有关手动修复它们的说明，请参阅[步骤 1：创建自定义数据库参数组](zero-etl.setting-up.md#zero-etl.parameters)。  
修改数据库参数需要重启。在创建集成之前，必须完成重启，并且必须成功地将新的参数值应用于数据库。

1. 成功配置源数据库后，选择**下一步**。

1. 对于**目标**，执行以下操作：

   1. （可选）要为 Amazon SageMaker 智能湖仓目标使用不同的 Amazon Web Services 账户，请选择**指定不同的账户**。然后，输入有权显示 Amazon Glue 目录的 IAM 角色的 ARN。有关创建 IAM 角色的说明，请参阅[选择不同账户中的目标 Amazon Glue 托管目录](#zero-etl.create-permissions-cross-account-smlh)。

   1. 对于 **Amazon Glue 目录**，选择从源数据库中复制的数据的目标。可以选择使用现有 Amazon Glue 托管目录作为目标。

   1. 目标 IAM 角色需要对目标目录的描述权限，并且必须具有以下权限：

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": "glue:GetCatalog",
                  "Resource": [
                      "arn:aws:glue:us-east-1:111122223333:catalog/*",
                      "arn:aws:glue:us-east-1:111122223333:catalog"
                  ]
              }
          ]
      }
      ```

------

      目标 IAM 角色必须拥有以下信任关系：

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "glue.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. 您必须使用在[步骤 3b：为 Amazon SageMaker 智能湖仓零 ETL 集成创建 Amazon Glue 目录](zero-etl.setting-up.md#zero-etl-setting-up.sagemaker)中创建的 Lake Formation 管理员角色，来为目标 IAM 角色授予对目标 Amazon Glue 托管目录的描述权限。
**注意**  
如果指定 Amazon Glue 托管目录的资源策略或配置设置未得以正确配置，RDS 会通知您。如果您收到此消息，可以选择**为我修复**，也可以手动配置它们。  
如果您选择的源和目标位于不同的 Amazon Web Services 账户，则 Amazon RDS 无法为您修复这些设置。您必须导航到另一个账户，然后在 SageMaker Unified Studio 中手动修复这些设置。

1. 在正确配置了目标 Amazon Glue 托管目录后，选择**下一步**。

1. （可选）对于**标签**，向集成添加一个或多个标签。有关更多信息，请参阅 [为 Amazon RDS 资源添加标签](USER_Tagging.md)。

1. 对于**加密**，请指定您希望如何加密集成。默认情况下，RDS 会加密所有与 Amazon 拥有的密钥 的集成。要改为选择客户自主管理型密钥，请启用**自定义加密设置**并选择用于加密的 KMS 密钥。有关更多信息，请参阅 [加密 Amazon RDS 资源](Overview.Encryption.md)。

   （可选）添加加密上下文。有关更多信息，请参阅 *Amazon Key Management Service 开发人员指南*中的[加密内容](https://docs.amazonaws.cn/kms/latest/developerguide/concepts.html#encrypt_context)。
**注意**  
除了您添加的任何加密上下文对外，Amazon RDS 还会添加以下加密上下文对：  
`aws:glue:integration:arn` - `IntegrationArn`
`aws:servicename:id` - `glue`
这会将您可以添加的加密上下文对总数从 8 减少到 6，并增加授予约束条件的总字符限制。有关更多信息，请参阅《Amazon Key Management Service 开发人员指南》**中的 [Using grant constraints](https://docs.amazonaws.cn/kms/latest/developerguide/create-grant-overview.html#grant-constraints)。

1. 选择**下一步**。

1. 查看您的集成设置并选择**创建零 ETL 集成**。

   如果创建失败，请参阅[Amazon RDS 零 ETL 集成故障排除](zero-etl.troubleshooting.md)以了解故障排除步骤。

集成在创建时状态为 `Creating`，而目标 Amazon SageMaker 智能湖仓的状态为 `Modifying`。在此期间，您无法查询目录或对其进行任何配置更改。

成功创建集成后，集成和目标 Amazon SageMaker 智能湖仓的状态都更改为 `Active`。

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

要使用 Amazon CLI 来准备要进行零 ETL 集成的目标 Amazon Glue 托管目录，必须首先使用带有以下选项的 [create-integration-resource-property](https://docs.amazonaws.cn/cli/latest/reference/rds/create-integration.html) 命令：
+ `--resource-arn`：指定将成为集成目标的 Amazon Glue 托管目录的 ARN。
+ `--target-processing-properties`：指定 IAM 角色的 ARN 以访问目标 Amazon Glue 托管目录 

```
aws glue create-integration-resource-property --region us-east-1
 --resource-arn arn:aws:glue:region:account_id:catalog/catalog_name \
 --target-processing-properties '{"RoleArn" : "arn:aws:iam::account_id:role/TargetIamRole"}'
```

要使用 Amazon CLI 创建与 Amazon SageMaker 智能湖仓的零 ETL 集成，请使用带有以下选项的 [create-integration](https://docs.amazonaws.cn/cli/latest/reference/rds/create-integration.html) 命令：
+ `--integration-name` – 指定集成的名称。
+ `--source-arn` – 指定将作为集成源的 RDS 数据库的 ARN。
+ `--target-arn`：指定将成为集成目标的 Amazon Glue 托管目录的 ARN。

**Example**  
对于 Linux、macOS 或 Unix：  

```
aws rds create-integration \
    --integration-name my-sagemaker-integration \
    --source-arn arn:aws:rds:{region}:{account-id}:cluster:my-db \
    --target-arn arn:aws:glue:{region}:{account-id}:catalog/catalog-name
```
对于：Windows  

```
aws rds create-integration ^
    --integration-name my-sagemaker-integration ^
    --source-arn arn:aws:rds:{region}:{account-id}:cluster:my-db ^
    --target-arn arn:aws:glue:{region}:{account-id}:catalog/catalog-name
```

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

要使用 Amazon RDS API 创建与 Amazon SageMaker 的零 ETL 集成，请结合使用 [https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_CreateIntegration.html](https://docs.amazonaws.cn/AmazonRDS/latest/APIReference/API_CreateIntegration.html) 操作和以下参数：

**注意**  
目录名称限制为 19 个字符。如果要将 IntegrationName 参数用作目录名称，请确保它符合此要求。
+ `IntegrationName` – 指定集成的名称。
+ `SourceArn` – 指定将作为集成源的 RDS 数据库的 ARN。
+ `TargetArn`：指定将成为集成目标的 Amazon Glue 托管目录的 ARN。

## 使用客户自主管理型密钥加密集成
<a name="zero-etl.create-encrypt-smlh"></a>

如果您在创建与 Amazon SageMaker 的集成时指定自定义 KMS 密钥而不是 Amazon 拥有的密钥，则密钥策略必须为 SageMaker Unified Studio 服务主体提供对 `CreateGrant` 操作的访问权限。此外，它必须允许当前用户执行 `DescribeKey` 和 `CreateGrant` 操作。

以下示例策略演示了如何提供密钥策略中所需的权限。它包括用于进一步缩小权限范围的上下文键。

### 示例密钥策略
<a name="zero-etl.kms-sample-policy"></a>

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "Key policy",
    "Statement": [
        {
            "Sid": "EnablesIAMUserPermissions",
            "Effect": "Allow",
            "Principal": {
            "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "GlueServicePrincipalAddGrant",
            "Effect": "Allow",
            "Principal": {
                "Service": "glue.amazonaws.com"
            },
            "Action": "kms:CreateGrant",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:{context-key}":"{context-value}"
                },
                "ForAllValues:StringEquals": {
                    "kms:GrantOperations": [
                        "Decrypt",
                        "GenerateDataKey",
                        "CreateGrant"
                    ]
                }
            }
        },
        {
            "Sid": "AllowsCurrentUserRoleAddGrantKMSKey",
            "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": "AllowsCurrentUserRoleRetrieveKMSKeyInformation",
            "Effect": "Allow",
            "Principal": {
            "AWS": "arn:aws:iam::111122223333:role/{role-name}"
            },
            "Action": "kms:DescribeKey",
            "Resource": "*"
        }
    ]
}
```

------

有关更多信息，请参阅《Amazon Key Management Service 开发人员指南》**中的[创建密钥策略](https://docs.amazonaws.cn/kms/latest/developerguide/key-policy-overview.html)。

## 后续步骤
<a name="zero-etl.create-next-smlh"></a>

在成功创建与 Amazon SageMaker 的零 ETL 集成后，您可以开始向源 RDS 数据库添加数据，并在 Amazon SageMaker 智能湖仓中查询这些数据。数据将自动复制，并可供分析和机器学习工作负载使用。