Aws-lambda-dotnet: Tidak dapat terhubung ke MongoDB Atlas

Dibuat pada 16 Mar 2018  ·  24Komentar  ·  Sumber: aws/aws-lambda-dotnet

Saya menulis AWS Serverless ASP Net Core 2.0 WebAPI sederhana
Ini terhubung ke Basis Data Atlas MongoDB. Tapi itu tidak bekerja. Hal ini memberikan batas waktu.
Saya menguji secara lokal dan Berhasil. Saya menerbitkan ke Azure itu Bekerja.

Saya menduga ini disebabkan oleh firewall AWS CloudFormation .

Ketika saya menerbitkan ke AWS Serverless , itu memberikan kesalahan:

502 Bad Gateway

{
"message": "Kesalahan server internal"
}

Saya memeriksa log,

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

Bagaimana cara men-debug dan menyelesaikan ini?

Template tanpa server saya

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

Komentar yang paling membantu

Sama disini. Mencoba menjalankan lambda di AWS untuk terhubung melalui IP publik ke tingkat gratis. Tidak bekerja. Sepertinya lambda menjalankan fungsi saya di linux.

Semua 24 komentar

@TonyHenrique , ini sepertinya peran yang dijalankan lambda Anda jika

Saya memeriksa IAM dan tidak dapat menemukan opsi MongoDB di layanan, apakah ada posting blog yang menunjukkan cara terhubung ke MongoDB Atlas dari AWS Lambda ASP Net Core 2.0?

Atau bagaimana saya bisa mengedit file ini untuk mengizinkan koneksi keluar ini?

@TonyHenrique Tidak yakin pada MongoDB (mungkin koneksi internet keluar) tetapi pada dasarnya untuk Dynamo Anda hanya akan memberikan dynamoDb: * untuk mengakses semua sumber daya untuk dinamo.

Saat ini aplikasi Data sudah dikembangkan di Mongo DB,
dan perlu mengakses port 27017 di *.mongodb.net

@TonyHenrique dapatkah Anda memverifikasi apakah lambda memiliki koneksi internet keluar dan kemudian mungkin melihat lalu lintas masuk ke mongodb?

Saya menerbitkan Proyek yang sama ke Azure dan Berhasil.
Di AWS sepertinya firewall diblokir.

Bagaimana cara mengaktifkan alamat / port pada firewall agar saya dapat terhubung ke Mongo Atlas?

Apakah fungsi lambda dan database mongo dihosting di vpc atau keduanya di EC2 classic?

Tidak. Saya menerbitkan ASP Net Core ke AWS Lambda,
tetapi MongoDB di-host di Layanan Mongo Atlas (https://www.mongodb.com/cloud/atlas)

Jadi ASP NET Saya Perlu mengakses
port 27017 di *.mongodb.net

Bagaimana saya bisa mengedit template serveless.template saya untuk mengizinkan koneksi keluar ini?

Apakah lambda Anda dalam vpc tanpa akses internet? Bisakah Anda mengakses www.google.com?

Saya belum pernah mencoba mongo atlas.

@TonyHenrique sepertinya masalah string koneksi tetapi saya telah meminta anggota tim untuk mengonfirmasi

@TonyHenrique Saya mengonfirmasi sepertinya masalah string koneksi. Di mana Anda mengonfigurasinya dalam kode Anda dan yang lebih penting, nilai mana yang Anda tetapkan? (Anda harus menutupi kredensial autentikasi dalam string koneksi itu jika Anda berencana untuk menempelkannya di sini).

Nilai "Unspecified/cluster0-shard-00-00-3lmjx.mongodb.net:27017" adalah tanda merah di sini, jadi kami harus tahu dari mana fungsi Lambda Anda mengambil info ini. Saya sarankan Anda ping saya langsung di Slack setelah Anda bergabung dengan Jaringan Slack Komunitas kami di https://community-slack.mongodb.com

Sambungan tidak mengandung "Tidak ditentukan"

Itu hanya muncul pada kesalahan AWS. Saya juga tahu itu bukan koneksi yang salah, karena berfungsi secara lokal, dan juga di Azure. Hanya di AWS kesalahan ini muncul.

Kesalahannya adalah kesalahan Timeout. Sepertinya masalah Firewall.

@TonyHenrique merekomendasikan Anda pergi ke slack @rlondner yang disebutkan atau membuka jira dengan dukungan MongoDB https://jira.mongodb.org

Apakah Anda membuka daftar putih untuk koneksi lambda Anda di Atlas?

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

Ini bukan masalah MongoDB, Ini berfungsi dengan baik di Azure dan Lokal.
Koneksi hanya diblokir saat dimulai dari AWS Lambda.

Saya juga memeriksa Daftar Putih IP MongoDB:

0.0.0.0/0 (includes your current IP address)

image

@TonyHenrique def bergabung dengan kendur - kami akan melihat apakah kami dapat berbicara dengan Anda melalui itu.

Saya perhatikan di dokumen Mongo DB yang dikatakan untuk driver C# di .NET Core tidak dapat terhubung ke tingkat gratis dan beberapa konfigurasi cluster lainnya di Linux. Lambda adalah lingkungan Linux jadi mungkinkah itu masalahnya?

image

Tutup karena kurang aktivitas

Apakah pernah ada solusi @normj @jaydestro ? Saya sedang mengalami masalah ini sekarang.

Sama disini. Mencoba menjalankan lambda di AWS untuk terhubung melalui IP publik ke tingkat gratis. Tidak bekerja. Sepertinya lambda menjalankan fungsi saya di linux.

Ya saya mendapatkan masalah ini juga. Perbaikan akan menyenangkan :-)

Di sini. Semuanya bekerja dengan baik di Azure Atlas, tetapi ketika kami bermigrasi ke AWS Atlas akhir pekan lalu, kami melihat masalah yang sama terjadi.

Setiap resolusi? Hal yang sama di sini -- Azure berfungsi dengan baik, tetapi AWS kembali:

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

Dan metode api khusus ini tidak menggunakan database, jadi itu bukan masalah.

Saya mendapatkan kesalahan ini.

image

Saya menyadari masalahnya adalah karena tidak ada lalu lintas keluar dari lambda.

Saya memodifikasinya agar berada di VPC yang memungkinkan lalu lintas keluar dan koneksi ke Mongo mulai berfungsi.

Saya memiliki masalah ini di Azure dan saya menyelesaikannya! Saya menggunakan tingkat gratis atlas MongoDB.

Daftar putih IP dengan masuk ke konsol dan ketik: "Curl -o output.txt icanhazip.com" lalu "cat output.txt". Tambahkan entri ini ke daftar putih alamat IP Mongolabs Anda.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat