无法建立与jdbc的连接:mysql通信链路失败

kan*_*kan 2 amazon-rds amazon-data-pipeline

我一直在尝试在 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
Run Code Online (Sandbox Code Playgroud)

我相信问题是我需要允许数据管道访问我的 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 服务)代表你)。

我是不是少了一步?

str*_*gjz 5

RDS 实例的安全性应向 Datapipeline 中 EC2 任务运行程序的安全组开放数据库端口。

为 VPC 中的 EC2 实例创建安全组

  1. 打开 Amazon EC2 控制台https://console.aws.amazon.com/ec2/。
  2. 在导航窗格中,单击安全组。
  3. 单击创建安全组。
  4. 指定安全组的名称和描述。
  5. 从列表中选择您的 VPC,然后单击创建。

记下新安全组的 ID。

如果您在自己的计算机上运行 Task Runner,请记下其公共 IP 地址(采用 CIDR 表示法)。如果计算机位于防火墙后面,请记下其网络的整个地址范围。稍后您将需要此地址。

接下来,在资源安全组中创建规则,允许任务运行程序必须访问的数据源的入站流量。例如,如果 Task Runner 必须访问 Amazon Redshift 集群,则 Amazon Redshift 集群的安全组必须允许来自该资源的入站流量。

向 RDS 数据库的安全组添加规​​则

  1. 打开 Amazon RDS 控制台https://console.aws.amazon.com/rds/。
  2. 在导航窗格中,单击实例。
  3. 单击数据库实例的详细信息图标。在安全和网络下,单击安全组的链接,这将带您进入 Amazon EC2 控制台。如果您对安全组使用旧的控制台设计,请通过单击控制台页面顶部显示的图标切换到新的控制台设计。
  4. 在“入站”选项卡中,单击“编辑”,然后单击“添加规则”。指定您启动数据库实例时使用的数据库端口。开始在源中键入运行任务运行程序的资源所使用的安全组的 ID 或 IP 地址。
  5. 单击“保存”。

http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-resources-vpc.html#dp-vpc-security-groups