首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部署在无服务器环境中时无法访问mongodb地图数据库

部署在无服务器环境中时无法访问mongodb地图数据库
EN

Stack Overflow用户
提问于 2020-08-04 07:26:27
回答 1查看 987关注 0票数 1

我在aws ec2实例中部署了我的应用程序,并且正确地设置了vpc窥视和ip白名单,一切都很好。应用程序正在运行,我能够访问我的mongodb地图集数据库。

然后我试图在无服务器环境下部署我的应用程序,我无法访问我的mongodb地图集数据库。我在aws中使用了与我的ec2服务器使用的配置相同的配置。奇怪的是,当我在本地运行我的应用程序时,我可以访问数据库。

我遗漏了什么吗?这是我的配置

代码语言:javascript
复制
# index.js
const serverless = require('serverless-http');
const express = require('express')
const app = express()

const MongoClient = require('mongodb').MongoClient


app.get('/users', async (req, res) => {
    const url = 'mongodb+srv://<username>:<password>@<cluster>/<dbname>?retryWrites=true'
    
    MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, function(err, db) {
        if (err) throw err;
        console.log(err)
        var dbo = db.db("<dbName>");
        dbo.collection("users").find({}).toArray((err, data) => {
            if (err) throw err
            res.send(data)
        })
    });
})

module.exports.handler = serverless(app)
代码语言:javascript
复制
#serverless.yml
service: gmt-api

custom:
    serverless-offline:
        port: 3000
        
provider:
  name: aws
  runtime: nodejs12.x
  stage: ${opt:stage, 'development'}
  region: ap-southeast-1
  stackName: ${self:service}-${self:provider.stage}-api
  endpointType: regional
  environment:
      NODE_ENV: ${self:provider.stage}
  iamRoleStatements:
        -   Effect: Allow
            Action:
                - logs:CreateLogGroup
                - logs:CreateLogStream
                - logs:PutLogEvents
                - ec2:CreateNetworkInterface
                - ec2:DeleteNetworkInterface
                - ec2:DescribeNetworkInterfaces
            Resource: "*"
        -   Effect: Allow
            Action:
                - elasticache:*
            Resource: "*"
        -   Effect: Allow
            Action:
                - s3:*
            Resource: "*"
  vpc:
      securityGroupIds:
          - <security group id>
      subnetIds:
          - <subnet 1>
          - <subnet 2>
          - <subnet 3>

functions:
  app:
    wampup: true
    handler: index.handler
    name: ${self:service}-${opt:stage, self:provider.stage}-serverless
    events:
      - http: ANY /
      - http: 'ANY {proxy+}'
        cors:
            origin: '*'
            maxAge: 86400
            headers:
                - Content-Type
                - X-Amz-Date
                - Authorization
                - X-Api-Key
                - X-Amz-Security-Token
                - X-Amz-User-Agent
            allowCredentials: false
            cacheControl: 'max-age=600, s-maxage=600, proxy-revalidate'

plugins:
  - serverless-offline
  - serverless-plugin-warmup
EN

回答 1

Stack Overflow用户

发布于 2020-08-04 07:40:58

您需要在Atlas集群和AWS函数之间设置一个网络窥视连接

此特性不适用于M0 (免费层)、M2和M5集群。

如果您使用的是空闲层,则必须为Atlas集群使用白名单0.0.0.0/0。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63242028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档