1

Ich weiß, dass AWS dies jetzt erlaubt und instructions für eine manuelle Einrichtung hat. Ich versuche das aber in einer Cloud-Formation aufzustellen und stoße in Schwierigkeiten. Wenn ich derzeit versuche, auf meinen RDS-Server zuzugreifen, erhalte ich connect ETIMEDOUT Fehler.Ich versuche, Lambda einzurichten, um auf meinen RDS-Server auf AWS zuzugreifen, aber Timeouts zu bekommen

Ich habe meine VPC, Subnetze und Sicherheitsgruppen-Setup mit dem folgenden:

"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" } }] 
    } 
}, 

ich eigentlich SubnetB nicht verwenden, aber AWS::RDS::DBSubnetGroup Sie benötigen Subnetze in mindestens zwei Verfügbarkeitszonen zu machen.

Meine RDS-Datenbank wird mit der VPC- und Sicherheitsgruppe eingerichtet.

Also ich denke, die Datenbankseite ist korrekt in der VPC und in der Lage, beide Subnetze zu sprechen.

Mein Lambda ist in der Sicherheitsgruppe und in SubnetA eingerichtet.

"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"}] 
    } 
    } 
}, 

Am Ende von allem gebe ich die Datenbank Endpunkt Informationen aus.

Wenn ich mein Lambda starte und versuche, eine Verbindung zum RDS-Server mit dem angegebenen Endpunkt herzustellen, erhalte ich Timeout-Fehler.

{ 
    "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)" 
    ] 
} 

Antwort

0

Die VPC-Konfiguration war falsch. DNS-Dienste können nicht deaktiviert werden.

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