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

背景信息

函数计算提供了HTTP触发器,并且支持本地调试,方便您通过函数计算开发Web应用,请参见HTTP触发器概述使用fun local进行本地调试。但也存在一些场景,例如已经存在一个API网关+函数计算的应用,想要将该应用部署到不同的地域。如果通过手工操作,这个过程会十分的繁琐,且容易出错。通过Funcraft可以较容易的实现一键部署API网关+函数计算到所有地域。

在通过Funcraft发布API网关和函数计算应用前,建议您先了解Funcraft工具的相关文档,请参见功能概览

说明 使用Funcraft配置API网关具有重复部署、多地域部署、协同开发、版本控制管理等优点,建议您优先使用Funcraft部署API网关。本文只提供核心的代码或配置,若您需要查看完整示例,请参见参考文档
本文涉及的名词解释如下:
  • 函数计算FC(Function Compute):函数计算是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算准备计算资源,并以弹性伸缩的方式运行您的代码,而您只需为任务实际消耗进行付费。函数计算更多信息,请参见什么是函数计算
  • Funcraft:Funcraft是一个用于支持Serverless应用部署的工具,能帮助您便捷地管理函数计算、API网关、日志服务等资源。您可以通过一个资源配置文件template.yml进行开发、构建、部署等操作。Funcraft的更多文档,请参见介绍
  • API网关:API网关(API Gateway)提供高性能、高可用的API托管服务,帮助您对外开放其部署在ECS、容器服务等阿里云产品上的应用,提供完整的API发布,维护生命周期管理等。您只需进行简单地操作,即可快速、低成本、低风险地开放数据或服务。

简单示例

  1. 您可以执行以下代码编写函数。函数既可以是一个简单的hello world,也可以是一段更复杂的程序涉及到的代码,更多信息,请参见使用函数计算做为API后端服务
    exports.handler = function(event, context, callback) {
      var response = {
          isBase64Encoded: false,
          statusCode: 200,
          body: 'hello world'
      };
      callback(null, response);
    }; 
  2. 您可以添加以下配置,配置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,分别为服务名、函数名,请您根据实际配置的函数进行修改。
  3. 您可以通过fun deploy命令完成发布,同时您也可以通过提示的URL完成访问。
    fun deploy

使用进阶

如果您想要配置更多参数,例如HTTPS、超时时间等,您可以根据API网关的API文档进行更多的配置,Funcraft支持的参数包括ApiNameVisibilityRequestConfigRequestParameterServiceParameterServiceParametersMap等。详细信息,请参见创建API

如果您需要通过API文档,编写Funcraft配置文件,您需要了解关于API与Funcraft配置的映射规则。映射规则如下:
  • 参数名需小写。
  • 原来的驼峰需用-连接。
  • 前缀需加上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文档中介绍的RequestParameter,表示RequestParameter数组的字符串,RequestParameter可进行配置的参数有ApiParameterNameLocationParameterTypeRequired等。您可以参照以下示例将RequestParameter的参数转换成Funcraft配置。
ApiParameterName => apiParameterName
Location => location            

映射示例

您可以通过以下配置将RequestParameter转换成Funcraft的配置。
x-aliyun-apigateway-request-parameters:
  - apiParameterName: 'token'
    location: 'Query'
    parameterType: 'String'
    required: 'REQUIRED'
  - apiParameterName: 'token2'
    location: 'Query'
    parameterType: 'String'
    required: 'REQUIRED' 

常量参数、系统参数

您可以根据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网关,您可以通过以下操作快速地用Funcraft描述出来。

  1. 登录API网关控制台
  2. 在左侧导航栏,选择开放API > API列表,选择目标API,单击编辑,然后不做修改直接保存。
  3. 找到ModifyApi.json请求,您可以根据映射规则修改RequestParamter等参数的配置。