Aws-lambda-dotnet: Kann keine Verbindung zu MongoDB Atlas herstellen

Erstellt am 16. MĂ€rz 2018  Â·  24Kommentare  Â·  Quelle: aws/aws-lambda-dotnet

Ich habe eine einfache AWS Serverless ASP Net Core 2.0 WebAPI . geschrieben
Dies stellt eine Verbindung zu einer MongoDB Atlas-Datenbank her. Aber es funktioniert nicht. Es gibt eine Auszeit.
Ich teste lokal und es funktioniert. Ich veröffentliche es in Azure it Works.

Ich vermute, dass dies durch die AWS CloudFormation-Firewall verursacht wird.

Wenn ich in AWS Serverless veröffentliche, wird ein Fehler ausgegeben:

502 Bad Gateway

{
"message": "Interner Serverfehler"
}

Ich habe die Protokolle ĂŒberprĂŒft,

Unhandled Exception: System.TimeoutException: A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 } }. Client view of cluster state is { ClusterId : "1", ConnectionMode : "ReplicaSet", Type : "ReplicaSet", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/cluster0-shard-00-00-3lmjx.mongodb.net:27017" }", EndPoint: "Unspecified/cluster0-shard-00-00-3lmjq.mongodb.net:27017", State: "Disconnected", Type: "Unknown" }, { ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/cluster0-shard-00-01-3lmjx.mongodb.net:27017" }", EndPoint: "Unspecified/cluster0-shard-00-01-3lmjx.mongodb.net:27017", State: "Disconnected", Type: "Unknown" }, { ServerId: "{ ClusterId : 1, EndPoint : "Unspecified/cluster0-shard-00-02-3lmjq.mongodb.net:27017" }", EndPoint: "Unspecified/cluster0-shard-00-02-3lmjq.mongodb.net:27017", State: "Disconnected", Type: "Unknown" }] }.

Wie kann man das debuggen und lösen?

Meine dienstlose.Vorlage

{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Transform" : "AWS::Serverless-2016-10-31",
  "Description" : "An AWS Serverless Application that uses the ASP.NET Core framework running in Amazon Lambda.",

  "Parameters" : {
    "ShouldCreateBucket" : {
      "Type" : "String",        
      "AllowedValues" : ["true", "false"],
      "Description" : "If true then the S3 bucket that will be proxied will be created with the CloudFormation stack."
    },  
    "BucketName" : {
        "Type" : "String",
        "Description" : "Name of S3 bucket that will be proxied. If left blank a new table will be created.",
        "MinLength" : "0"
    }
  },

  "Conditions" : {
    "CreateS3Bucket" : {"Fn::Equals" : [{"Ref" : "ShouldCreateBucket"}, "true"]},
    "BucketNameGenerated" : {"Fn::Equals" : [{"Ref" : "BucketName"}, ""]}
  },

  "Resources" : {

    "ProxyFunction" : {
      "Type" : "AWS::Serverless::Function",
      "Properties": {
        "Handler": "AWSServerless1::AWSServerless1.LambdaEntryPoint::FunctionHandlerAsync",
        "Runtime": "dotnetcore2.0",
        "CodeUri": "",
        "MemorySize": 256,
        "Timeout": 30,
        "Role": null,
        "Policies": [ "AWSLambdaFullAccess" ],
        "Environment" : {
          "Variables" : {
            "AppS3Bucket" : { "Fn::If" : ["CreateS3Bucket", {"Ref":"Bucket"}, { "Ref" : "BucketName" } ] }
          }
        },
        "Events": {
          "PutResource": {
            "Type": "Api",
            "Properties": {
              "Path": "/{proxy+}",
              "Method": "ANY"
            }
          }
        }
      }
    },

    "Bucket" : {
        "Type" : "AWS::S3::Bucket",
        "Condition" : "CreateS3Bucket",
        "Properties" : {
            "BucketName" : { "Fn::If" : ["BucketNameGenerated", {"Ref" : "AWS::NoValue" }, { "Ref" : "BucketName" } ] }
        }
    }
  },

  "Outputs" : {
    "S3ProxyBucket" : {
        "Value" : { "Fn::If" : ["CreateS3Bucket", {"Ref":"Bucket"}, { "Ref" : "BucketName" } ] }
    }
  }
}
guidance

Hilfreichster Kommentar

Hier gilt das gleiche. Es wird versucht, ein Lambda in AWS auszufĂŒhren, um eine Verbindung ĂŒber eine öffentliche IP mit dem kostenlosen Kontingent herzustellen. Funktioniert nicht. Sieht so aus, als ob Lambda meine Funktion unter Linux ausfĂŒhrt.

Alle 24 Kommentare

@TonyHenrique , dies scheint eine Rolle zu sein, die Ihr Lambda

Ich habe IAM ĂŒberprĂŒft und konnte in den Services keine MongoDB-Option finden. Gibt es einen Blogbeitrag, der zeigt, wie man von AWS Lambda ASP Net Core 2.0 aus eine Verbindung zu MongoDB Atlas herstellt?

Oder wie kann ich diese Datei bearbeiten, um diese ausgehende Verbindung zuzulassen?

@TonyHenrique Nicht sicher bei MongoDB (vielleicht ausgehende Internetverbindung), aber im Wesentlichen wĂŒrden Sie fĂŒr Dynamo einfach dynamoDb: * geben, um auf alle Ressourcen fĂŒr Dynamo zuzugreifen.

Momentan wurde die Anwendung Data bereits auf Mongo DB entwickelt,
und mĂŒssen auf Port 27017 auf *.mongodb.net zugreifen

@TonyHenrique können Sie ĂŒberprĂŒfen, ob Lambda eine ausgehende Internetverbindung hat, und dann vielleicht den eingehenden Datenverkehr zu mongodb untersuchen?

Ich habe dasselbe Projekt in Azure veröffentlicht und es funktioniert.
Auf AWS scheint die Firewall blockiert zu sein.

Wie aktiviere ich Adresse/Ports auf der Firewall, damit ich eine Verbindung zu Mongo Atlas herstellen kann?

Werden die Lambda-Funktion und die Mongo-Datenbank beide in vpc oder beide in EC2 classic gehostet?

Nein. Ich habe den ASP Net Core fĂŒr AWS Lambda veröffentlicht.
aber die MongoDB wird auf dem Mongo Atlas Service gehostet (https://www.mongodb.com/cloud/atlas)

Mein ASP NET muss also zugreifen
Port 27017 auf *.mongodb.net

Wie kann ich My serveless.template bearbeiten, um diese ausgehende Verbindung zuzulassen?

Befindet sich Ihr Lambda in einem vPC ohne Internetzugang? Können Sie www.google.com aufrufen?

Mongo Atlas habe ich noch nie probiert.

@TonyHenrique es sieht aus wie ein Problem mit der Verbindungszeichenfolge, aber ich habe ein Teammitglied um BestÀtigung gebeten

@TonyHenrique Ich bestĂ€tige, dass es wie ein Problem mit der Verbindungszeichenfolge aussieht. Wo haben Sie es in Ihrem Code konfiguriert und vor allem, welchen Wert haben Sie ihm zugewiesen? (Sie sollten die Authentifizierungsdaten in dieser Verbindungszeichenfolge maskieren, wenn Sie sie hier einfĂŒgen möchten).

Der "Unspecified/cluster0-shard-00-00-3lmjx.mongodb.net:27017" ist hier die rote Flagge, also mĂŒssten wir wissen, woher Ihre Lambda-Funktion diese Informationen abruft. Ich wĂŒrde vorschlagen, dass du mich direkt auf Slack anpingst, nachdem du unserem Community-Slack-Netzwerk unter https://community-slack.mongodb.com beigetreten bist

Die Verbindung enthÀlt nicht das "Unspecified"

Es erscheint nur bei AWS-Fehler. Außerdem weiß ich, dass es keine falsche Verbindung ist, denn es funktioniert lokal und auch auf Azure. Nur bei AWS tritt dieser Fehler auf.

Der Fehler ist ein Timeout-Fehler. Sieht nach einem Firewall-Problem aus.

@TonyHenrique empfiehlt dir, auf den erwÀhnten Slack @rlondner zu gehen oder ein Jira mit MongoDB-Support zu öffnen https://jira.mongodb.org

Haben Sie die Whitelist fĂŒr Ihre Lambda-Verbindung in Atlas geöffnet?

https://docs.atlas.mongodb.com/security-whitelist/

Es ist kein MongoDB-Problem, es funktioniert gut auf Azure und lokal.
Die Verbindung wird nur blockiert, wenn sie von AWS Lambda gestartet wird.

Ich habe auch die MongoDB IP-Whitelist ĂŒberprĂŒft:

0.0.0.0/0 (includes your current IP address)

image

@TonyHenrique schließe dich auf durchreden können.

Ich habe in den Mongo DB-Dokumenten bemerkt, dass fĂŒr den C#-Treiber in .NET Core keine Verbindung mit dem kostenlosen Kontingent und einigen anderen Clusterkonfigurationen in Linux hergestellt werden kann. Lambda ist eine Linux-Umgebung, könnte das also das Problem sein?

image

Schließung wegen mangelnder AktivitĂ€t

Gab es jemals eine Lösung @normj @jaydestro ? Ich beschÀftige mich gerade mit diesem Problem.

Hier gilt das gleiche. Es wird versucht, ein Lambda in AWS auszufĂŒhren, um eine Verbindung ĂŒber eine öffentliche IP mit dem kostenlosen Kontingent herzustellen. Funktioniert nicht. Sieht so aus, als ob Lambda meine Funktion unter Linux ausfĂŒhrt.

Ja, ich bekomme dieses Problem auch. Ein Fix wÀre schön :-)

Dito hier. Auf Atlas' Azure hat alles super funktioniert, aber als wir am vergangenen Wochenende zu Atlas' AWS migriert haben, ist das gleiche Problem aufgetreten.

Irgendeine Auflösung? Dasselbe hier – Azure funktioniert gut, aber AWS gibt Folgendes zurĂŒck:

502 Bad Gateway { "message": "Internal server error" }

Und diese spezielle API-Methode verwendet die Datenbank nicht, das ist also kein Problem.

Ich bekam diesen Fehler.

image

Mir wurde klar, dass das Problem auf keinen ausgehenden Datenverkehr von Lambda zurĂŒckzufĂŒhren ist.

Ich habe es so geÀndert, dass es sich in der VPC befindet, die ausgehenden Datenverkehr zulÀsst, und die Verbindung zu Mongo funktionierte.

Ich hatte dieses Problem in Azure und ich habe es gelöst! Ich habe die kostenlose Stufe von MongoDB Atlas verwendet.

Setzen Sie die IP auf die Whitelist, indem Sie zur Konsole gehen und eingeben: "Curl -o output.txt icanhazip.com" und dann "cat output.txt". FĂŒgen Sie diesen Eintrag zu Ihrer Mongolabs-IP-Adressen-Whitelist hinzu.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen