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

edward-howell-ch0bdm8v4Bc-unsplash.jpg

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

访问 PostgreSQL 数据库是指在函数计算中通过编写代码调用数据库驱动库通过 TCP 协议实现对数据库进行的插入、查询等操作。通常函数计算中运行的不同函数实例之间是不共享状态的,对于结构化的数据可以通过数据库的形式进行持久化以实现状态共享。由于用户函数运行在函数计算的 VPC 中,而用户的数据库运行在用户所属的 VPC 中,所以在函数计算平台访问数据库会涉及到跨 VPC 访问的场景,下面我们先来介绍一下其工作机制。
track_ua.gif?APIVersion=0.6.0&title=Serverless%20%E8%A7%A3%E6%83%91%E2%80%94%E2%80%94%E5%87%BD%E6%95%B0%E8%AE%A1%E7%AE%97%E5%A6%82%E4%BD%95%E8%AE%BF%E9%97%AE%20PostgreSQL%20%E6%95%B0%E6%8D%AE%E5%BA%93&author=%E7%94%B0%E5%B0%8F%E5%8D%95&src=articleuploading.4e448015.gif转存失败重新上传取消

工作机制

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

配置与函数编写

公共配置

创建专有网络VPC

  1. 登录 VPC控制台。
  2. 参阅 VPC 搭建专有网络 创建VPC和交换机。

创建安全组

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

注意:设置安全组策略的时候,需要在出口方向放行 PostgreSQL 实例的端口和配置的 VPC 内网 IP 段。

创建与配置 PostgreSQL 实例

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

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

  1. 创建成功后,在实例信息页面左侧的导航栏中单击数据安全性
  2. 单击 添加白名单分组 。
    1
  3. 在弹出的对话框中,将函数计算所在的 VPC 网络的网段地址配置在白名单输入框中。

    1. 登录 VPC 控制台,在专有网络列表中找到应用所在的 VPC,单击该 VPC 的名称进入专有网络详情页面。
    2. 复制应用所在的 VPC 的 IPv4 网段
      2
    3. 组内白名单设置框中粘贴该 VPC 的 IPv4 网段地址,然后单击确定
      3
  4. 最后访问 PostgreSQL 数据库 host 为实例的内网地址,可以登录阿里云控制台查看:

    2

函数计算配置 VPC

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

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

    • 创建服务步骤请参考文章 服务的增删改查
  2. 【专有网络配置】选项中,选择您在步骤一中创建的 VPC 网络,交换机、安全组。
  3. 【权限配置】选项中,选择【新建角色】,点击【点击授权】,在角色快速创建页面,点击【同意授权】。

    • 这步的操作是授予函数计算对 ENI 的操作权限,函数计算访问 VPC 中资源需要的权限请参考文章 配置函数计算访问 VPC 内的资源
  4. 点击确定,新建服务完毕。

函数编写与调试

下面演示 Python3 开发语言访问 PostgreSQL 数据库。

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

Python3

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

    ROSTemplateFormatVersion: '2015-09-01'
    Transform: 'Aliyun::Serverless-2018-04-03'
    Resources:PostgreSQL-test:Type: 'Aliyun::Serverless::Service'Properties:Description: This is PostgreSQL serviceRole: 'acs:ram::1986114430***:role/fc-public-test'SimpleRequestVpcConfig:VpcId: vpc-****VSwitchIds:- vsw-***SecurityGroupId: sg-***InternetAccess: truepython-test:Type: 'Aliyun::Serverless::Function'Properties:Handler: 'index.handler'Initializer: 'index.initializer'Runtime: python3Timeout: 10MemorySize: 128CodeUri: './'EnvironmentVariables:HOST: pgm-bp1yawvyyu***.pg.rds.aliyuncs.comPASSWORD: Txd123**PORT: 1433DATABASE: test_123USER: ***
    
  2. 在该目录下创建 Funfile 文件内容如下。

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

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

    # -*- coding: utf-8 -*-
    import logging
    import psycopg2
    import os,sys
    logger = logging.getLogger()def getConnection():try:conn = psycopg2.connect(database = os.environ['DATABASE'],user = os.environ['USER'],password = os.environ['PASSWORD'],host = os.environ['HOST'],port = os.environ['PORT'],)return connexcept Exception as e:logger.error(e)logger.error("ERROR: Unexpected error: Could not connect to PostgreSQL instance.")sys.exit()def conditionallyCreateUsersTable():conn = getConnection()cur = conn.cursor()cur.execute('''CREATE TABLE COMPANY(ID INT PRIMARY KEY     NOT NULL,NAME           TEXT    NOT NULL,AGE            INT     NOT NULL,ADDRESS        CHAR(50),SALARY         REAL);''')conn.commit()conn.close()def initializer(context):conditionallyCreateUsersTable()def handler(event, context):try:conn = getConnection()cur = conn.cursor()cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \VALUES (1, 'Paul', 32, 'California', 20000.00 )");conn.commit()return 'successfully'finally:conn.close()
  5. 执行以下命令部署函数。

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

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

总结

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

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

  1. 无需采购和管理服务器等基础设施,只需专注业务逻辑的开发,可以大幅缩短项目交付时间和人力成本;
  2. 提供日志查询、性能监控、报警等功能快速排查故障;
  3. 免运维,毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力,性能优异;
  4. 成本极具竞争力;

“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/516234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能可穿戴迎来长续航焕新活力 出门问问TicWatch Pro 3即将国内上市

人工智能独角兽公司出门问问将于10月21日面向国内市场正式发布全新一代旗舰级全智能手表TicWatch Pro 3(4G版)。出门问问携手新浪科技举行新品线上发布会,出门问问创始人兼CEO李志飞以及出门问问研发高级总监张博将以直播形式与消费者见证Tic…

uniapp 微信小程序打包发布

文章目录一、打包小程序1. HBuilder X打包2. 小程序发行3. 点击上传4. 扫码体验5. 正式版本一、打包小程序 1. HBuilder X打包 选中项目-点击发行(U)- 小程序-(微信仅适用于uniapp)(W) 2. 小程序发行 填写微信小程序名称和微…

祝贺!两位 Apache Flink PMC 喜提 Apache Member

摘要:近期 Apache 软件基金会(以下简称 ASF )举行了一年一度的董事会选举会议,两位 Apache Flink PMC 当选为 2020 年 ASF 新成员,即 Apache Member。目前,国内(华人)近 30 位 Apach…

Iceberg 在基于 Flink 的流式数据入库场景中的应用

本文以流式数据入库的场景为基础,介绍引入 Iceberg 作为落地格式和嵌入 Flink sink 的收益,并分析了当前可实现的框架及要点。 应用场景 流式数据入库,是大数据和数据湖的典型应用场景。上游的流式数据,如日志,或增量…

uniapp H5页面打包发布

文章目录1. 打开 HBuilder2. 打开项目3. 点击发行4. 等待项目编译5. 查看路径6. 安装7. 启动1. 打开 HBuilder 2. 打开项目 打开当前要打包的项目 3. 点击发行 ,找到【网站 - PC web 或手机 H5 】 确认【网站标题】,无需【网站域名】,直…

Python 让我再次在女同学面前长脸了!(真实案例)

事情是经过这样的:晚上在家王者的时候,微信突然弹出了一条好友添加提醒,一看昵称,居然是我们大学的班花!!!这真是奇怪了,我之前连班花的微信都没加上,这次却突然主动加我…

【CDN】最近,你的APP崩了吗?

过去几个月里,#xxx崩了#这个话题频繁出现在热搜榜上,让不少程序员小哥哥瑟瑟发抖。 从疫情宅家时期著名的视频APP“三连崩”,到全面复工开课后的在线教育平台与办公软件频繁宕机,再到报复性消费引发的点餐系统接连“爆炸”&#x…

1024程序员节重要议程曝光,开源技术英雄会聊开源“真心话”

10 月 23-25 日,由 CSDN 等多家单位精心筹划的“长沙 中国 1024 程序员节”将盛大举行。程序员节活动以开源为主议题,包括:2场岳麓尖峰对话;2020 开源技术英雄大会;10 场热门技术分论坛/峰会;创意集市&…

绿网天下:上云解决系统安全和安全合规

公司简介 绿网天下(福建)网络科技股份有限公司(以下简称绿网天下)成立于2006年,总部设于中国厦门软件园生产基地。绿网天下是基于网络安全为基础的 K12 在线教育服务提供商,累计活跃用户数超千万。公司专注…

一键快速生成 Vue 的 HTML页面结构代码

目录 1. 创建配置文件2. 使用3. 配置说明4. 注意VS Code除了使用 !+Tab 在html文件中快速创建html结构代码之外,还可以自己定义代码段,这里分享如下在 Vue 环境下快速通过成 html 结构。 1. 创建配置文件 第一步 文件 ==> 首选项 ==>用户代码片段 第二步 搜索框中输…

蓝色巨人IBM全力奔赴的混合云之旅能顺利吗?

整理 | 郑丽媛头图 | CSDN下载自东方IC10 月 8 日,IBM 官方宣布,为了加速启动混合云发展战略,关注混合云的增长,目前正在计划把IT基础设施服务部门作为一家独立的上市公司分出来,形成两家上市公司。新公司暂定名为 New…

冠赢网络:游戏盾彻底解决DDoS/CC攻击

公司简介 厦门冠赢网络科技有限公司是一家高速发展的新型网络科技公司。2019年3月,冠赢网络荣任厦门市动漫游戏产业协会副会长单位;2019年5月,冠赢网络荣获“VR百强企业”称号。公司集手游、网游、VR游戏、直播平台的开发、推广、销售及运营…

腾讯位置服务地图选点这个怎么在小程序里面更新呀?

修改version https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/using.html

完美日记:保障电商大促活动平稳运行

公司简介 PerfectDiary完美日记是广州逸仙电子商务有限公司旗下美妆品牌,创立于2016年。2016年,来自哈佛大学的品牌创始人和英国时尚设计师在伦敦相遇,希望有机会把欧美彩妆风尚带回亚洲,在视觉形象上有所突破。完美日记从T台获取…

立根融资租赁:内部系统平台上云

公司介绍 立根融资租赁(上海)有限公司成立于2015年8月,注册资本11.75亿元,是广州金融控股集团成员企业,实际控制人为广州市国资委。公司深耕公用建设、旅游、医疗、教育、新能源和消费金融等多个专业领域的融资租赁业…

全球权威MLPerf基准测试再发榜,浪潮AI服务器创18项AI性能纪录

美国东部时间10月21日,全球备受瞩目的权威AI基准测试MLPerf公布今年的推理测试榜单,浪潮AI服务器NF5488A5一举创造18项性能纪录,在数据中心AI推理性能上遥遥领先其他厂商产品。 MLPerf是当前全球最具影响力的AI计算基准评测组织,…

上学帮:阿里云助力教育资讯平台防爬虫

公司简介 广州市藏星网络科技有限公司的主要产品是移动互联网应用“上学帮”,产品在各大应用市场以及微信公众号中均有上架。“上学帮”是国内领先的本地教育信息服务及交易平台,公司业务全面覆盖0~18岁中国孩子的升学择校、校外培训机构、家庭教育等领…

Flink 消息聚合处理方案

微博机器学习平台使用 Flink 实时处理用户行为日志和生成标签,并且在生成标签后写入存储系统。为了降低存储系统的 IO 负载,有批量写入的需求,同时对数据延迟也需要进行一定的控制,因此需要一种有效的消息聚合处理方案。 在本篇文…

微信“支付”页全国多地上线“出行服务”,已覆盖108城

近期,微信“支付”页面新增“出行服务”入口,作为一站式的出行服务平台,“出行服务”提供覆盖车主服务、公交出行、打车租车等多场景出行服务,目前已经在北京、广东、重庆、黑龙江、山西、福建、湖北、陕西等全国108个地级市上线。…

Flink 新场景:OLAP 引擎性能优化及应用案例

摘要:本文由阿里巴巴技术专家贺小令(晓令)分享,主要介绍 Apache Flink 新场景 OLAP 引擎,内容分为以下四部分: 背景介绍Flink OLAP 引擎案例介绍未来计划一、背景介绍 1.OLAP 及其分类 OLAP 是一种让用户可…