尝试设置lambda以访问AWS上的RDS服务器,但获取超时

问题描述:

我知道AWS现在允许这样做,并且具有instructions以进行手动设置。尽管如此,我正试图在云计算中设置它并陷入困境。目前,当我尝试访问我的RDS服务器时,出现connect ETIMEDOUT错误。尝试设置lambda以访问AWS上的RDS服务器,但获取超时

我有我的VPC,子网和安全组设置有以下几点:

"VPC": { 
    "Type": "AWS::EC2::VPC", 
    "Properties": { 
    "CidrBlock": "10.0.0.0/16", 
    "EnableDnsSupport": "false", 
    "EnableDnsHostnames": "false", 
    "InstanceTenancy": "default", 
    "Tags" : [{ "Key": "Name", "Value": { "Ref": "DomainName" } }] 
    } 
}, 

"SubnetA": { 
    "Type": "AWS::EC2::Subnet", 
    "Properties": { 
    "VpcId": { "Ref": "VPC" }, 
    "CidrBlock": "10.0.0.0/24", 
    "AvailabilityZone": { "Fn::Select": [ "0", { "Fn::GetAZs": { "Ref": "AWS::Region" } }]}, 
    "Tags" : [{ "Key": "Name", "Value": { "Ref": "DomainName" } }] 
    } 
}, 

"SubnetB": { 
    "Type": "AWS::EC2::Subnet", 
    "Properties": { 
    "VpcId": { "Ref": "VPC" }, 
    "CidrBlock": "10.0.1.0/24", 
    "AvailabilityZone": { "Fn::Select": [ "1", { "Fn::GetAZs": { "Ref": "AWS::Region" } }]}, 
    "Tags" : [{ "Key": "Name", "Value": { "Ref": "DomainName" } }] 
    } 
}, 

"SubnetGroup": { 
    "Type": "AWS::RDS::DBSubnetGroup", 
    "Properties": { 
    "DBSubnetGroupDescription": "Database Access", 
    "SubnetIds" : [{ "Ref": "SubnetA" }, { "Ref": "SubnetB" }], 
    "Tags" : [{ "Key": "Name", "Value": { "Ref": "DomainName" } }] 
    } 
}, 

"SecurityGroup": { 
    "Type": "AWS::EC2::SecurityGroup", 
    "Properties": { 
    "GroupDescription": "Database Access", 
    "VpcId": {"Ref": "VPC"}, 
    "SecurityGroupIngress" : [{ 
     "IpProtocol": "tcp", 
     "FromPort": "3306", 
     "ToPort": "3306", 
     "CidrIp": "10.0.0.0/16" 
    }], 
    "Tags" : [{ "Key": "Name", "Value": { "Ref": "DomainName" } }] 
    } 
}, 

我不实际使用SubnetB反而使AWS::RDS::DBSubnetGroup你需要子网中至少有两个可用性区域。

我的RDS数据库使用VPC和安全组进行设置。

"Database": { 
    "Type": "AWS::RDS::DBInstance", 
    "Properties": { 
    "DBName": { "Fn::Join": ["", { "Fn::Split": [".", { "Ref": "DomainName" }]}]}, 
    "AllocatedStorage": "5", 
    "DBInstanceClass": "db.t2.micro", 
    "Engine": "MySQL", 
    "EngineVersion": "5.5", 
    "MasterUsername": { "Ref": "DBUsername" }, 
    "MasterUserPassword": { "Ref": "DBPassword" }, 
    "DBSubnetGroupName": { "Ref": "SubnetGroup" }, 
    "VPCSecurityGroups" : [{ "Fn::GetAtt": [ "SecurityGroup", "GroupId" ] }], 
    "Tags" : [{ "Key": "Name", "Value": { "Ref": "DomainName" } }] 
    }, 
    "DeletionPolicy": "Snapshot" 
}, 

所以我认为数据库端在VPC中是正确的,并且能够同时讨论两个子网。

我的lambda是在安全组和SubnetA中设置的。

"LambdaFunctionUpdate": { 
    "Type": "AWS::Lambda::Function", 
    "Properties": { 
    "Code": { 
     "ZipFile": "exports.handler = function (event, context) { context.succeed(\"Hello, World!\"); };" 
    }, 
    "Description": "Used to create and or sync database tables to the application models", 
    "Handler": "index.handler", 
    "MemorySize": 128, 
    "Role": { "Fn::GetAtt": ["LambdaExecutionRole", "Arn" ] }, 
    "Runtime": "nodejs4.3", 
    "Timeout": 30, 
    "VpcConfig": { 
     "SecurityGroupIds": [{ "Fn::GetAtt": ["SecurityGroup", "GroupId"] }], 
     "SubnetIds": [{"Ref": "SubnetA"}] 
    } 
    } 
}, 

在我输出数据库端点信息的一切结束时。

"Outputs": { 
    "DatabaseEndpoint": { 
    "Value": { "Fn::Join" : [":", [{ "Fn::GetAtt": ["Database", "Endpoint.Address" ] }, { "Fn::GetAtt": ["Database", "Endpoint.Port" ] }]]}, 
    "Description": "Database endpoint" 
    } 
} 

当我运行我的lambda并尝试连接到RDS服务器与端点给定我得到超时错误。

{ 
    "errorMessage": "connect ETIMEDOUT", 
    "errorType": "SequelizeConnectionError", 
    "stackTrace": [ 
    "Handshake._callback (/var/task/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:95:20)", 
    "Handshake.Sequence.end (/var/task/node_modules/mysql/lib/protocol/sequences/Sequence.js:86:24)", 
    "Protocol.handleNetworkError (/var/task/node_modules/mysql/lib/protocol/Protocol.js:364:14)", 
    "Connection._handleNetworkError (/var/task/node_modules/mysql/lib/Connection.js:428:18)", 
    "Connection._handleConnectTimeout (/var/task/node_modules/mysql/lib/Connection.js:424:8)", 
    "Socket.g (events.js:260:16)", 
    "emitNone (events.js:67:13)", 
    "Socket.emit (events.js:166:7)", 
    "Socket._onTimeout (net.js:318:8)", 
    "_runOnTimeout (timers.js:524:11)", 
    "_makeTimerTimeout (timers.js:515:3)", 
    "Timer.unrefTimeout (timers.js:584:5)" 
    ] 
} 

VPC配置不正确。 DNS服务无法关闭。

"VPC": { 
    "Type": "AWS::EC2::VPC", 
    "Properties": { 
    "CidrBlock": "10.0.0.0/16", 
    "EnableDnsSupport": "true", 
    "EnableDnsHostnames": "true", 
    "InstanceTenancy": "default", 
    "Tags" : [{ "Key": "Name", "Value": { "Ref": "DomainName" } }] 
    } 
},