无法建立连接 jdbc:mysql 通信 link 失败
Unable to establish connection to jdbc:mysql communication link failure
我一直在尝试在 S3 存储桶和 Elasitcbeanstalk 环境之间建立一个数据管道,其中包括一个 MySQL RDS 实例(都在同一个 VPC 中)。
我失败了:
The last packet sent successfully to the server was 0 milliseconds ago.
The driver has not received any packets from the server.
amazonaws.datapipeline.database.ConnectionFactory: Unable to establish
connection to jdbc:mysql://***.us-west-2.rds.amazonaws.com:3306/mydata
Communications link failure
我认为问题在于我需要允许数据管道访问我的 MySQL RDS,但不知道如何访问。我将 myEc2RdsSecurityGrps
字段设置为在 EC2 > 安全组下为 RDS 实例列出的安全组名称,但这没有帮助。
RDS 实例的值 IAM DB Authentication Enabled
设置为是。
此外,这里的 IAM 角色非常新,但有两个角色是这样创建的:Roles > Create Role > Data Pipeline > EC2 Role for Data Pipeline
(为 Data Pipeline 启动的 EC2 实例提供对 S3、DynamoDB 和其他服务的访问)以及 Roles > Create Role > Data Pipeline > Data Pipeline
(允许 Data Pipeline 和 Data Pipeline 管理的 EMR 集群代表您调用 AWS 服务)。
我是不是漏掉了一步?
RDS 实例的安全性应该向数据管道中的 EC2 任务运行器的安全组开放数据库端口。
为 VPC 中的 EC2 实例创建安全组
- 在 https://console.aws.amazon.com/ec2/ 打开 Amazon EC2 控制台。
- 在导航窗格中,单击“安全组”。
- 单击创建安全组。
- 指定安全组的名称和描述。
- Select 从列表中选择您的 VPC,然后单击创建。
记下新安全组的 ID。
如果您是自己计算机上的 运行 Task Runner,请记下它的 public IP 地址,采用 CIDR 表示法。如果计算机位于防火墙后面,请记下其网络的整个地址范围。您稍后会需要这个地址。
接下来,在资源安全组中创建允许任务运行程序必须访问的数据源的入站流量的规则。例如,如果 Task Runner 必须访问 Amazon Redshift 集群,则 Amazon Redshift 集群的安全组必须允许来自该资源的入站流量。
向 RDS 数据库的安全组添加规则
- 在 https://console.aws.amazon.com/rds/ 打开 Amazon RDS 控制台。
- 在导航窗格中,单击“实例”。
- 单击数据库实例的详细信息图标。在安全和网络下,单击安全组的 link,这会将您带到 Amazon EC2 控制台。如果您对安全组使用旧控制台设计,请单击控制台页面顶部显示的图标切换到新控制台设计。
- 在“入站”选项卡中,单击“编辑”,然后单击“添加规则”。
指定您在启动数据库实例时使用的数据库端口。开始键入资源使用的安全组 ID 或 IP 地址 运行 Source 中的 Task Runner。
- 点击保存。
在 AWS-RDS 中,安全组,入站源应具有您尝试从中访问数据库的 IP 地址,或者应设为 'Anywhere'
1) 在 https://console.aws.amazon.com/rds/
打开 Amazon RDS 控制台
2) 在导航窗格中,单击实例。
3) 单击数据库实例的详细信息图标。在安全和网络下,单击安全组的 link,这会将您带到 Amazon EC2 控制台。如果您对安全组使用旧控制台设计,请单击控制台页面顶部显示的图标切换到新控制台设计。
4) 在“入站”选项卡中,单击“编辑”(将打开一个弹出窗口)
5) 在 Source 字段中单击下拉菜单和 select 'Anywhere',默认情况下 IP 地址将 selected 为 '0.0.0.0/0, ::/0' 或使select 'Custom' 并输入您从中访问数据库的 IP 地址(或“0.0.0.0/0, ::/0”,与 'Anywhere' 相同)。
我一直在尝试在 S3 存储桶和 Elasitcbeanstalk 环境之间建立一个数据管道,其中包括一个 MySQL RDS 实例(都在同一个 VPC 中)。
我失败了:
The last packet sent successfully to the server was 0 milliseconds ago.
The driver has not received any packets from the server.
amazonaws.datapipeline.database.ConnectionFactory: Unable to establish
connection to jdbc:mysql://***.us-west-2.rds.amazonaws.com:3306/mydata
Communications link failure
我认为问题在于我需要允许数据管道访问我的 MySQL RDS,但不知道如何访问。我将 myEc2RdsSecurityGrps
字段设置为在 EC2 > 安全组下为 RDS 实例列出的安全组名称,但这没有帮助。
RDS 实例的值 IAM DB Authentication Enabled
设置为是。
此外,这里的 IAM 角色非常新,但有两个角色是这样创建的:Roles > Create Role > Data Pipeline > EC2 Role for Data Pipeline
(为 Data Pipeline 启动的 EC2 实例提供对 S3、DynamoDB 和其他服务的访问)以及 Roles > Create Role > Data Pipeline > Data Pipeline
(允许 Data Pipeline 和 Data Pipeline 管理的 EMR 集群代表您调用 AWS 服务)。
我是不是漏掉了一步?
RDS 实例的安全性应该向数据管道中的 EC2 任务运行器的安全组开放数据库端口。
为 VPC 中的 EC2 实例创建安全组
- 在 https://console.aws.amazon.com/ec2/ 打开 Amazon EC2 控制台。
- 在导航窗格中,单击“安全组”。
- 单击创建安全组。
- 指定安全组的名称和描述。
- Select 从列表中选择您的 VPC,然后单击创建。
记下新安全组的 ID。
如果您是自己计算机上的 运行 Task Runner,请记下它的 public IP 地址,采用 CIDR 表示法。如果计算机位于防火墙后面,请记下其网络的整个地址范围。您稍后会需要这个地址。
接下来,在资源安全组中创建允许任务运行程序必须访问的数据源的入站流量的规则。例如,如果 Task Runner 必须访问 Amazon Redshift 集群,则 Amazon Redshift 集群的安全组必须允许来自该资源的入站流量。
向 RDS 数据库的安全组添加规则
- 在 https://console.aws.amazon.com/rds/ 打开 Amazon RDS 控制台。
- 在导航窗格中,单击“实例”。
- 单击数据库实例的详细信息图标。在安全和网络下,单击安全组的 link,这会将您带到 Amazon EC2 控制台。如果您对安全组使用旧控制台设计,请单击控制台页面顶部显示的图标切换到新控制台设计。
- 在“入站”选项卡中,单击“编辑”,然后单击“添加规则”。 指定您在启动数据库实例时使用的数据库端口。开始键入资源使用的安全组 ID 或 IP 地址 运行 Source 中的 Task Runner。
- 点击保存。
在 AWS-RDS 中,安全组,入站源应具有您尝试从中访问数据库的 IP 地址,或者应设为 'Anywhere'
1) 在 https://console.aws.amazon.com/rds/
打开 Amazon RDS 控制台
2) 在导航窗格中,单击实例。
3) 单击数据库实例的详细信息图标。在安全和网络下,单击安全组的 link,这会将您带到 Amazon EC2 控制台。如果您对安全组使用旧控制台设计,请单击控制台页面顶部显示的图标切换到新控制台设计。
4) 在“入站”选项卡中,单击“编辑”(将打开一个弹出窗口)
5) 在 Source 字段中单击下拉菜单和 select 'Anywhere',默认情况下 IP 地址将 selected 为 '0.0.0.0/0, ::/0' 或使select 'Custom' 并输入您从中访问数据库的 IP 地址(或“0.0.0.0/0, ::/0”,与 'Anywhere' 相同)。