程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么我的 AWS Lambda 节点 JS 应用程序无法访问我的 MongoDB Atlas 集群?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决为什么我的 AWS Lambda 节点 JS 应用程序无法访问我的 MongoDB Atlas 集群??

开发过程中遇到为什么我的 AWS Lambda 节点 JS 应用程序无法访问我的 MongoDB Atlas 集群?的问题如何解决?下面主要结合日常开发的经验,给出你关于为什么我的 AWS Lambda 节点 JS 应用程序无法访问我的 MongoDB Atlas 集群?的解决方法建议,希望对你解决为什么我的 AWS Lambda 节点 JS 应用程序无法访问我的 MongoDB Atlas 集群?有所启发或帮助;

上下文:

我刚刚创建了一个 Node.Js 应用程序,并在 AWS Lambda 上使用无服务器框架部署了它。

问题:

我希望该应用程序能够访问我的(免费套餐)MongoDB Atlas 集群。为此,我使用 @H_315_13@mongoose。

设置:

我有一个具有管理员访问权限的 IAM 用户。此用户已在我的 MongoDB 集群上获得授权。 我正在使用 authMechanism=MONGODB-AWS,因此使用该 IAM 用户的令牌和秘密。密码已正确“url编码”。

这是用于创建连接的一段代码:

const uri = "mongodb+srv://myIAMtoken:myIAMsecret@cluster0.tfws6.mongodb.net/DBname?authsource=%24external&authMechanism=MONGODB-AWS&retryWrites=true&w=majority"

mongoose.connect(uri,{useNewUrlParser: true,useUnifIEdtopology: true })

当我在笔记本电脑上运行此代码时,连接已建立,我可以检索所需的数据。 但是,当我在 AWS Lambda(通过无服务器)上部署完全相同的代码时,我得到了这个响应:

    message "Internal server error"

ClouDWatch 上的跟踪如下所示:

{
"errorType": "Runtime.UnhandledPromiseRejection","errormessage": "MongoError: bad auth : aws sts call has response 403","reason": {
    "errorType": "MongoError","errormessage": "bad auth : aws sts call has response 403","code": 8000,"ok": 0,"codename": "AtlasError","name": "MongoError","stack": [
        "MongoError: bad auth : aws sts call has response 403","    at messageStream.messageHandler (/var/task/node_modules/mongodb/lib/cmap/connection.Js:268:20)","    at messageStream.emit (events.Js:314:20)","    at processIncomingData (/var/task/node_modules/mongodb/lib/cmap/message_stream.Js:144:12)","    at messageStream._write (/var/task/node_modules/mongodb/lib/cmap/message_stream.Js:42:5)","    at doWrite (_stream_writable.Js:403:12)","    at writeOrBuffer (_stream_writable.Js:387:5)","    at messageStream.Writable.write (_stream_writable.Js:318:11)","    at TLSSocket.ondata (_stream_readable.Js:718:22)","    at TLSSocket.emit (events.Js:314:20)","    at addChunk (_stream_readable.Js:297:12)","    at readableAddChunk (_stream_readable.Js:272:9)","    at TLSSocket.Readable.push (_stream_readable.Js:213:10)","    at TLSWrap.onStreamRead (internal/stream_base_commons.Js:188:23)"
    ]
},"promise": {},"stack": [
    "Runtime.UnhandledPromiseRejection: MongoError: bad auth : aws sts call has response 403","    at process.<anonymous> (/var/runtime/index.Js:35:15)","    at process.emit (events.Js:314:20)","    at processpromiseRejections (internal/process/promises.Js:209:33)","    at processticksAndRejections (internal/process/task_queues.Js:98:32)"
]
}

我认为这是来自 AWS 的网络访问问题,所以我尝试获取 "http://Google.com" ,没问题,我的节点应用程序可以访问该页面并提供响应。我的应用程序可以访问互联网,但无法访问我的 MongoDB 云实例。可以从任何 IP 地址访问我的 MongoDB 集群。

这已经达到了我的知识极限:-)

解决方法

如果您使用的是 iam 类型的 mongodb 用户,则连接字符串中不需要用户名 + 密码。

const uri = "mongodb+srv://cluster0.tfws6.mongodb.net/DBNAME?authsource=$external&authMechanism=MONGODB-AWS&retryWrites=true&w=majority"

当您调用连接到 mongodb 集群的 lambda 时,它将使用的 iam 角色将是 lambda 的执行角色

"arn:aws:iam::account_ID:role/SLS_service_name-ENVIRONMENT-AWS_REGION-lambdaRole"
"arn:aws:iam::123456789012:role/awesome-service-dev-us-east-1-lambdaRole"

检查 sls 框架的默认 iam 部分: https://www.serverless.com/framework/docs/providers/aws/guide/iam/#the-default-iam-role

大佬总结

以上是大佬教程为你收集整理的为什么我的 AWS Lambda 节点 JS 应用程序无法访问我的 MongoDB Atlas 集群?全部内容,希望文章能够帮你解决为什么我的 AWS Lambda 节点 JS 应用程序无法访问我的 MongoDB Atlas 集群?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。