Aws-lambda-dotnet: لا يمكن الاتصال بـ MongoDB Atlas

تم إنشاؤها على ١٦ مارس ٢٠١٨  ·  24تعليقات  ·  مصدر: aws/aws-lambda-dotnet

لقد كتبت AWS Serverless ASP Net Core 2.0 WebAPI بسيطًا
هذا يتصل بقاعدة بيانات MongoDB Atlas. لكن هذا لا يعمل. انها تعطي مهلة.
أختبر محليًا وهو يعمل. أنشر في Azure it Works.

أظن أن سبب ذلك هو جدار حماية AWS CloudFormation.

عندما أنشر على AWS Serverless ، فإنه يعطي خطأ:

502 مدخل غير صالح

{
"message": "خطأ داخلي في الخادم"
}

راجعت السجلات ،

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

كيف يتم تصحيح هذا وحل هذا؟

بلادي

{
  "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

التعليق الأكثر فائدة

كذلك هنا. محاولة تشغيل lambda في AWS للاتصال عبر IP العام بالطبقة المجانية. لا يعمل. يبدو أن lambda تقوم بتشغيل وظيفتي على نظام Linux.

ال 24 كومينتر

TonyHenrique ، يبدو أن هذا هو الدور الذي تقوم به lambda إذا لم يكن لدى المجموعة الخاصة بها إمكانية الوصول إلى موارد قاعدة البيانات الخاصة بك ، نظرًا لأن الدور فارغ في قالب yoir بدون خادم ، فإنه يقوم بإنشائه بشكل عشوائي. ستحتاج إلى الانتقال إلى IAM وتغيير السياسة للوصول إلى Mongodb ، وتأكد أيضًا من ضبط lambda على VPC الصحيح.

لقد راجعت IAM ولم أجد خيار MongoDB في الخدمات ، فهل هناك منشور مدونة يوضح كيفية الاتصال بـ MongoDB Atlas من AWS Lambda ASP Net Core 2.0؟

أو كيف يمكنني تحرير هذا الملف للسماح بالاتصال الصادر؟

TonyHenrique لست متأكدًا من خارجي ) ولكن بشكل أساسي بالنسبة إلى Dynamo ، ستعطي فقط dynamoDb: * للوصول إلى جميع موارد الدينامو.

في الوقت الحالي ، تم تطوير بيانات التطبيق بالفعل على Mongo DB ،
وتحتاج إلى الوصول إلى المنفذ 27017 على * .mongodb.net

TonyHenrique هل يمكنك التحقق مما إذا كانت lambda بها اتصال إنترنت

لقد قمت بنشر نفس المشروع على Azure وهو يعمل.
على AWS ، يبدو أنه تم حظر جدار الحماية.

كيف يمكنني تمكين العنوان / المنافذ على جدار الحماية حتى أتمكن من الاتصال بـ Mongo Atlas؟

هل وظيفة lambda وقاعدة بيانات mongo مستضافة في كل من vpc أو كليهما في EC2 classic؟

لا ، لقد قمت بنشر ASP Net Core إلى AWS Lambda ،
لكن MongoDB مستضاف على Mongo Atlas Service (https://www.mongodb.com/cloud/atlas)

لذلك يحتاج My ASP NET إلى الوصول إليه
المنفذ 27017 في * .mongodb.net

كيف يمكنني تحرير serveless.template الخاص بي للسماح بهذا الاتصال الصادر؟

هل لامدا الخاص بك في vpc بدون اتصال بالإنترنت؟ هل يمكنك الوصول إلى www.google.com؟

لم أجرب أطلس المونغو أبدًا.

TonyHenrique يبدو أنه مشكلة في سلسلة الاتصال لكني طلبت من أحد أعضاء الفريق التأكيد

TonyHenrique أؤكد أنه يبدو وكأنه مشكلة في سلسلة الاتصال. أين قمت بتكوينه في الكود الخاص بك والأهم من ذلك ، ما القيمة التي قمت بتعيينها له؟ (يجب عليك إخفاء بيانات اعتماد المصادقة في سلسلة الاتصال هذه إذا كنت تخطط للصقها هنا).

قيمة "Unspecified/cluster0-shard-00-00-3lmjx.mongodb.net:27017" هي العلامة الحمراء هنا لذا علينا أن نعرف من أين تقوم دالة Lambda باسترداد هذه المعلومات من. أود أن أقترح عليك الاتصال بي مباشرة على Slack بعد انضمامك إلى شبكة مجتمع Slack على https://community-slack.mongodb.com

الاتصال لا يحتوي على "غير محدد"

يظهر فقط على خطأ AWS. أعلم أيضًا أنه ليس اتصالًا خاطئًا ، لأنه يعمل محليًا ، وكذلك على Azure. يظهر هذا الخطأ فقط على AWS.

الخطأ هو خطأ مهلة. يبدو أنه مشكلة في جدار الحماية.

أوصيكTonyHenrique بالذهاب إلى slackrlondner المذكور أو فتح jira بدعم MongoDB https://jira.mongodb.org

هل فتحت القائمة البيضاء لاتصال lambda الخاص بك في Atlas؟

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

إنها ليست مشكلة في MongoDB ، فهي تعمل بشكل جيد على Azure والمحلي.
يتم حظر الاتصال فقط عند بدء تشغيله من AWS Lambda.

لقد راجعت أيضًا قائمة MongoDB IP البيضاء:

0.0.0.0/0 (includes your current IP address)

image

TonyHenrique def انضم إلى

لقد لاحظت في مستندات Mongo DB أنها تنص على أنه بالنسبة لبرنامج التشغيل C # على .NET Core ، لا يمكنه الاتصال بالطبقة المجانية وتكوينات أخرى للعنقود في Linux. Lambda هي بيئة Linux ، فهل يمكن أن تكون هذه هي المشكلة؟

image

إغلاق بسبب قلة النشاط

هل كان هناك حل من قبل normjjaydestro ؟ أنا أواجه هذه المشكلة الآن.

كذلك هنا. محاولة تشغيل lambda في AWS للاتصال عبر IP العام بالطبقة المجانية. لا يعمل. يبدو أن lambda تقوم بتشغيل وظيفتي على نظام Linux.

نعم ، أنا أتلقى هذه المشكلة أيضًا. الإصلاح سيكون لطيفًا :-)

كما سبق هنا. كان كل شيء يعمل بشكل رائع على Azure الخاص بـ Atlas ولكن عندما انتقلنا إلى AWS الخاص بـ Atlas في نهاية الأسبوع الماضي ، نشهد حدوث نفس المشكلة.

أي قرار؟ نفس الشيء هنا - Azure يعمل بشكل جيد ، لكن AWS ترجع:

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

ولا تستخدم طريقة api هذه قاعدة البيانات ، لذا فهذه ليست مشكلة.

كنت أتلقى هذا الخطأ.

image

أدركت أن المشكلة كانت بسبب عدم وجود حركة مرور صادرة من لامدا.

لقد قمت بتعديله ليكون في VPC الذي سمح بحركة المرور الصادرة وبدأ الاتصال بـ Mongo في العمل.

واجهت هذه المشكلة في Azure وقمت بحلها! كنت أستخدم المستوى المجاني لأطلس MongoDB.

أضف عنوان IP إلى القائمة البيضاء بالانتقال إلى وحدة التحكم واكتب: "Curl -o output.txt icanhazip.com" ثم "cat output.txt". أضف هذا الإدخال إلى القائمة البيضاء لعنوان IP الخاص بـ Mongolabs.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

matsola picture matsola  ·  4تعليقات

Kralizek picture Kralizek  ·  3تعليقات

briancullinan picture briancullinan  ·  7تعليقات

scionwest picture scionwest  ·  4تعليقات

martincostello picture martincostello  ·  4تعليقات