技术博客:Azure Functions + Azure Storage 开发
Azure
GitHub wiki 同步发布 传送门
Azure Functions
通过 Functions(一个事件驱动型无服务器计算平台,还可以解决复杂的业务流程问题)更加高效地进行开发。在本地构建和调试,而无需额外的设置,在云中大规模部署和操作,并使用触发器和绑定集成服务。
——Azure Functions
Azure Storage
Azure 存储平台是适用于新式数据存储方案的 Microsoft 云存储解决方案。 核心存储服务为数据对象、适用于 Azure 虚拟机(Vm)的磁盘存储、适用于云的文件系统服务、用于可靠消息传送的消息存储和 NoSQL 存储提供高度可缩放的对象存储。
——Azure Storage
注:想要使用Azure,必须有visa卡才可以注册成功!
python开发Http服务
Azure Functions提供了Http触发器,在接收到Http请求的时候函数就会被触发执行。
Azure Python开发的好处是不需要自己解析Request的Header、body等等,可以通过Azure Functions现成的接口来获取需要的数据。
目前Azure Functions的开发支持VS Code和VS Studio,笔者愿意使用轻量级的编辑器,所以选择了VS Code开发,不过VS Studio应该差不了太多的。
似乎还有一个CLI版本,但是因为笔者不熟悉,感兴趣的可以自行探索——传送门
接下来用一个例子介绍:
喜欢英文可以直接阅读参考文档
环境配置
- Azure account: 使用visa卡注册,可以获得一年的免费使用权(一定程度上的,你懂的)以及价值200$的为期一个月的白嫖券!
- Node.js: Windows下npm需要——下载
- Python 3.8,Python 3.7,Python 3.6均可。但是笔者强烈建议使用Python 3.6,笔者在开发期间遇到了各种无法调试的Bug,原因大概是因为pylint以及python版本导致的谜之BUG,但是换成了3.6后暂时清爽。不过如果你使用较高版本没有问题,那么说明BUG已经被修复了,自然是最好的
- VS Code
- VS Code的Python extension插件
- VS Code的Azure Functions extension插件
- VS Code的Azure Storage extension插件 (仅限需要使用Azure Storage)
- Azure Storage Explorer (仅限需要使用Azure Storage)
可以看到需要配置的环境还是很多的,VS Studio可能就省心很多了,下载对应的包就可以
1. 创建项目
在VS Code的左边栏会有Azure的标志,点击即可创建,第一次需要登录Azure account
创建过程有很多选择:
- 语言——笔者选择
Python - 选择Python解释器: 这个解释器用来创建项目的虚环境
**.venv**,这里需要注意的是,Python解释器的版本决定虚环境Python的版本 - 选择模板——这里选择
Http trigger - 给函数命名
- 认证级别——选择
Anonymous(匿名)即可 - 选择怎么打开项目——选择
Add to workspace添加到工作区
2. 在本地运行
按
F5运行运行成功会会出现下面的图片

使用浏览器访问链接即可
3. 把代码推送到Azure上
在VS Code的Azure插件处登录,然后点击部署按钮:

在VS Code出现的提示中选择:
- 选择推送代码的文件夹
- 选择Azure Storage的订阅(需要先申请一个订阅)
- 选择Azure的Functions App,这里点击
+ create new Function App - 给Functions App起名字
- 选择运行时版本——云端运行代码版本,应与你开发代码的Python版本一致
- 选择部署的地区——这里直接选择东亚
East Aisa
等待部署成功后,点击view output即可看到云端部署的代码的链接,使用浏览器就可以访问函数!

4. Azure portal
代码部署后,可以通过Azure Portal来查看并且监视函数的运行情况,通常也可以用来进行DeBug。
注:代码部署后,如果出现浏览器无法访问,是因为Azure 环境没有对外部链接开放认证,在portal中自己的Functions App下的 CORS 下配置允许访问的来源即可,一个常用的配置是直接置为 *:

Azure Storage使用
Azure Functions的功能从某种意义上说很强大,但是同时也有一定的不方便性。如果想要在函数中操作文件等必须借助Azure Storage,因此下面简单介绍一下
这里还有一个坑,笔者在后面会详细说明
Azure Storage是一个存储的云服务,通过订阅可以很方便的上传和下载文档。其中存储对象分为四个类别:容器、共享文件、表、队列。
每一个都有较为有趣的用法,大家可以自行探索一下,笔者只尝试过容器和队列,下面介绍一下:
队列
上面我们简单说过Azure Functions的Http trigger是一个触发器,在接收到Http请求的时候会执行函数。这里可以给函数绑定一个 队列 ,每一次函数触发执行时,都可以选择一部分信息传递给 队列 ,可以用来记录一些信息,常常是log信息。
当然,也可以在输入绑定一个 队列 ,在函数每一次被触发时,从Storage给函数一个固定的文件当作函数输入,用来固定读取某些必须的文件信息。
容器
容器可以保存二进制文件,是主要的存储工具。容器的下一层是Blob,分为三种Block Blob、Page Blob、Append Blob,这里主要说明Block Blob。
Azure Storage提供各种接口来上传和下载Blob,可以通过各种组合实现想要的逻辑,从笔者的使用感受来说,基本满足需求,但是有一些别扭倒是真的,可能也是微软独特的设计,笔者体会不太到。
因为最近一两天微软更新了 azure-storage-blob 的Python包的版本,而且禁止了之前旧版本的下载,同时API全部换了一套(导致笔者得重构,真)。
这里面最令笔者不理解的就是新版本对于Blob覆盖竟然没有支持,需要自己手动先删除再上传(还要注意文件不存在的异常),总之就是设计的很迷,不过上传和下载就到大大简化,而且类似Python的文件操作,比较容易上手。
踩坑日记
1. VS Code卡死
4月份使用的时候,Azure Core插件有很严重的Bug,在使用VS Code的调试功能时经常会卡死,往往是调试一次卡一次,体验极差,不过最近更新的版本好像解决了这一问题,笔者目前只遇到过一两次,体验渐佳!
2. VS Code更新导致Azure Functions插件的Json文件丢失而调试失败
Azure Functions在本地运行时需要加载远程的配置信息,所以Json文件的丢失导致找不到然后去更新插件,可能因为笔者网络不好,每一次都失败。
但是即使等待很长时间下载后安装也出现了问题。
这个问题,笔者的解决方案是,手动下载插件,把里面的Json文件备份,每一次VS Code更新都把Json文件复制到对应的位置,比较蠢的办法,但是好用。在Google也没有找到类似的解决办法,所以就凑活着用了。
3. 代码提醒
pylint真是个弟弟,哦,或许是他和VS Code在一起的时候是个弟弟,也或许是Azure Functions的原因
虽然因为Python语言本身的属性原因导致很多错误不会提醒,但是和pycharm的那种体验是不可比拟的。
同时Azure Functions独特的文件结构,在python中导入模块时是这样子的
from . import example #(explicit relative)
from ..shared_code import my_first_helper_function #(explicit relative)
以上会被pylint认为是错误的,但是其实在azure环境下可以处理。
所以,强迫症玩家请卸载pylint,虽然不建议就是了,因为忽略掉这些问题,pylint还是有一点点的作用的。也可能是笔者用不来吧。
4. 套接字问题
本地调试的时候下载storage文件,第二次会因为套接字被使用而直接中断,只能够重新调试。而且,每次下载后关闭调试后,得等一会才可以继续调试,否则也会出现套接字重用。
笔者分析这一问题时因为本地调试的时候配置的环境只有一个套接字(但是总感觉不应该)然后导致第二次就错误。
5. 版本更新
猝不及防,以至于突然重构,但是笔者也认识到,开发过程中需要对自己使用的主要模块进行关注,注意其更新动向,这样在一定程度上可以避免这种问题。
吐槽
- Google上的文档和相关参考较少,而且因为时效性的问题也往往无法解决问题
- 微软官方的文档也是气人
- 最新版的 azure-storage-blob 在python中甚至很多函数没有注释,得点进去自己看怎么用参数,属实
总之笔者已经被折磨的能用就行,不求甚解了!
望后来人不要轻易尝试,如果不可避免要入坑,那么希望这篇博客有一些作用吧(只求微软不会再次更新版本!)
技术博客:Azure Functions + Azure Storage 开发的更多相关文章
- 【好好编程-技术博客】微信小程序开发中前后端的交互
微信小程序开发中前后端的交互 微信小程序的开发有点类似与普通网页的开发,但是也不尽然相同.小程序的主要开发语言是JavaScript,开发同普通的网页开发有很大的相似性,对于前端开发者而言,从网页开发 ...
- IT技术博客收藏
1. coolshell.cn 特点: 每篇都是精品 2. 云风 特点: 3. 阮一峰的博客 特点:高精深 3. offbye涛声依旧-全端技术博客 特点: android的开发技术比较多,非常值得一 ...
- Mark Russinovich 的博客:Windows Azure 主机更新:原因、时间和方式
Mark Russinovich的技术博客涵盖 Windows故障排除.技术和安全等主题. Windows Azure主机更新:原因.时间和方式 Windows Azure的计算平台(其中包括 ...
- [技术博客]Android 开发 Bug Log
[技术博客] Android 开发 Bug Log 大大小小的bug,聪明的愚蠢的都有, 持续记录中...... java.lang.IllegalArgumentException: The sty ...
- [技术博客] 软工-Ruby on Rails 后端开发总结分享
[技术博客] 软工-Ruby on Rails 后端开发总结分享 在这次软件编写中,我们的后端使用了Ruby on Rails (RoR)框架. Rails框架是用Ruby编写的.这意味着当我们为Ru ...
- Azure Functions + Azure Batch实现MP3音频转码方案
客户需求 客户的环境是一个网络音乐播放系统,根据网络情况提供给手机用户收听各种码率的MP3歌曲,在客户没购买歌曲的情况下提供一个三十秒内的试听版本.这样一个系统非常明确地一个需求就是会定期需要将一批从 ...
- [技术博客] Django中文件的保存与访问
[技术博客] Django中文件的保存与访问 在TextMarking项目开发中,数据库需要保存用户上传的文本文档. 原型设计:用户点击上传文本->保存文本->文本发送到后端保存为文件. ...
- 【转】【技术博客】Spark性能优化指南——高级篇
http://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651745207&idx=1&sn=3d70d59cede236e ...
- [转]有哪些值得关注的技术博客(Java篇)
有哪些值得关注的技术博客(Java篇) 大部分程序员在自学的道路上不知道走了多少坑,这个视频那个网站搞得自己晕头转向.对我个人来说我平常在学习的过程中喜欢看一些教程式的博客.这些博客的特点: 1. ...
随机推荐
- 策略枚举:消除在项目里大批量使用if-else的正确姿势
文/朱季谦 想起刚开始接触JAVA编程的时候,若遇到大量流程判断语句,几乎满屏都是if-else语句,多得让自己都忘了哪里是头,哪里是尾,但是,纵然满屏是if-else,但彼时也没有觉得多别扭.等到编 ...
- 【Django笔记0】-Django项目创建,settings设置,运行
Django项目创建,settings设置,运行 1,项目创建 通过pip下载Django以后,在cmd中cd到想要创建项目的路径,之后输入: django-admin startproject ...
- python函数之有参装饰器
一.为什么要有有参装饰器? 来看之前的无参装饰器 # 无参装饰器 def outter(func): def wrapper(*args,**kwargs): start = time.time() ...
- mysql数据库忘记密码时如何修改密码
方法/步骤 1.进入 mysql 的 bin 目录下,打开 cmd ,在此之前关闭mysql服务,并且结束mysqld.exe进程 ...
- web编辑工具 - Brackets - 强大免费的开源跨平台Web前端开发工具IDE
简单使用可以参考: https://blog.csdn.net/melon19931226/article/details/68066971/ https://www.iplaysoft.com/ ...
- html5 video/audio 标签
一般来说推荐使用,第三方的媒体播放库[例如 videojs 等],这些库的ui界面,js控制都已写好,功能也扩展的比较丰富 ,直接参考文档使用更加的高效! 这里还是 记录一下 html 原生 vide ...
- electron项目踩坑--A JavaScript error occurred in the main process:document is not defined
前言 记录electron-vue项目开发中遇到的一个错误,运行时报错如图: 控制台报错如下: ReferenceError: document is not defined at Object.&l ...
- matlab数值类型
matlab数值类型 数值类型的分类 整数类型 整数类型有8种.上面的数字为其内存大小,如:int8,整数所占内存大小为8个字节.除了int64 和 uint64不能进行数值运算之外都可以. 类 ...
- yolov2算法浅见
因为最近在复习yolo系列的算法,就借着这个机会总结一下自己对这个算法的理解,由于是第一次写算法类的博客,文中有什么错误和行文不通的地方还希望大家指正. yolov2与yolov1有很多改变. 最重要 ...
- 超详细网站博客域名和二级域名、子域名升级HTTPS免费申请SSL证书配置nginx指南
随着互联网的飞速发展,我们的工作生活已经离不开互联网,HTTP虽然使用极为广泛, 但是存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付,网络交易等网站应用中 ...