开发函数计算的正确姿势 —— 部署 API 网关

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。

前言

首先介绍下在本文出现的几个比较重要的概念:

函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息参考

Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考

Api 网关: API 网关(API Gateway)提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。用户只需进行简单的操作,即可快速、低成本、低风险地开放数据或服务。

函数计算提供了 HTTP 触发器,并且支持本地调试,使得通过函数计算开发一个 web 应用十分的方便。

但也存在一些场景,比如已经存在了一个 API 网关 + 函数计算的应用,想要将该应用部署到不同的 region。如果通过手工操作,这个过程会十分的繁琐,且容易出错。而通过 Fun 可以较容易的实现一键部署 API 网关 + 函数计算到所有 region。

本文,主要介绍如何通过 Fun 发布 Api 网关 + 函数计算应用。

在读本文前,建议阅读 Fun 工具相关的基础知识

注意: 本文只会附上核心的代码或配置,如果想要完整的例子,可以参考

简单的例子

编写函数代码

首先需要编写函数的代码,函数可以是一个简单的 helloworld:

exports.handler = function(event, context, callback) {
  var response = {
      isBase64Encoded: false,
      statusCode: 200,
      body: 'hellow wrold'
  };
  callback(null, response);
};

也可以是一段更复杂的程序,比如 这里 涉及到的代码。

配置 Api 网关

HelloworldGroup: # Api Group
  Type: 'Aliyun::Serverless::Api'
  Properties:
    StageName: RELEASE
    DefinitionBody:
      '/': # request path
        get: # http method
          x-aliyun-apigateway-api-name: hello_get # api name
          x-aliyun-apigateway-fc: # 当请求该 api 时,要触发的函数,
            arn: acs:fc:::services/${fc.Arn}/functions/${helloworld.Arn}/
            timeout: 3000

其中 x-aliyun-apigateway-fc 配置项中的 fc 以及 helloworld,分别为服务名、函数名,需要根据实际配置的函数进行修改。

发布

通过 Fun deploy 即可发布:

打开提示的 url 即可进行访问。

更多例子

在 Fun 项目中,提供了很多 API 网关的 demo 和文档,可以参考

使用进阶

如果已有的文档无法满足需求,比如想要配置 https、超时时间,必须按可选等参数,可以根据 API 网关的 API 文档 进行更多的配置,Fun 支持的参数包括但不限于 ApiName、Visibility、RequestConfig、RequestParameters、ServiceParameters、ServiceParametersMap 等。

如果想要通过 API 文档 编写 Fun 配置文件,就需要了解 API 与 Fun 配置的映射关系。映射规则如下:

将参数名小写,并将原来的驼峰用 - 连接,然后加上 x-aliyun-apigateway 前缀。

举例,比如对于一下几个 API 参数,映射关系分别为:

ApiName => x-aliyun-apigateway-api-name
Visibility => x-aliyun-apigateway-visibility
RequestParameters => x-aliyun-apigateway-request-parameters
ServiceParametersMap => x-aliyun-apigateway-service-parameters-map

另外,针对每一个参数,可以进一步进行更细粒度的配置,比如在 API 文档 上介绍了 RequestParameters 其实是一个 RequestParameter 的数组的字符串表示,而 RequestParameter 可进行的配置有 ApiParameterName、LocationParameterType、Required 等。

转换成 Fun 配置,只需要将首字母小写即可,比如:

ApiParameterName => apiParameterName
Location => location

映射示例

对于 RequestParameters 的配置,转换成 Fun 配置为:

x-aliyun-apigateway-request-parameters:
  - apiParameterName: 'token'
    location: 'Query'
    parameterType: 'String'
    required: 'REQUIRED'
  - apiParameterName: 'token2'
    location: 'Query'
    parameterType: 'String'
    required: 'REQUIRED'

在上面的例子中,配置了两个 Query 类型的必须按参数,其中,第一个参数名为 token,第二个为 token2。

常量参数、系统参数

根据 API 网关的文档,以及上面的映射规则,可以写出常量参数的配置如下:

x-aliyun-apigateway-request-parameters:
  - apiParameterName: 'token'
    location: 'Query'
    parameterType: 'String'
    required: 'REQUIRED'
    defaultValue: 'e'
x-aliyun-apigateway-service-parameters:
  - serviceParameterName: 'token'
    location: 'Query'
    parameterCatalog: 'CONSTANT'

同样可以写出系统参数的配置如下:

x-aliyun-apigateway-request-parameters:
  - apiParameterName: 'CaClientIp'
    location: 'Query'
    parameterType: 'String'
    required: 'REQUIRED'
x-aliyun-apigateway-service-parameters:
  - serviceParameterName: 'CaClientIp'
    location: 'Query'
    parameterCatalog: 'SYSTEM'  

改造已有的 API

如果已经存在了一个 API 网关的 API,如何快速的用 Fun 描述出来?

这里介绍一个技巧,打开 API 网关控制台,选择想要改造的 API,点击编辑,然后不做任何修改直接保存。

然后找到 ModifyApi.json 请求,可以看到 RequestParamters 等参数的配置:

image

将其按照上面的映射规则进行改写即可。

总结

本文介绍了通过 Fun 部署 API 网关以及函数计算的例子,如果应用比较简单可以直接复制这些例子的配置使用,如果提供的示例无法满足需求,可以通过本文介绍的映射规则进行自定义配置。

利用 Fun 配置 API 网关具有重复部署、多 region 部署、协同开发、版本控制管理等优点,推荐优先使用 Fun 部署 Api 网关。

目录
相关文章
|
9月前
|
监控 Cloud Native 安全
基于 API 网关践行 API First 开发实践
API First 开发模式的核心在于:以 API 为先,将其视为“头等公民”,在构建应用、服务及集成之前,应优先定义并设计 API 及其配套。API First 作为一种相对较新的开发模式,它已逐渐流行并获得业内的广泛认可。
430 166
|
8月前
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
11月前
|
监控 Serverless 云计算
探索Serverless架构:开发实践与优化策略
本文深入探讨了Serverless架构的核心概念、开发实践及优化策略。Serverless让开发者无需管理服务器即可运行代码,具有成本效益、高可扩展性和提升开发效率等优势。文章还详细介绍了函数设计、安全性、监控及性能和成本优化的最佳实践。
|
11月前
|
监控 安全 Serverless
"揭秘D2终端大会热点技术:Serverless架构最佳实践全解析,让你的开发效率翻倍,迈向技术新高峰!"
【10月更文挑战第23天】D2终端大会汇聚了众多前沿技术,其中Serverless架构备受瞩目。它让开发者无需关注服务器管理,专注于业务逻辑,提高开发效率。本文介绍了选择合适平台、设计合理函数架构、优化性能及安全监控的最佳实践,助力开发者充分挖掘Serverless潜力,推动技术发展。
389 1
|
12月前
|
监控 Serverless 云计算
探索Serverless架构:开发的未来趋势
【10月更文挑战第5天】Serverless架构,即无服务器架构,正逐渐成为云计算领域的热点。它允许开发者构建和运行应用程序而无需管理底层服务器。本文介绍了Serverless架构的基本概念、核心优势及挑战,并展示了其在事件驱动编程、微服务架构和数据流处理等场景中的应用。通过优化冷启动、使用外部存储等实战技巧,开发者可以更好地利用Serverless架构提升开发效率和应用性能。随着技术的成熟,Serverless将在未来软件开发中扮演重要角色。
|
前端开发 大数据 数据库
🔥大数据洪流下的决战:JSF 表格组件如何做到毫秒级响应?揭秘背后的性能魔法!💪
【8月更文挑战第31天】在 Web 应用中,表格组件常用于展示和操作数据,但在大数据量下性能会成瓶颈。本文介绍在 JavaServer Faces(JSF)中优化表格组件的方法,包括数据处理、分页及懒加载等技术。通过后端分页或懒加载按需加载数据,减少不必要的数据加载和优化数据库查询,并利用缓存机制减少数据库访问次数,从而提高表格组件的响应速度和整体性能。掌握这些最佳实践对开发高性能 JSF 应用至关重要。
184 0
|
存储 设计模式 运维
Angular遇上Azure Functions:探索无服务器架构下的开发实践——从在线投票系统案例深入分析前端与后端的协同工作
【8月更文挑战第31天】在现代软件开发中,无服务器架构因可扩展性和成本效益而备受青睐。本文通过构建一个在线投票应用,介绍如何结合Angular前端框架与Azure Functions后端服务,快速搭建高效、可扩展的应用系统。Angular提供响应式编程和组件化能力,适合构建动态用户界面;Azure Functions则简化了后端逻辑处理与数据存储。通过具体示例代码,详细展示了从设置Azure Functions到整合Angular前端的全过程,帮助开发者轻松上手无服务器应用开发。
119 0
|
应用服务中间件 API nginx
微服务从代码到k8s部署应有尽有系列(二、网关)
微服务从代码到k8s部署应有尽有系列(二、网关)
|
网络协议 网络虚拟化 数据中心
干货 | 集中式网关部署方式的VXLAN示例(静态方式)
干货 | 集中式网关部署方式的VXLAN示例(静态方式)
212 0
|
监控 Serverless Go
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
107 0

相关产品

  • 函数计算