

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 用于客户端连接的自定义域名
<a name="connecting-connection-CNAME"></a>

 您可以为 Amazon Redshift 集群和 Amazon Redshift Serverless 工作组创建自定义域名，也称为自定义 URL。这是易于阅读的 DNS 记录，可将 SQL 客户端连接路由到您的端点。您可以随时为现有集群或工作组进行配置。自定义域名有几个好处：
+ 自定义域名是一个比默认 URL 更简单的字符串，后者通常包括集群名称或工作组名称和区域。它更易于记起和使用。
+ 例如，在进行故障转移时，您可以将流量快速路由到新集群或工作组。这使得客户端在重新连接时不必更改配置。连接可以集中重新路由，将中断降至最低。
+ 您可以避免在连接 URL 中分享私有信息，例如服务器名称。您可以将其隐藏在自定义 URL 中。

使用 CNAME 设置自定义域名时，Amazon Redshift 不会收取任何额外费用。如果您创建一个新域名，您的 DNS 提供商可能会向您收取域名的费用，但这笔费用通常很小。

# 注册域名
<a name="connecting-connection-CNAME-certificates"></a>

 设置自定义域名由多项任务组成：包括向 DNS 提供商注册域名和创建证书。执行这些工作后，您可以在 Amazon Redshift 控制台中或 Amazon Redshift Serverless 控制台中配置自定义域名，或者使用 AWS CLI 命令对其进行配置。

您必须有一个已注册的互联网域名，才能在 Amazon Redshift 中配置自定义域名。您可以使用 Route 53 或第三方域注册提供商来注册互联网域。您在 Amazon Redshift 控制台之外完成这些任务。要想完成创建自定义域的剩余过程，有一个已注册的域是先决条件。

**注意**  
如果您使用预置集群，在执行步骤以配置自定义域名之前，必须启用重新定位。有关更多信息，请参阅 [重新定位集群](managing-cluster-recovery.md)。Amazon Redshift Serverless 不需要此步骤。

自定义域名通常包括根域和子域，例如 `mycluster.example.com`。要对其进行配置，请执行以下步骤：

**为您的自定义域名创建 DNS CNAME 条目**

1. 注册一个根域，例如，`example.com`。您可以选择使用现有域。您的自定义名称可能会受到对特定字符的限制或其他命名验证的限制。有关向 Route 53 注册域的更多信息，请参阅 [Registering a new domain](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html)。

1. 添加一个 DNS CNAME 记录，将您的自定义域名指向集群或工作组的 Redshift 端点。您可以在 Redshift 控制台或 Amazon Redshift Serverless 控制台中，在集群或工作组的属性中查找端点。在**一般信息**下，复制集群或工作组属性中提供的 **JDBC URL**。URL 类似于以下内容：
   + 对于Amazon Redshift 集群：`redshift-cluster-sample.abc123456.us-east-1.redshift.amazonaws.com`
   + 对于 Amazon Redshift Serverless 工作组：`endpoint-name.012345678901.us-east-1-dev.redshift-serverless-dev.amazonaws.com`

   如果 URL 有 JDBC 前缀，请将其删除。
**注意**  
DNS 记录视可用性而定，因为每个名称都必须是唯一的，并且可以在您的组织内使用。

**限制**

在为自定义域创建 CNAME 记录时，需要注意几个限制：
+ 对于同一个预置集群或 Amazon Redshift Serverless 工作组，不支持创建多个自定义域名。您只能关联一个 CNAME 记录。
+ 不支持将 CNAME 记录与多个集群或工作组关联。每个 Redshift 资源的 CNAME 必须唯一。

注册域并创建 CNAME 记录后，选择新的或现有的证书。您可以使用 AWS Certificate Manager 执行此步骤：

我们建议您创建符合托管续订资格的 [DNS 经验证证书](https://docs.aws.amazon.com/acm/latest/userguide/dns-renewal-validation.html)，这些证书在 AWS Certificate Manager 中提供。托管续订意味着 ACM 将自动续订您的证书，或者在接近过期时向您发送电子邮件通知。有关托管证书续订的更多信息，请参阅[ACM 证书的托管续订](https://docs.aws.amazon.com/acm/latest/userguide/managed-renewal.html)。

# 为域名请求证书。
<a name="connecting-connection-CNAME-security"></a>

Amazon Redshift 或 Amazon Redshift Serverless 要求自定义端点具有经验证的安全套接字层 (SSL) 证书，以保持通信安全和验证域名的所有权。您可以将您的 AWS Certificate Manager 账户与 AWS KMS key 结合使用，以进行安全的证书管理。安全验证包括完整主机名验证（*sslmode=verify-full*）。

只有在您选择 DNS 验证而不是电子邮件验证时，证书续订才会由 Amazon Redshift 托管。如果您使用电子邮件验证，则可以使用证书，但您必须在证书到期之前自行进行续订。我们建议您为证书选择 DNS 验证。您可以在 AWS Certificate Manager 中监控导入证书的到期日期。

**为域名请求来自 ACM 的证书**

1. 登录到 AWS 管理控制台 并通过 [https://console.aws.amazon.com/acm/](https://console.aws.amazon.com/acm/) 打开 ACM 控制台。

1. 选择**请求证书**。

1. 在**域名**字段中，输入您的自定义域名。
**注意**  
除了证书域之外，您还可以指定许多前缀，以便将单个证书用于多个自定义域记录。举例来说，您可以将其他记录（例如 `one.example.com`、`two.example.com`）或通配符 DNS 记录（例如 `*.example.com`）与同一个证书一起使用。

1. 选择**审核并请求**。

1. 选择**确认并请求**。

1. 如果请求有效，Internet 域中注册的拥有者必须同意请求，然后 ACM 才能颁发证书。完成这些步骤后，请确保在 ACM 控制台中，状态显示为**已颁发**。

# 配置自定义域
<a name="connecting-connection-CNAME-create-custom-domain"></a>

您可以使用 Amazon Redshift 或 Amazon Redshift Serverless 控制台创建自定义域 URL。如果您尚未进行配置，则**自定义域名**属性会在**一般信息**下显示为短划线（**–**）。创建 CNAME 记录和证书后，您可以关联集群或工作组的自定义域名。

创建自定义域关联需要以下 IAM 权限：
+ `redshift:CreateCustomDomainAssociation` – 您可以通过添加特定集群的 ARN 来限制对该集群的权限。
+ `redshiftServerless:CreateCustomDomainAssociation` – 您可以通过添加特定工作组的 ARN 来限制对该工作组的权限。
+ `acm:DescribeCertificate`

作为最佳实践，我们建议将权限策略附加到 IAM 角色，然后根据需要将其分配给用户和组。有关更多信息，请参阅 [Amazon Redshift 中的 Identity and Access Management](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)。

您可以通过执行以下步骤来分配自定义域名。

1. 在 Redshift 控制台中选择集群，或者在 Amazon Redshift Serverless 控制台中选择工作组，然后在**操作**菜单下选择**创建自定义域名**。此时将显示对话框。

1. 输入自定义域名。

1. 为 **ACM 证书**选择来自 AWS Certificate Manager 的 ARN。确认您所做的更改。根据您创建证书的步骤中的指导，我们建议您通过 AWS Certificate Manager，选择符合托管续订资格的 DNS 经验证证书 。

1. 在集群属性中，验证**自定义域名**和**自定义域证书 ARN** 中填充了您的条目，并列出了**自定义域证书的到期日期**。

配置自定义域后，仅可为新的自定义域使用 `sslmode=verify-full`。它不适用于默认端点。但您仍然可以使用其他 ssl 模式（例如 `sslmode=verify-ca`）连接到默认端点。

**注意**  
提醒一下，[集群重新定位](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-recovery.html)不是配置其它 Redshift 联网特征的先决条件。您无需将其开启即可启用以下功能：  
**从跨账户或跨区域 VPC 连接到 Redshift** – 您可以从一个 AWS Virtual Private Cloud (VPC) 连接到另一个包含 Redshift 数据库的虚拟私有云 (VPC)。这简化了管理，例如，对于来自不同账户或 VPC 的客户端访问，无需对连接到数据库的身份提供本地 VPC 访问权限。有关更多信息，请参阅[从其他账户或区域中的 Redshift VPC 端点连接到 Amazon Redshift Serverless](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-connecting.html#serverless-cross-vpc)。
**设置自定义域名** – 您可以创建自定义域名（如本主题中所述），以使端点名称更加相关和简单。

# 连接到 Amazon Redshift 预置集群或 Amazon Redshift Serverless 工作组
<a name="connecting-connection-CNAME-client"></a>

要使用自定义域名进行连接，预置集群需要以下 IAM 权限：`redshift:DescribeCustomDomainAssociations`。对于 Amazon Redshift Serverless，您不必添加权限。

作为最佳实践，我们建议将权限策略附加到 IAM 角色，然后根据需要将其分配给用户和组。有关更多信息，请参阅 [Amazon Redshift 中的 Identity and Access Management](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)。

在控制台中完成创建 CNAME 并将其分配给集群或工作组的步骤后，您可以在 SQL 客户端的连接属性中提供自定义 URL。请注意，在创建 CNAME 记录后，DNS 传播可能会立即导致延迟。

1. 打开 SQL 客户端。例如，您可以使用 SQL/Workbench J。打开连接的属性，然后为连接字符串添加自定义域名。例如 `jdbc:redshift://mycluster.example.com:5439/dev?sslmode=verify-full`。在此示例中，`dev` 指定默认数据库。

1. 为您的数据库用户添加**用户名**和**密码**。

1. 测试连接。根据授予数据库用户的权限或授予所分配的 Amazon Redshift 数据库角色的权限，您查询特定表等数据库资源的能力可能会有所不同。

   请注意，如果您的集群或工作组位于 VPC 中，则可能需要将集群或工作组设置为可公开访问才能连接到其上。您可以在网络属性中更改此设置。

**注意**  
JDBC、ODBC 和 Python 驱动程序支持与自定义域名的连接。

# 重命名分配了自定义域的集群
<a name="connecting-connection-CNAME-rename-cluster"></a>

**注意**  
这一系列步骤不适用于 Amazon Redshift Serverless 工作组。您无法更改工作组名称。

要重命名具有自定义域名的集群，需要 `acm:DescribeCertificate` IAM 权限。

1. 请转至 Amazon Redshift 控制台并选择要更改其名称的集群。选择**编辑**，编辑集群属性。

1. 编辑**集群标识符**。您也可以更改集群的其他属性。然后选择 **Save changes （保存更改)**。

1. 重命名集群后，你必须更新 DNS 记录，将自定义域的 CNAME 条目更改为指向更新后的 Amazon Redshift 端点。

# 描述自定义域关联
<a name="connecting-connection-CNAME-describe-api"></a>

使用此部分中的命令，获取与特定预置集群或 Amazon Redshift Serverless 工作组关联的自定义域名列表。

您需要以下权限：
+ 对于预置集群：`redshift:DescribeCustomDomainAssociations`
+ 对于 Amazon Redshift Serverless 工作组：`redshiftServerless:ListCnameAssociations`

作为最佳实践，我们建议将权限策略附加到 IAM 角色，然后根据需要将其分配给用户和组。有关更多信息，请参阅 [Amazon Redshift 中的 Identity and Access Management](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)。

以下显示的示例命令用于列出给定 Amazon Redshift 集群的自定义域名：

```
aws redshift describe-custom-domain-associations ––custom-domain-name customdomainname
```

启用自定义域名后，您可以运行此命令来确定与集群关联的自定义域名。有关用于描述自定义域关联的 CLI 命令的更多信息，请参阅 [describe-custom-domain-associations](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/redshift/describe-custom-domain-associations.html)。

与此类似，以下显示的示例命令用于列出给定 Amazon Redshift Serverless 工作组的自定义域名：有一些不同的方法可以做到这一点。您可以只提供自定义域名：

```
aws redshift-serverless list-custom-domain-associations ––custom-domain-name customdomainname
```

您也可以通过只提供证书 ARN 来获取关联：

```
aws redshift-serverless list-custom-domain-associations ––custom-domain-certificate-arn certificatearn
```

启用自定义域名后，您可以运行这些命令来确定与工作组关联的自定义域名。您也可以运行命令来获取自定义域关联的属性。为此，您必须将自定义域名和工作组名称作为参数提供。该命令返回证书 ARN、工作组名称和自定义域的证书到期时间：

```
aws redshift-serverless get-custom-domain-association ––workgroup-name workgroupname ––custom-domain-name customdomainname
```

有关可用于 Amazon Redshift Serverless 的 CLI 参考命令更多信息，请参阅 [redshift-serverless](https://docs.aws.amazon.com/cli/latest/reference/redshift-serverless/)。

# 将自定义域与不同的证书关联
<a name="connecting-connection-CNAME-change-api"></a>

更改自定义域名的证书关联需要以下 IAM 权限：
+ `redshift:ModifyCustomDomainAssociation`
+ `acm:DescribeCertificate`

作为最佳实践，我们建议将权限策略附加到 IAM 角色，然后根据需要将其分配给用户和组。有关更多信息，请参阅 [Amazon Redshift 中的 Identity and Access Management](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)。

使用以下命令将自定义域关联到不同的证书。`––custom-domain-name` 和 `custom-domain-certificate-arn` 参数为必需。新证书的 ARN 必须与现有 ARN 不同。

```
aws redshift modify-custom-domain-association ––cluster-id redshiftcluster ––custom-domain-name customdomainname ––custom-domain-certificate-arn certificatearn
```

以下示例显示了如何为 Amazon Redshift Serverless 将自定义域关联到不同的证书。

```
aws redshift-serverless modify-custom-domain-association ––workgroup-name redshiftworkgroup ––custom-domain-name customdomainname ––custom-domain-certificate-arn certificatearn
```

最多会有 30 秒的延迟，然后您才能连接到集群。部分延迟发生在 Amazon Redshift 集群更新其属性时，而在 DNS 更新时也会造成一些额外的延迟。有关 API 和每个属性设置的更多信息，请参阅 [modifyCustomDomainAssociation](https://docs.aws.amazon.com/redshift/latest/APIReference/API_ModifyCustomDomainAssociation.html)。

# 删除自定义域
<a name="connecting-connection-CNAME-delete-api"></a>

要删除自定义域名，用户必须具有执行以下操作的权限。
+ 对于预置集群：`redshift:DeleteCustomDomainAssociation`
+ 对于 Amazon Redshift Serverless 工作组：`redshiftServerless:DeleteCustomDomainAssociation`

**在控制台上**

您可以选择**操作**按钮并选择**删除自定义域名**，从而删除自定义域名。完成此操作后，您仍然可以更新工具以使用控制台中列出的端点，从而连接到服务器。

**使用 CLI 命令**

以下示例显示了如何删除自定义域名。删除操作要求您提供集群的现有自定义域名。

```
aws redshift delete-custom-domain-association ––cluster-id redshiftcluster ––custom-domain-name customdomainname
```

以下示例显示了如何删除 Amazon Redshift Serverless 工作组的自定义域名。自定义域名是必填参数。

```
aws redshift-serverless delete-custom-domain-association ––workgroup-name workgroupname ––custom-domain-name customdomainname
```

有关更多信息，请参阅 [DeleteCustomDomainAssociation](https://docs.aws.amazon.com/redshift/latest/APIReference/API_DeleteCustomDomainAssociation.html)。