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给函数一个固定的文件当作函数输入,用来固定读取某些必须的文件信息。

参考文档2

容器

容器可以保存二进制文件,是主要的存储工具。容器的下一层是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 开发的更多相关文章

  1. 【好好编程-技术博客】微信小程序开发中前后端的交互

    微信小程序开发中前后端的交互 微信小程序的开发有点类似与普通网页的开发,但是也不尽然相同.小程序的主要开发语言是JavaScript,开发同普通的网页开发有很大的相似性,对于前端开发者而言,从网页开发 ...

  2. IT技术博客收藏

    1. coolshell.cn 特点: 每篇都是精品 2. 云风 特点: 3. 阮一峰的博客 特点:高精深 3. offbye涛声依旧-全端技术博客 特点: android的开发技术比较多,非常值得一 ...

  3. Mark Russinovich 的博客:Windows Azure 主机更新:原因、时间和方式

     Mark Russinovich的技术博客涵盖 Windows故障排除.技术和安全等主题. Windows Azure主机更新:原因.时间和方式 Windows Azure的计算平台(其中包括 ...

  4. [技术博客]Android 开发 Bug Log

    [技术博客] Android 开发 Bug Log 大大小小的bug,聪明的愚蠢的都有, 持续记录中...... java.lang.IllegalArgumentException: The sty ...

  5. [技术博客] 软工-Ruby on Rails 后端开发总结分享

    [技术博客] 软工-Ruby on Rails 后端开发总结分享 在这次软件编写中,我们的后端使用了Ruby on Rails (RoR)框架. Rails框架是用Ruby编写的.这意味着当我们为Ru ...

  6. Azure Functions + Azure Batch实现MP3音频转码方案

    客户需求 客户的环境是一个网络音乐播放系统,根据网络情况提供给手机用户收听各种码率的MP3歌曲,在客户没购买歌曲的情况下提供一个三十秒内的试听版本.这样一个系统非常明确地一个需求就是会定期需要将一批从 ...

  7. [技术博客] Django中文件的保存与访问

    [技术博客] Django中文件的保存与访问 在TextMarking项目开发中,数据库需要保存用户上传的文本文档. 原型设计:用户点击上传文本->保存文本->文本发送到后端保存为文件. ...

  8. 【转】【技术博客】Spark性能优化指南——高级篇

    http://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651745207&idx=1&sn=3d70d59cede236e ...

  9. [转]有哪些值得关注的技术博客(Java篇)

    有哪些值得关注的技术博客(Java篇)   大部分程序员在自学的道路上不知道走了多少坑,这个视频那个网站搞得自己晕头转向.对我个人来说我平常在学习的过程中喜欢看一些教程式的博客.这些博客的特点: 1. ...

随机推荐

  1. 2020年Acm暑期考核Hznu _2797

    题目链接:http://acm.hznu.edu.cn/OJ/problem.php?id=2797 题意:求1-N中有多少数字满足: x是正整数且无前导0. x(mod 666) = S(x). 6 ...

  2. 记录Java注解在JavaWeb中的一个应用实例

    概述 在学习注解的时候,学了个懵懵懂懂.学了JavaWeb之后,在做Demo项目的过程中,借助注解和反射实现了对页面按钮的权限控制,对于注解才算咂摸出了点味儿来. 需求 以"角色列表&quo ...

  3. C语言可变参函数分析

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  4. 利用Navicat premium实现将数据从Oracle导入到MySQL

    背景:我们给用户提供了新的直播系统,但客户之前的老系统用的数据库是Oracle,我们提供的新系统用的是MySQL 客户诉求:将老系统中的所有直播数据导入到MySQL中: 思路:我知道Navicat有数 ...

  5. 了解 Vue 的 Compsition API

    在这篇文章中,我将讲讲 Vue 的 Composition API 为什么比之前的 Options API 要好,以及它是如何工作的. Options API 有什么问题 首先,这里不是要大家放弃 O ...

  6. maven 打包和构建的Linux命令(mvn)

    maven 打包构建相关命令 命令 mvn clean package 依次执行clean.resources.compile.testResources.testCompile.test.jar(打 ...

  7. 生产中常用的du命令

    1. 介绍 du是用来查看文件或目录所占用磁盘空间的大小 du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-size][--exc ...

  8. 【oracle学习笔记02】Oracle Architecture —— Process Structure

    Oracle中有三类进程: 1 User Process 2 Server Process Server Process is a program that directly interacts wi ...

  9. kubernetes 降本增效标准指南| 资源利用率提升工具大全

    背景 公有云的发展为业务的稳定性.可拓展性.便利性带来了极大帮助.这种用租代替买.并且提供完善的技术支持和保障的服务,理应为业务带来降本增效的效果.但实际上业务上云并不意味着成本一定较少,还需适配云上 ...

  10. Spring Security Oauth2 认证(获取token/刷新token)流程(password模式)

    https://blog.csdn.net/bluuusea/article/details/80284458