与 Redshift 的 AWS DMS 端点连接不起作用
AWS DMS endpoint connection to Redshift not working
我目前正在尝试通过 DMS 设置从 RDS (MySQL) 到 Redshift 的复制。 RDS 的端点正在工作,但 Redshift 的端点没有。这是我的设置:
VPC
RDS、DMS 和 Redshift 运行 在同一 VPC 中并共享相同的子网。
角色
我根据 AWS 文档实现了 DMS 所需的角色(dms-vpc-role
、dms-cloudwatch-logs-role
)和 Redshift 的特定角色(dms-access-for-endpoint
)。
安全组
安全组设置也是一样的。 RDS 和 Redshift 都有两个安全组(空组和引用空组的入口)。 ingress安全组入站规则如下,出站规则默认允许所有出站通信。
RDS:
红移:
复制实例设置
复制实例有两个安全组。我认为复制实例本身需要一个安全组,但是,我无法设法创建一个工作组。
在写这篇文章之前我做了什么post?
我测试了以下场景:
- 使用允许所有入站和出站流量的默认 VPC 安全组 -> 两个端点都工作
- 创建了一个安全组,该安全组在 TCP 3306 (RDS) 和 5439 (Redshift) 上具有入站规则,并连接到上述 RDS 和 Redshift 安全组 -> RDS 工作,Redshift 不工作
我收到以下错误,我将其解释为 DMS 无法调用任何类型的 Redshift。
Test Endpoint failed: Application-Status: 1020912, Application-Message: N/A, Application-Detailed-Message: N/A
总的来说,它与默认 VPC 安全组一起工作的事实使我得出以下结论:(1) 这是一个网络问题,并且 (2) 对复制实例安全组进行简单更改可能会解决问题工作。然而,经过无数次迭代,我不知道我在这里遗漏了什么。
非常感谢所有想法和建议!
您的场景的典型安全组配置应该是:
- AWS DMS 实例 (
DMS-SG
) 上的一个安全组,它允许所有出站(这是正常的默认设置),加上您需要使用 DMS 的任何入站
- Amazon RDS 实例 (
RDS-SG
) 上的安全组,允许端口 3306 上来自 DMS-SG
的入站流量
- Amazon Redshift 实例 (
Redshift-SG
) 上的安全组,允许端口 5439 上来自 DMS-SG
的入站流量
也就是说,DMS实例应该有自己的安全组,可以从其他安全组中引用。安全组分别应用于每个实例。具有 'same' 安全组的实例不会获得任何特殊的相互通信能力,除非它作为规则专门添加到安全组。
对我来说,问题是 redshift 端点,请从中删除端口号和数据库名称。浪费了一整天。
我目前正在尝试通过 DMS 设置从 RDS (MySQL) 到 Redshift 的复制。 RDS 的端点正在工作,但 Redshift 的端点没有。这是我的设置:
VPC
RDS、DMS 和 Redshift 运行 在同一 VPC 中并共享相同的子网。
角色
我根据 AWS 文档实现了 DMS 所需的角色(dms-vpc-role
、dms-cloudwatch-logs-role
)和 Redshift 的特定角色(dms-access-for-endpoint
)。
安全组
安全组设置也是一样的。 RDS 和 Redshift 都有两个安全组(空组和引用空组的入口)。 ingress安全组入站规则如下,出站规则默认允许所有出站通信。
RDS:
红移:
复制实例设置
复制实例有两个安全组。我认为复制实例本身需要一个安全组,但是,我无法设法创建一个工作组。
在写这篇文章之前我做了什么post?
我测试了以下场景:
- 使用允许所有入站和出站流量的默认 VPC 安全组 -> 两个端点都工作
- 创建了一个安全组,该安全组在 TCP 3306 (RDS) 和 5439 (Redshift) 上具有入站规则,并连接到上述 RDS 和 Redshift 安全组 -> RDS 工作,Redshift 不工作
我收到以下错误,我将其解释为 DMS 无法调用任何类型的 Redshift。
Test Endpoint failed: Application-Status: 1020912, Application-Message: N/A, Application-Detailed-Message: N/A
总的来说,它与默认 VPC 安全组一起工作的事实使我得出以下结论:(1) 这是一个网络问题,并且 (2) 对复制实例安全组进行简单更改可能会解决问题工作。然而,经过无数次迭代,我不知道我在这里遗漏了什么。
非常感谢所有想法和建议!
您的场景的典型安全组配置应该是:
- AWS DMS 实例 (
DMS-SG
) 上的一个安全组,它允许所有出站(这是正常的默认设置),加上您需要使用 DMS 的任何入站 - Amazon RDS 实例 (
RDS-SG
) 上的安全组,允许端口 3306 上来自DMS-SG
的入站流量
- Amazon Redshift 实例 (
Redshift-SG
) 上的安全组,允许端口 5439 上来自DMS-SG
的入站流量
也就是说,DMS实例应该有自己的安全组,可以从其他安全组中引用。安全组分别应用于每个实例。具有 'same' 安全组的实例不会获得任何特殊的相互通信能力,除非它作为规则专门添加到安全组。
对我来说,问题是 redshift 端点,请从中删除端口号和数据库名称。浪费了一整天。