基于函数计算的钉钉回调函数接口
由于企业内部管理的需要,用到了钉钉的业务事件回调能力,正好将这个轻量级的接口使用无服务器技术来实现部署,以应对流量无规律下的动态扩展伸缩、按需使用、按量计费等需求。
阿里云函数计算版本
由于公司系统部署在阿里云,首先选择使用阿里云函数计算来实现及部署。该接口使用了JVM上语言Kotlin开发,虽然阿里云函数计算官方支持的开发语言有Java但没有Kotlin。其实无论Java或Kotlin最终部署文件都是Java Class字节码,加上Kotlin与Java良好的互操作性,实测函数计算可以完美支持Kotlin开发(个人认为任意JVM上的开发语言都是支持的)。
同时该函数使用了表格存储来持久化回调事件。表格存储是个按量计费的分布式存储,有兴趣的可以自行查阅文档了解更多。
该函数通过API网关和表格存储触发器来触发。访问日志和执行日志被存储在日志服务中。
函数的本地测试和线上部署,使用了函数计算提供的命令行工具Fun。基于Fun定义的阿里云Serverless模型实现了对函数们使用资源的声明和编排,集成Gitlab CI实现了函数的CI/CD自动化发布流程。
不涉及公司业务的代码已开源在Github,有兴趣的可以作为参考。
目前函数计算和表格存储有各自的免费配额,在业务量不大的情况下,该服务完全免费。
AWS Lambda版本
AWS Lambda是目前全球使用最为广泛的serverless服务,同时也是函数计算发展方向的引领者。
由于一些个人原因,笔者最近接触了部分AWS服务,同时尝试将钉钉回调函数移植到了AWS Lambda上。阿里云上使用的云服务改为由AWS上对应服务来实现,例如存储使用了DynamoDB,日志使用CloudWatch收集和查询。
本地测试和部署工具,使用的是SAM CLI,持续集成和持续部署使用的是AWS CodeBuild和AWS CodePipeline。此外AWS通过AWS CloudFormation提供一种非常强大的能力,可以将AWS上的各种资源通过配置声明的方式来管理(也就是现在非常热门的一个概念--Infrastructure as Code)。AWS CloudFormation会为每次一个或多个资源的变更生成ChangeSet,提供查看对比、版本管理、遇到变更错误整体回退等能力。所以,AWS版本也将该项目的CI/CD部署用到的AWS CodeBuild、AWS CodePipeline、Amazon DynamoDB等资源通过CloudFormation的配置管理起来。
配置代码段如下,
Description: Create a CodePipeline to include Github source, CodeBuild and Lambda deployment. Parameters: AppBaseName: Type: String Description: App base name Default: dingtalk-callback ArtifactStoreS3Location: Type: String Description: Name of the S3 bucket to store CodePipeline artificat. BranchName: Description: GitHub branch name Type: String Default: master RepositoryName: Description: GitHub repository name Type: String Default: dingtalk-callback-on-aws GitHubOAuthToken: Type: String NoEcho: true Resources: BuildDingtalkProject: Type: AWS::CodeBuild::Project Properties: Name: Fn::Sub: ${AppBaseName}-build-${AWS::StackName} Description: Build, test, package dingtalk callback project ServiceRole: Fn::GetAtt: [ CodeBuildRole, Arn ] Artifacts: Type: S3 Location: Ref: ArtifactStoreS3Location Name: Fn::Sub: ${AppBaseName}-build-${AWS::StackName} NamespaceType: BUILD_ID Path: Fn::Sub: ${AppBaseName}/artifacts Packaging: NONE OverrideArtifactName: true EncryptionDisabled: true Environment: Type: LINUX_CONTAINER ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/java:openjdk-11 PrivilegedMode: false ImagePullCredentialsType: CODEBUILD EnvironmentVariables: - Name: s3_bucket Value: Ref: ArtifactStoreS3Location Source: DingtalkCallbackPipeline: Type: 'AWS::CodePipeline::Pipeline' Properties: Name: Fn::Sub: ${AppBaseName}-pipeline-${AWS::StackName} RoleArn: Fn::GetAtt: [ CodePipelineRole, Arn ] Stages: - Name: Source Actions: - Name: SourceAction ActionTypeId: Category: Source Owner: ThirdParty Version: 1 Provider: GitHub OutputArtifacts: - Name: Fn::Sub: ${AppBaseName}-source-changed Configuration: Owner: !Ref GitHubOwner Repo: !Ref RepositoryName Branch: !Ref BranchName OAuthToken: !Ref GitHubOAuthToken PollForSourceChanges: false RunOrder: 1 - Name: Build Actions: - Name: Build_Test_Package InputArtifacts: - Name: Fn::Sub: ${AppBaseName}-source-changed ActionTypeId: Category: Build Owner: AWS Version: 1 Provider: CodeBuild OutputArtifacts: - Name: Fn::Sub: ${AppBaseName}-packaged-yml Configuration: ProjectName: Ref: BuildDingtalkProject RunOrder: 1
AWS版本完整的代码、CloudFormation配置以及部署文档可以通过这里查看。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
无服务器计算101
Serverless Computing(无服务器计算)是目前最被看好的云端计算执行模型。其最大的好处是提供分布式弹性可伸缩的计算执行环境,仅为实际使用资源付费,并且将应用维护者从常规的运维事务中解放出来,更利于专注到具体的业务上。 在主流的应用部署方式下,无论是使用云主机还是Kubernetes作为运行环境,都会有大量运维层面的事务需要考虑和处理,并且应用程序需要按照分布式程序的设计准则来应对应用的水平伸缩。同时随着云计算服务的发展和完善,云计算厂商提供了越来越多的基础服务,例如API网关、对象存储、消息队列、日志、监控等服务,函数计算可以完美的同其他云服务集成,帮助用户快速实现出生产级别的弹性可伸缩的应用。 那函数计算是什么呢?让我们一起来看看阿里云对于函数计算的定义。 阿里云函数计算是事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询、性能监控、报警等功能。借助于函数计算,您可以快速构建任何类型的应用和服务,无需管理和运维。而且,您只需要为代码实际运行所消耗的资源付费...
- 下一篇
【直播回顾】小程序云应用入门实操系列课程第二讲
直播详情:小程序云应用入门实操系列课程第二讲:https://yq.aliyun.com/articles/698244 直播时间:2019年4月18日 20:30 直播专家: 白宦成 - Linux 中国开发组组长,阿里云MVP;CSDN专家 ,在 GitChat 平台上开设了《一学就会的 WordPress 实战课》达人课;自由职业者,曾就职于网易杭州研究院。 系列课程大纲: 云应用的价值 云应用的控制介绍 云应用的使用一:Node.js 初始化 云应用的使用二:用户登录 直播回放:点击观看 扫描加入阿里云小程序云支持群观看更多直播及往期回顾 关注 ALI繁星计划 公众号 第一时间获取最新小程序云干货
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Hadoop3单机部署,实现最简伪集群
- Red5直播服务器,属于Java语言的直播服务器