函数计算如何访问 PostgreSQL 数据库
函數(shù)計(jì)算(Function Compute):函數(shù)計(jì)算?是事件驅(qū)動(dòng)的全托管計(jì)算服務(wù)。使用函數(shù)計(jì)算,您無需采購與管理服務(wù)器等基礎(chǔ)設(shè)施,只需編寫并上傳代碼。函數(shù)計(jì)算為您準(zhǔn)備好計(jì)算資源,彈性地可靠地運(yùn)行任務(wù),并提供日志查詢、性能監(jiān)控和報(bào)警等功能。借助函數(shù)計(jì)算,您可以快速構(gòu)建任何類型的應(yīng)用和服務(wù),并且只需為任務(wù)實(shí)際消耗的資源付費(fèi)。
訪問 PostgreSQL 數(shù)據(jù)庫是指在函數(shù)計(jì)算中通過編寫代碼調(diào)用數(shù)據(jù)庫驅(qū)動(dòng)庫通過 TCP 協(xié)議實(shí)現(xiàn)對(duì)數(shù)據(jù)庫進(jìn)行的插入、查詢等操作。通常函數(shù)計(jì)算中運(yùn)行的不同函數(shù)實(shí)例之間是不共享狀態(tài)的,對(duì)于結(jié)構(gòu)化的數(shù)據(jù)可以通過數(shù)據(jù)庫的形式進(jìn)行持久化以實(shí)現(xiàn)狀態(tài)共享。由于用戶函數(shù)運(yùn)行在函數(shù)計(jì)算的 VPC 中,而用戶的數(shù)據(jù)庫運(yùn)行在用戶所屬的 VPC 中,所以在函數(shù)計(jì)算平臺(tái)訪問數(shù)據(jù)庫會(huì)涉及到跨 VPC 訪問的場(chǎng)景,下面我們先來介紹一下其工作機(jī)制。
轉(zhuǎn)存失敗重新上傳取消
工作機(jī)制
訪問 PostgreSQL 的原理、工作機(jī)制與訪問 Mysql 數(shù)據(jù)庫完全相同,本文不再重復(fù)闡述,更詳細(xì)的內(nèi)容請(qǐng)參考?訪問 Mysql 數(shù)據(jù)庫?中的工作機(jī)制章節(jié)。
配置與函數(shù)編寫
公共配置
創(chuàng)建專有網(wǎng)絡(luò)VPC
創(chuàng)建安全組
在安全組控制臺(tái)?新建安全組,點(diǎn)擊?創(chuàng)建安全組,設(shè)置安全組名稱,網(wǎng)絡(luò)類型選擇?專有網(wǎng)絡(luò),并選擇剛才創(chuàng)建的專有網(wǎng)絡(luò)。
注意:設(shè)置安全組策略的時(shí)候,需要在出口方向放行 PostgreSQL 實(shí)例的端口和配置的 VPC 內(nèi)網(wǎng) IP 段。
創(chuàng)建與配置 PostgreSQL 實(shí)例
注意:創(chuàng)建云數(shù)據(jù)庫 PostgreSQL 版實(shí)例需要選擇和函數(shù)計(jì)算配置相同的 VPC 實(shí)例,可以配置和函數(shù)計(jì)算不同的可用區(qū)的交換機(jī),因?yàn)橄嗤?VPC 實(shí)例下不同可用區(qū)交換機(jī)內(nèi)網(wǎng)是互通的。
在彈出的對(duì)話框中,將函數(shù)計(jì)算所在的 VPC 網(wǎng)絡(luò)的網(wǎng)段地址配置在白名單輸入框中。
函數(shù)計(jì)算配置 VPC
注意:函數(shù)計(jì)算服務(wù)所在區(qū)域與公共配置中創(chuàng)建的資源所在區(qū)域一致。
在?函數(shù)計(jì)算控制臺(tái)?創(chuàng)建服務(wù)。
- 創(chuàng)建服務(wù)步驟請(qǐng)參考文章?服務(wù)的增刪改查
【權(quán)限配置】選項(xiàng)中,選擇【新建角色】,點(diǎn)擊【點(diǎn)擊授權(quán)】,在角色快速創(chuàng)建頁面,點(diǎn)擊【同意授權(quán)】。
- 這步的操作是授予函數(shù)計(jì)算對(duì) ENI 的操作權(quán)限,函數(shù)計(jì)算訪問 VPC 中資源需要的權(quán)限請(qǐng)參考文章?配置函數(shù)計(jì)算訪問 VPC 內(nèi)的資源
函數(shù)編寫與調(diào)試
下面演示 Python3 開發(fā)語言訪問 PostgreSQL 數(shù)據(jù)庫。
使用?Fun?工具在建立存放代碼和依賴模塊目錄下安裝依賴和項(xiàng)目部署。
Python3
在本地建立一個(gè)目錄,用于存放代碼和依賴模塊,在該目錄下新建 template.yml 文件,例如 /tmp/code/template.yml,內(nèi)容如下。
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: ***在該目錄下創(chuàng)建 Funfile 文件內(nèi)容如下。
RUNTIME python3 RUN fun-install pip install psycopg2執(zhí)行fun install命令安裝依賴:
$ fun install using template: template.yml start installing function dependencies without docker 安裝過程。。。。 Install Success在函數(shù)根目錄下新建代碼文件,例如 /tmp/code/index.py ,內(nèi)容如下。
# -*- 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()執(zhí)行以下命令部署函數(shù)。
$ 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登錄控制臺(tái),即可看到相關(guān)的服務(wù)、函數(shù)被創(chuàng)建成功,且觸發(fā)執(zhí)行可以返回正確的結(jié)果。
總結(jié)
通過本文介紹可以快速實(shí)現(xiàn)函數(shù)計(jì)算訪問 PostgreSQL 數(shù)據(jù)庫。
使用函數(shù)計(jì)算帶來的優(yōu)勢(shì):
“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開發(fā)者的技術(shù)圈。”
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的函数计算如何访问 PostgreSQL 数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MaxCompute问答整理之2020-
- 下一篇: “新基建”提速,工业互联网大数据发展迎新