函数计算如何访问 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…

Vue自定义指令-实时时间转换指令 v-time开发

目录 前言1. 新建html、index.js文件2. 时间转换逻辑3. 新建 time.js 文件4 总结前言 为了显示出 实时性 ,在一些社交类产品中,比如WX朋友圈或微博等地方,作者发布动态的时间会实时显示为“ 刚刚”、“ 1小时前”、“ 1天前” 等不同的格式。也就是一个相对本机时间转换后的…

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

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

uniapp H5页面打包发布

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

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

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

Vue 自定义指令的注册方式和选项参数

目录 1. 注册方法1.1 全局注册的写法1.2 局部注册的写法2. 自定义指令的选项2.1 选项2.2 钩子函数的参数1. 注册方法 ​ 自定义指令 的注册方法,分为 全局注册 和 局部注册 。 1.1 全局注册的写法 // 全局注册 Vue.directive("xxx", {

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

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

nginx绑定多个端口

有两种方法: 一、在server段写上2个Listen就可以了. listen 192.168.0.15:808; listen 192.168.0.15:8098;如上,就可以同时监听2个端口了. 二、在 nginx.conf 中配置多个个server即可 worker_processes 1;events {worker_connections 1024; }http {include …

阿里云心选-T+财务软件助力线下实体的创富转型之道

一场疫情让数字化重回大众视野。数字化意味着企业经营效率提升和风险抵御能力的加强,是后疫情时代企业不得不考虑的问题。传统加工企业多以手工统计报表、手工出入库单据作为核算依据,这种传统核算方式存在极大的风险漏洞,比如出入库统计员核…

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

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

Vue - 去除控制台“你正在开发模式下运行Vue”的警告

目录 1. 警告内容2. 解决方案1. 警告内容 调试 Vue 代码时,Console 控制台老是有警告,警告内容 文字信息如下: You are running Vue in development mode. 您正在开发模式下运行Vue。 Make sure to turn on production mode when deploying for production. 在为生产部署时…

Vue v-if,v-else-if,v-else的使用

v-else-if 要紧跟 v-if v-else要紧跟v-else-if 或 v-if 代码: <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><title>vue.js v-if语法使用 </title><script src"vue.js"></scri…

直播预告 | 企业CICD规模化落地

【直播主题】企业CICD规模化落地 【直播时间】2020年4月28日 16:00~17:00 【直播简介】 持续交付有很多的实践&#xff0c;比如自动化测试&#xff0c;交付流水线等。对于一个小团队来说&#xff0c;使用开源工具集合和一些简单的SaaS服务&#xff08;比如Github&#xff09;…

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

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

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

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

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

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

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

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

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

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