温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

函数计算如何访问 Mongo 数据库

发布时间:2021-11-22 16:15:43 来源:亿速云 阅读:124 作者:柒染 栏目:云计算

这篇文章给大家介绍函数计算如何访问 Mongo 数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

函数计算(Function Compute): 函数计算 是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算为您准备好计算资源,弹性地可靠地运行任务,并提供日志查询、性能监控和报警等功能。借助函数计算,您可以快速构建任何类型的应用和服务,并且只需为任务实际消耗的资源付费。

访问 MongoDB 数据库是指在函数计算中通过编写代码调用数据库驱动库通过 TCP 协议实现对数据库进行的插入、查询等操作。通常函数计算中运行的不同函数实例之间是不共享状态的,对于结构化的数据可以通过数据库的形式进行持久化以实现状态共享。由于用户函数运行在函数计算的 VPC 中,而用户的数据库运行在用户所属的 VPC 中,所以在函数计算平台访问数据库会涉及到跨 VPC 访问的场景,下面我们先来介绍一下其工作机制。

工作机制

访问 MongoDB 的原理、工作机制与访问 Mysql 数据库完全相同,本文不再重复阐述,更详细的内容请参考 访问 Mysql 数据库 中的工作机制章节。

配置与函数编写

公共配置

创建专有网络VPC
  1. 登录 VPC控制台。

  2. 参阅 VPC  搭建专有网络 创建VPC和交换机。

创建安全组

在 安全组控制台 新建安全组,点击 创建安全组,设置安全组名称,网络类型选择 专有网络,并选择刚才创建的专有网络。

创建与配置 MongoDB 实例
  1. 创建适合业务需求的云数据库 MongoDB 版实例可以参考 云数据库 MongoDB 版。

    注意:创建云数据库 MongoDB 版实例需要选择和函数计算配置相同的 VPC 实例,可以配置和函数计算不同的可用区的交换机,因为相同的 VPC 实例下不同可用区交换机内网是互通的。

  2. 创建成功后,在实例信息页面左侧的导航栏中单击白名单设置

  3. 单击 default 区域框右侧的修改
    函数计算如何访问 Mongo 数据库

  4. 在弹出的对话框中,将函数计算所在的 VPC 网络的网段地址配置在白名单输入框中。

    1. 登录 VPC 控制台,在专有网络列表中找到应用所在的 VPC,单击该 VPC 的名称进入专有网络详情页面。

    2. 复制应用所在的 VPC 的 IPv4 网段
      函数计算如何访问 Mongo 数据库

    3. 组内白名单设置框中粘贴该 VPC 的 IPv4 网段地址,然后单击确定
      函数计算如何访问 Mongo 数据库

  5. 最后访问 MongoDB 数据库 host 为实例的内网地址,可以登录阿里云控制台查看:

    多种语言的客户端连接阿里云 MongoDB 可以参考 MongoDB 客户端连接。

    函数计算如何访问 Mongo 数据库

函数计算配置 VPC

注意:函数计算服务所在区域与公共配置中创建的资源所在区域一致。

  1. 在 函数计算控制台 创建服务。

    • 创建服务步骤请参考文章 服务的增删改查

  2. 【专有网络配置】选项中,选择您在步骤一中创建的 VPC 网络,交换机、安全组。

  3. 【权限配置】选项中,选择【新建角色】,点击【点击授权】,在角色快速创建页面,点击【同意授权】。

    • 这步的操作是授予函数计算对 ENI 的操作权限,函数计算访问 VPC 中资源需要的权限请参考文章 配置函数计算访问 VPC 内的资源

  4. 点击确定,新建服务完毕。

函数编写与调试

下面演示 Python3 开发语言访问 MongoDB 数据库函数示例创建:

使用 Fun 工具在建立存放代码和依赖模块目录下安装依赖和项目部署。

  1. 建立一个目录,用于存放代码和依赖模块,在该目录下新建 template.yml 文件,例如 /tmp/code/template.yml,内容为:

    ROSTemplateFormatVersion: '2015-09-01'
    Transform: 'Aliyun::Serverless-2018-04-03'
    Resources:
     MongoDB-test:
       Type: 'Aliyun::Serverless::Service'
       Properties:
         Description: This is MongoDB service
         Role: 'acs:ram::XXXX:role/fc-public-test'
         LogConfig:
           Project: XXX
           Logstore: XXX
         VpcConfig:
           VpcId: vpc-XXXX
           VSwitchIds:
             - vsw-XXX
           SecurityGroupId: sg-XXXX
         InternetAccess: true
       python-test:
         Type: 'Aliyun::Serverless::Function'
         Properties:
           Handler: 'index.handler'
           Runtime: python3
           Timeout: 10
           MemorySize: 128
           CodeUri: './'
  2. 在该目录下创建 Funfile 文件内容为:

    RUNTIME python3
    RUN fun-install pip install pymongo
  3. 执行fun install命令安装依赖:

     $ fun install
     using template: template.yml
     start installing function dependencies without docker
     安装过程。。。。
     Install Success
  4. 在函数根目录下新建代码文件,例如 /tmp/code/index.py,在代码中使用 pymongo :

    # -*- coding: utf-8 -*-
    import uuid
    from pymongo import MongoClient
    def handler(event, context):
         CONN_ADDR1 = 'dds-XXX.mongodb.rds.aliyuncs.com:3717'
         CONN_ADDR2 = 'dds-XXXX.mongodb.rds.aliyuncs.com:3717'
         REPLICAT_SET = 'XXX'
         username = 'XXX'
         password = 'XXXX'
         #获取mongoclient
         client = MongoClient([CONN_ADDR1, CONN_ADDR2], replicaSet=REPLICAT_SET)
         #授权. 这里的user基于admin数据库授权
         client.admin.authenticate(username, password)
         #使用test数据库的collection:testColl做例子, 插入doc, 然后根据DEMO名查找
         demo_name = 'python-' + str(uuid.uuid1())
         print ('demo_name:'+ demo_name)
         doc = dict(DEMO=demo_name, MESG="Hello ApsaraDB For MongoDB")
         doc_id = client.test.testColl.insert(doc)
         for d in client.test.testColl.find(dict(DEMO=demo_name)):
             print ('find documents:'+ str(d))
         return 'success'
  5. 使用 fun 工具部署:

     $ fun deploy
     using template: template.yml
     using region: cn-hangzhou
     using accountId: ***********3743
     using accessKeyId: ***********Ptgk
     using timeout: 60
     部署过程。。。
             function python-test deploy success
     service MongoDB-test deploy success

    登录控制台,即可看到相关的服务、函数被创建成功,且触发执行可以返回正确的结果。

通过本文介绍可以快速实现函数计算访问 Mongo 数据库。

使用函数计算带来的优势:

  1. 无需采购和管理服务器等基础设施,只需专注业务逻辑的开发,可以大幅缩短项目交付时间和人力成本;

  2. 提供日志查询、性能监控、报警等功能快速排查故障;

  3. 免运维,毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,性能优异;

  4. 成本极具竞争力;

关于函数计算如何访问 Mongo 数据库就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI