代码之家  ›  专栏  ›  技术社区  ›  SangminKim

lambda无法访问rds,尽管它们在同一个vpc中

  •  2
  • SangminKim  · 技术社区  · 6 年前

    我用下面的 cloudformation>code>创建了 vpc rds

    资源:
    TestVpc:
    类型:“aws::ec2::vpc”
    性能:
    CIDRBlock:“10.0.0.0/16”
    启用dnssupport:true
    启用dnshostname:真
    TestSubnetA:
    类型:“AWS::EC2::Subnet”
    性能:
    可用区:“AP-Northeast-1A”
    CIDRBlock:“10.0.0.0/20”
    VpcId:!Rest-TestVPC
    TestSubnetB:
    类型:“AWS::EC2::Subnet”
    性能:
    可用区:“AP-Northeast-1D”
    CIDRBlock:“10.0.16.0/20”
    VpcId:!Rest-TestVPC
    TestSubnetC:
    类型:“AWS::EC2::Subnet”
    性能:
    可用区:“AP-Northeast-1C”
    CIDRBlock:“10.0.32.0/20”
    VpcId:!Rest-TestVPC
    测试安全组:
    类型:“AWS::EC2::SecurityGroup”
    性能:
    groupdescription:“使用cloduformation测试安全组”
    安全分组地址:
    -CIDRIP:“10.0.0.0/16”
    协议:“TCP”
    FromPort:0
    ToPort:65535
    安全组地址:
    -cidrip:“0.0.0.0/0”
    FromPort:0
    ToPort:65535
    协议:“TCP”
    VpcId:!Rest-TestVPC
    
    测试子网组:
    类型:“aws::rds::dbsubnetgroup”
    性能:
    dbsubnetgroupdescription:“测试子网组描述”
    SubnetIds:
    -!测试子网
    -!测试子网
    -!测试子网
    
    TestRDS:
    类型:“aws::rds::dbinstance”
    性能:
    dbInstanceClass:“db.t2.micro”
    DBInstanceIdentifier:“Rekog仲裁”
    DBName:“雷科格”
    
    引擎:“Postgres”
    发动机版本:“10.4”
    
    主用户名:“Rekog”
    主用户密码:“passwd”
    已分配存储:“20”
    
    dbsubnetgroupname:!引用testsubnetgroup
    vpc安全组:
    -!引用testsecuritygroup
    < /代码> 
    
    

    无线电数据系统的结果


    lambda设置


    lambdatry to access with domain namerekog moderation.cokqwd6ixsnc.ap-neastern-1.rds.amazonaws.com,it returns timeout error while making a connection tords

    我怀念什么?


    无线电数据系统的结果

    enter image description here


    λ设置

    enter image description here


    什么时候? Lambda 尝试使用域名访问 rekog-moderation.cokqwd6ixsnc.ap-northeast-1.rds.amazonaws.com ,它在与连接时返回超时错误 RDS .

    我错过了什么?

    2 回复  |  直到 5 年前
        1
  •  3
  •   Caldazar    5 年前

    您需要在入口规则中添加安全组自引用,以便允许安全组的所有成员相互通信。类似:

    "TestSecurityGroupIngress": {
      "Type": "AWS::EC2::SecurityGroupIngress",
      "Properties": {
        "GroupId": { "Ref": "TestSecurityGroup" },
        "IpProtocol": "tcp",
        "FromPort": "0",
        "ToPort": "65535",
        "SourceSecurityGroupId": { "Ref": "TestSecurityGroup" }
      }
    }
    

    您可以在cf on中找到有关自引用安全组的更多信息。 AWS forum

        2
  •  0
  •   T.Chmelevskij    5 年前

    除了@caldazar答案:

    我在使用时遇到了类似的问题 mysql NPM封装。在调试过程中,我尝试查看主机名解析为什么IP地址:

    const { lookup: lc } = require('dns');
    const { promisify } = require('util');
    
    const lookup = promisify(lc);
    const { address } = await lookup('<my-hostname.com>');
    

    然后我检查了IP地址是否在为RDS实例和子网指定的范围内,并且它与可用性区域匹配。

    问题是 MySQL 可能是试图从公共DNS解析主机名。所以,我并没有传递主机名,而是将解析后的IP地址传递到mysql的初始化中,它工作正常。