azure api 管理_具有Azure功能的无服务器API

azure api 管理

在这篇文章中,我将研究一个非常简单的用例。 在执行部署管道时, FlexDeploy可能会产生一些应被批准或拒绝的人工任务。 例如,某人必须批准对生产环境的部署。 可以在FlexDeploy UI中或通过某些外部通信渠道来完成。 今天,我将重点介绍通过Slack批准/拒绝FlexDeploy人工任务的场景:

无服务器API


我想考虑一些要求和注意事项:

  • 我不想教FlexDeploySlack通信
  • 我不想向Slack提供FlexDeploy API的详细信息
  • 我不想向公众公开FlexDeploy API
  • 我确实希望能够在不接触FlexDeploy的情况下轻松地将Slack更改为其他内容或添加其他通信工具

基本上,我想使FlexDeploy与外部通信机制的细节脱钩。 因此,我将引入一个额外的层,即FlexDeploySlack之间的API 。 看起来无服务器范例是实现此API的一种非常有吸引力的方法。 今天,我将使用Azure Functions构建它因为……为什么不呢?

因此,从技术上讲,该解决方案的Poc版本如下所示:

无服务器API

一旦出现新的人工任务,FlexDeploy会通知无服务器API有关提供内部任务ID和任务描述的API。 有一个SaveTask函数,将提供的任务详细信息以及生成的令牌(只是一些uid)保存到Azure Table存储中 。 该令牌具有到期时间,这意味着应该在该时间之前使用它来批准/拒绝任务。

 const azure = require( 'azure-storage' );  const uuidv1 = require( 'uuid/v1' );  module.exports = async function (context, taskid) { var tableSvc = azure.createTableService( 'my_account' , 'my_key' ); var entGen = azure.TableUtilities.entityGenerator; var token = uuidv1(); var tokenEntity = { PartitionKey: entGen.String( 'tokens' ), RowKey: entGen.String(token), TaskId: entGen.String(taskid), dueDate: entGen.DateTime( new Date(Date.now() + 24 * 60 * 60 * 1000 )) };      tableSvc.insertEntity( 'tokens' ,tokenEntity, function (error, result, response) { }); return token;  }; 

保存令牌后,将调用PostToSlack函数,将消息发布到Slack通道。 SaveTaskPostTo Slack函数被编排到一个持久函数 NotifyOnTask中 ,该函数实际上是由FlexDeploy调用的

 const df = require( "durable-functions" );  module.exports = df.orchestrator(function*(context){ var task = context.df.getInput() var token = yield context.df.callActivity( "SaveTask" ,  task.taskid) return yield context.df.callActivity( "PostToSlack" ,  { "token" : token, "description" : task.description})  }); 

Slack中的消息包含两个按钮来批准和拒绝任务。

无服务器API

这些按钮指向指向ActionOnToken持久功能的webhooks

 const df = require( "durable-functions" );  module.exports = df.orchestrator(function*(context){ var input = context.df.getInput() var taskId = yield context.df.callActivity( "GetTaskId" ,  input.token) if (input.action == 'approve' ) { yield context.df.callActivity( "ApproveTask" ,  taskId) } else if (input.action == 'reject' ) { yield context.df.callActivity( "RejectTask" ,  taskId) }  }); 

ActionOnToken调用GetTaskId函数,通过给定令牌从存储中检索任务ID:

 const azure = require( 'azure-storage' );  module.exports = async function (context, token) { var tableSvc = azure.createTableService( 'my_account' , 'my_key' ); function queryTaskID(token) { return new Promise(function (resolve, reject) { tableSvc.retrieveEntity( 'tokens' , 'tokens' , token, function (error, result, response) { if (error) { reject(error) } else { resolve(result) } }); }); } var tokenEntity = await queryTaskID(token); if (tokenEntity) { var dueDate = tokenEntity.dueDate._ if (dueDate > Date.now()) { return tokenEntity.TaskId._ } }  }; 

完成后,它可以通过调用任一方法来批准或拒绝任务
ApproveTaskRejectTask函数。 这些功能依次调用FlexDeploy REST API。

 const request = require( 'sync-request' );  const fd_url = ' http://dkrlp01.flexagon:8000 ' ;  module.exports = async function (context, taskid) { var taskid = taskid; var res = request( 'PUT' , fd_url+ '/flexdeploy/rest/v1/tasks/approval/approve/' +taskid,{ });  }; 

我可以直接在云端开始开发无服务器应用程序
Azure Portal ,但是我决定实现所有功能并在本地使用它,然后再迁移到云中。 我可以做到这一点,在本地开发和测试我的功能这一事实实际上非常酷,并不是每个无服务器平台都为您提供该功能。 我在云中配置的唯一内容是
带有表的Azure Table存储帐户,用于存储我的令牌和任务详细信息。

在本地开始使用Azure Functions的便捷方法是使用
Visual Studio Code作为开发工具。 我在Mac上工作,因此我下载并安装了Mac OS X版本。VS Code就是有关扩展的,对于您正在使用的每种技术,您都将安装一个或几个扩展。 关于Azure函数也是如此。 有一个扩展:

无服务器API

完成此操作后,您将获得一个新选项卡,您可以在其中创建新的功能应用程序并开始实现您的功能:

无服务器API

在配置新项目时,向导会要求您选择一种语言,您希望该语言用于实现以下功能:

无服务器API

尽管我喜欢Java,但仍选择JavaScript是因为我想在常规函数之上实现持久函数,并且它们支持C#
F#JavaScript 。 在撰写本文时, JavaScript最接近我。

休息照常。 您可以创建函数,编写代码,调试,测试,修复,然后重新进行所有操作。 您只需单击F5,VS Code就可以在调试模式下启动整个应用程序:

无服务器API

首次启动该应用程序时,VS Code会建议您在计算机上安装函数运行时(如果没有)。 因此,基本上,假设您在笔记本电脑运行时中使用了首选语言(Node.js),则只需要具有VS Code及其功能扩展即可开始使用Azure Functions 。 它将为您完成其余的安装。

因此,一旦应用程序启动,我就可以通过调用启动整个周期的NotifyOnTask函数对其进行测试:

 curl -X POST --data '{"taskid":"8900","description":"DiPocket v.1.0.0.1 is about to be deployed to PROD"}' -H "Content-type: application/json" http: //localhost:7071/api/orchestrators/NotifyOnTask 

该应用程序的源代码可在GitHub上找到 。

好了,到目前为止, Azure Functions的总体观点是……这很好。 它只是工作。 到目前为止,在实施该解决方案时,我没有遇到任何烦人的问题(除了我犯了一些愚蠢的错误,因为我没有仔细阅读本手册)。 我一定会继续在Azure Functions上进行发布和发布,以丰富该解决方案并将其迁移到云中,并可能实现一些不同的东西。

而已!

翻译自: https://www.javacodegeeks.com/2019/03/serverless-api-azure-functions.html

azure api 管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven插件目标

插件就是打成 jar 包的 Java 类,目标其实就是指方法,代表一种功能,也就是代表执行一种任务,你可以指定具体的任务,不过目标也有自己默认的任务。

android 渐变圆形进度条_flutter好用的轮子推荐七-flutter圆形或线型进度条

前言Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。IT界著名的尼古拉斯高尔包曾说:轮子是IT进步的阶梯!热门的框架千篇一律,好用轮子万里挑一!Flutter作为这两年开始崛起的跨平台开发…

jakarta ee_Jakarta EE中的规范范围

jakarta ee使用Eclipse Foundation Specification Process (EFSP),一个开放源代码规范项目就有一个专门的提交者项目团队来创建和维护一个或多个规范。 创建和维护的周期跨越了该规范的多个版本,因此尽管各个成员可能来去去去&…

苹果雪豹操作系统正式版_Android 11 正式版发布!

整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)头图 | CSDN 下载自谷歌官网Android 11今天正式发布了!新版本主要加强了聊天气泡、安全隐私、电源菜单,以及对瀑布屏、折叠屏、双屏的支持。除了谷歌自家的Pixel 手机,一加、小米、OPPO、Realme的手机用…

Maven的单元测试没有执行的问题

今天使用 Maven 的单元测试,正常导入以下的类 org.junit.Assert; org.junit.After; org.junit.Before; org.junit.Test;在项目的根目录下执行 mvn test,结果并没有执行单元测试,也是无语了。普通的 Java 项目可以正常运行,但是 M…

lambda表达式优化反射_反射选择器表达式

lambda表达式优化反射Java :: Geci是一个在单元测试期间运行的代码生成器。 如果生成的代码适合源代码的实际版本,则测试不会失败。 如果需要进行任何修改,则测试将修改源代码并失败。 例如,存在一个需要setter和getter的新字段,然…

10个常用python标准库_【循序渐进学Python】11.常用标准库

安装完Python之后,我们也同时获得了强大的Python标准库,通过使用这些标准库可以为我们节省大量的时间。这里是一些常用标准库的简单说明。更多的标准库的说明,可以参考Python文档 sys 模块 sys模块能够访问与Python解释器紧密联系的变量和函数…

Sublime Text安装格式化xml的插件

参见:https://www.cnblogs.com/sxdcgaq8080/p/7682593.html

maven原型_创建自定义Maven原型

maven原型Maven原型是项目模板,可以帮助我们根据其类型快速创建maven入门项目 。 这是一个不费吹灰之力地引导Maven项目的好工具。 我们可以使用多种原型。 一些流行的原型包括– maven-archetype-quickstart , maven-archetype-webapp , ma…

Maven的单元测试插件maven-surefire-plugin详解

文章目录pom.xml 的配置(注意事项,非常重要)测试案例执行测试命令surefire 插件配置pom.xml 的配置(注意事项,非常重要) 1.必须引入 maven-surefire-plugin 插件,否则无法使用 Maven 的测试功能…

mysql启动命令 windows_Windows下Nginx的启动停止等基本操作命令详解

在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动、停止Nginx服务,重新载入Nginx等,下面我就进行一些简单的介绍。1、启动:C:serverginx-1.0.2>start nginx或C:serverginx-1.0.2>ngin…

警告提示:No archetype found in remote catalog. Archetype not found in any catalog

IDEA 使用 archetype(原型/模板/骨架)创建 Maven 项目时, 最后提示: No archetype found in remote catalog. Defaulting to internal catalog Archetype not found in any catalog. Falling back to central repository. Add a…

python存数据到excel_python爬取的数据--保存数据到excel

在这里用到的是xlwt import xlwt 如果还未安装此模块,可以执行下面的命令安装: pip install xlwt 接下来就是将数据列表存储到excel当中: def save_to_excel(): try: workbook xlwt.Workbook(encodingutf-8) sheet workbook.add_sheet(taob…

vm 安装jdk1.8_JDK 13:VM.events已添加到jcmd

vm 安装jdk1.8CSR( 兼容性和规范审查 ) JDK-8224601 [“提供VM.events诊断命令”]从JDK 13 Early Access Build #24 (日期为2019/6/6 )开始在JDK 13中实现,并通过增强功能JDK- 8224600 [“提供VM.events命令…

macos big sur正式版_苹果macOS Big Sur正式版发布

苹果macOS Big Sur正式版发布:支持M1原生运行iOS应用苹果macOS Big Sur正式发布并开放下载,版本号为macOS 11.0.1(20B29)苹果近期刚发布了搭载M1芯片的Mac mini、MacBook Air和MacBook Pro新机型,预装了全新的macOS Big Sur苹果表示&#xff…

Maven如何生成可执行的jar文件

参考1:https://juejin.cn/post/6844903622430425095 参考2:http://xxgblog.com/2015/08/07/maven-create-executable-jar/ 参考3:https://www.cnblogs.com/justinzhang/p/4975727.html 参考4:https://www.cnblogs.com/hafiz/p/653…

java中qrcode_如何在Java中使用QRGen创建QRCode

java中qrcode在我以前的一篇文章中 ,我们了解了如何使用Zxing Java库创建QRCode及其等效的SVG。 Zxing库不再得到积极维护,为此,Zxing库周围有一个名为QRGen的包装,该包装提供了更高级别的API和用于生成QR代码的构建器语法。 在本…

java list有序还是无序_最详细的Java学习点知识脑图,从基础到进阶,看完还有啥你不懂的...

欢迎关注专栏《Java架构筑基》——专注于Java技术的研究与分享!Java架构筑基​zhuanlan.zhihu.comJava架构筑基——专注于Java技术的研究与分享!后续文章将首发此专栏!欢迎各位Java工程师朋友投稿和关注# 链接 Java程序员福利"常用资料分…

Maven的构件坐标(GAV)

groupld 定义了项目属于哪个组,这个组往往和项目所在的组织或公司存在关联。譬如在 googlecode 上建立了一个名为 myapp 的项目,那么 groupld 就应该是 com.googlecode.myapp,如果你的公司是 htlwk,有一个项目为qpw,那…