函数计算(Function Compute):函数计算 是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算为您准备好计算资源,弹性地可靠地运行任务,并提供日志查询、性能监控和报警等功能。借助函数计算,您能够快速构建任何类型的应用和服务,而且只需为任务实际消耗的资源付费。php
访问 SQL Server 数据库是指在函数计算中经过编写代码调用数据库驱动库经过 TCP 协议实现对数据库进行的插入、查询等操做。一般函数计算中运行的不一样函数实例之间是不共享状态的,对于结构化的数据能够经过数据库的形式进行持久化以实现状态共享。因为用户函数运行在函数计算的 VPC 中,而用户的数据库运行在用户所属的 VPC 中,因此在函数计算平台访问数据库会涉及到跨 VPC 访问的场景,下面咱们先来介绍一下其工做机制。html
访问 SQL Server 的原理、工做机制与访问 Mysql 数据库彻底相同,本文再也不重复阐述,更详细的内容请参考 访问 Mysql 数据库 中的工做机制章节。前端
在安全组控制台 新建安全组,点击 建立安全组,设置安全组名称,网络类型选择 专有网络,并选择刚才建立的专有网络。python
注意:建立云数据库 SQL Server 版实例须要选择和函数计算配置相同的 VPC 实例,能够配置和函数计算不一样的可用区的交换机,由于相同的 VPC 实例下不一样可用区交换机内网是互通的。
在弹出的对话框中,将函数计算所在的 VPC 网络的网段地址配置在白名单输入框中。算法
 3. 在**组内白名单**设置框中粘贴该 VPC 的 **IPv4 网段**地址,而后单击**肯定**。 
注意:函数计算服务所在区域与公共配置中建立的资源所在区域一致。
在 函数计算控制台 建立服务。sql
【权限配置】选项中,选择【新建角色】,点击【点击受权】,在角色快速建立页面,点击【赞成受权】。docker
下面演示 Python3 与 php7.2 开发语言访问 SQL Server 数据库函数示例建立:数据库
使用 Fun 工具在创建存放代码和依赖模块目录下安装依赖和项目部署。
创建一个目录,用于存放代码和依赖模块,在该目录下新建 template.yml 文件,例如 /tmp/code/template.yml,内容为:编程
ROSTemplateFormatVersion: '2015-09-01' Transform: 'Aliyun::Serverless-2018-04-03' Resources: SQL-Server-test: Type: 'Aliyun::Serverless::Service' Properties: Description: This is SQL-Server service Role: 'acs:ram::xxxxx:role/fc-public-test' LogConfig: Project: xxx Logstore: xxx VpcConfig: VpcId: vpc-xxx VSwitchIds:
SecurityGroupId: sg-xxx 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 pymssql ```
执行fun install
命令安装依赖:后端
$ fun install using template: template.yml start installing function dependencies without docker 安装过程。。。。 Install Success
在函数根目录下新建代码文件,例如 /tmp/code/index.py:
# -*- coding: utf-8 -*- import pymssql def handler(event, context): conn = pymssql.connect(host='rm-xxx.sqlserver.rds.aliyuncs.com', user='xxx, password='xxx', database='xxx', charset='utf8') cursor = conn.cursor() cursor.execute('SELECT * FROM inventory WHERE quantity > 152') result = '' for row in cursor: result += 'row = %r\n' % (row,) conn.close() return result
使用 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 SQL-Server-test deploy success
登陆控制台,便可看到相关的服务、函数被建立成功,且触发执行能够返回正确的结果。
创建一个目录,用于存放代码和依赖模块,在该目录下新建 template.yml 文件,例如 /tmp/code/template.yml,内容为:
ROSTemplateFormatVersion: '2015-09-01' Transform: 'Aliyun::Serverless-2018-04-03' Resources: SQL-Server-test: Type: 'Aliyun::Serverless::Service' Properties: Description: This is SQL-Server service Role: 'acs:ram::xxx:role/fc-public-test' LogConfig: Project: xxx Logstore: xxx VpcConfig: VpcId: vpc-xxx VSwitchIds:
SecurityGroupId: sg-xxx InternetAccess: true php-test: Type: 'Aliyun::Serverless::Function' Properties: Handler: 'index.handler' Runtime: php7.2 Timeout: 10 MemorySize: 128 CodeUri: './' EnvironmentVariables: ODBCINI: /code/.fun/root/etc/odbc.ini ODBCSYSINI: /code/.fun/root/opt/microsoft/msodbcsql17/etc ```
在该目录下建立 Funfile 文件内容为:
RUNTIME php7.2 RUN apt-get update && apt-get install -y apt-transport-https apt-utils RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - RUN curl https://packages.microsoft.com/config/debian/8/prod.list > /etc/apt/sources.list.d/mssql-release.list RUN fun-install apt-get install unixodbc-dev RUN fun-install apt-get install msodbcsql17
执行fun install
命令安装依赖:
$ fun install using template: template.yml start installing function dependencies without docker 安装过程。。。。 Install Success
在函数根目录下新建代码文件,例如 /tmp/code/index.php:
<?php function handler($event, $context) { try { $conn = new PDO("sqlsrv:Server=rm-xxx.sqlserver.rds.aliyuncs.com;Database=xxx","xxx","xxx"); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $conn->query("set names utf-8"); $sql="SELECT * FROM inventory WHERE quantity > 152"; $result = $conn->prepare($sql); $result->execute(); print($result); return ("Connection successed."); } catch (PDOException $e) { return ("Connection failed: " . $e->getMessage()); } }
使用 fun 工具部署:
$ fun deploy using template: template.yml using region: cn-hangzhou using accountId: ***********3743 using accessKeyId: ***********Ptgk using timeout: 60 部署过程。。。 function php-test deploy success service SQL-Server-test deploy success
登陆控制台,便可看到相关的服务、函数被建立成功,且触发执行能够返回正确的结果。
注意事项
ODBCINI: /code/.fun/root/etc/odbc.ini ODBCSYSINI: /code/.fun/root/opt/microsoft/msodbcsql17/etc 2. 执行`fun install`命令安装依赖后,修改 .fun/root/etc/odbc.ini 文件中 Driver 值指向.fun/root/opt/microsoft/msodbcsql17/lib64/目录下的文件,如图!  3. php环境中须要使用 pdo_sqlsrv 扩展编译能够参考 [函数计算 php runtime 编译非内置的扩展](https://statistics.functioncompute.com/?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%20SQL%20Server%20%E6%95%B0%E6%8D%AE%E5%BA%93&author=%E7%94%B0%E5%B0%8F%E5%8D%95&src=&url=https%3A%2F%2Fyq.aliyun.com%2Farticles%2F686367) 文档最后能够下载已经编译好的 pdo_sqlsrv 扩展。
经过本文介绍能够快速实现函数计算访问 SQL Server 数据库。
使用函数计算带来的优点:
阿里云函数服务是一个全新的,支持事件驱动编程模式的计算服务。 他帮助用户聚焦自身业务逻辑,以 Serverless的方式构建应用,快速的实现低成本,可扩展,高可用的系统,而无需考虑服务器等底层基础设施的管理。 用户可以快速的建立原型,一样的架构能随业务规模平滑伸缩。让计算变得更高效,更经济,更弹性,更可靠。不管小型创业公司,仍是大型企业,都受益其中。咱们的团队正在迅速扩张,求贤若渴。咱们想寻找这样的队友:
基本功扎实。既能阅读论文追踪业界趋势,又能快速编码解决实际问题。
严谨的,系统化的思惟能力。既能总体考虑业务机会,系统架构,运维成本等诸多因素,又能掌控设计/开发/测试/发布的完整流程,预判并控制风险。
好奇心和使命感驱动。乐于探索未知领域,不只是梦想家,也是践行者。
坚韧、乐观、自信。能在压力和困难中看到机会,让工做充满乐趣!
若是您对云计算充满热情,想要构建一个有影响力计算平台和生态体系,请加入咱们,和咱们一块儿实现梦想!
构建新一代 Serverless 计算平台,包括:
yixian.dw AT alibaba-inc.com
“ 阿里巴巴云原生技术圈关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,作最懂云原生开发者的技术圈。”