Skip to content

Latest commit

 

History

History
412 lines (291 loc) · 16 KB

2018-04-03-zh-cn.md

File metadata and controls

412 lines (291 loc) · 16 KB

好用的 serverless 工具 fun

版本 2018-04-03

本文件中的 “一定”,“不一定”,“必填”,“将要”,“最好不要”,“应该”,“不应该”,“推荐”,“可能”,和 “可选” 按照 RFC 2119 中的描述进行解释。

Serverless 的 Fun 是根据 MIT许可证 授权的。

介绍

Fun 是用于在阿里云上定义 serverless 应用的模型。

Serverless 应用是由事件触发功能组成的应用。一个典型的 serverless 应用由一个或多个由诸如向 阿里云 OSS 上传对象,在 阿里云 OTS 上执行数据操作以及 API 操作等事件触发的阿里云函数计算组成。这些函数可以独立使用。也可以利用其它资源,例如阿里云 OTS 的表和 OSS 的 buckets。最基本的 serverless 应用可以只有一个函数。

Fun 旨在与阿里云 ROS 兼容。尽管到目前为止 ROS 还不支持函数计算。但是,Fun 作为 ROS 的子集是我们的目标。

规范

格式

阿里云 Fun 用来描述一个 serverless 应用的文件有 JSONYAML 格式化的文本文件。这些文件与 ROS 模板 兼容。

阿里云 Fun 引入了几种新的资源和属性类型,可以嵌入到模板的 Resources 部分。模板可能包含所有其他模板部分,并使用 ROS 内置函数 来访问仅在运行时可用的属性。

为了在 ROS 模板中包含由阿里云 Fun 定义的对象,模板必须在文档根节点中包含一个值为 Aliyun::Serverless-2018-04-03Transform 部分。

示例:阿里云 Fun 模板

ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
  MyService:
    Type: 'Aliyun::Serverless::Service'
    Policies:
      - AliyunFCExecute # Managed Policy
      - Version: '2012-10-17' # Policy Document
        Statement:
          - Effect: Allow
            Action:
              - oss:GetObject
              - oss:GetObjectACL
            Resource: 'acs:oss:::my-bucket/*'
    MyFunction:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Handler: index.handler
        Runtime: nodejs6.10
        CodeUri: 'oss://my-bucket/function.zip'

阿里云 Fun 中的所有属性名称都是 区分大小写

Globals 部分

Globals 是 Fun 模板中的一部分,用于定义所有 serverless 功能和 API 通用的属性。所有 Aliyun :: Serverless :: FunctionAliyun :: Serverless :: Api 资源将继承这里定义的属性。

示例:

Globals:
  Service:
    Function:
      Runtime: nodejs6.10
      Timeout: 180
      Handler: index.handler
  Api:
    EndpointConfiguration: REGIONAL
    Cors: "'www.example.com'"

Resource 类型

Aliyun::Serverless::Service

创建一个 FC 服务。服务是一个函数组,绑定函数公共属性,如 RAM 执行角色.

属性
属性名称 类型 描述
ServiceName string 服务的名称。如果你不想指定该名称,将为您生成一个全局唯一的名称。 更多信息
Role string 使用一个 RAM 角色的 ARN 为函数指定执行角色。 如果忽略,将为函数创建一个默认的角色。
Policies string | string 列表 | RAM policy 文档对象 | RAM policy 文档对象 列表 这个函数需要的阿里云管理的 RAM policies 或 RAM policy 文档的名称,应该附加到该函数的默认角色上。如果设置了 Role 属性,则该属性没有意义。
Log string SLS 的 ARN
Description string 服务的描述.

Aliyun::Serverless::Function

创建一个 FC 函数和触发该函数的事件源映射。函数是一个服务的子节点。

属性
属性名称 类型 描述
Handler string 必填。 在您代码中的函数的调用入口。
Runtime string 必填。 运行时环境。
CodeUri string | OSS 位置对象 必填。 OSS Uri 或 定位到的函数代码。这个 Uri 引用的 OSS 对象必须是 FC 部署包。
FunctionName string 函数的名称。如果你不想指定该名称,将为您生成一个全局唯一的名称。 更多信息
Description string 函数的描述.
MemorySize integer 每次函数执行分配的内存大小,单位是 MB,默认为 128(MB)。
Timeout integer 函数在被终止之前可以运行的最长时间,单位是秒,默认为 3(s)
Events string 映射到 事件源对象 一个 map (字符串映射到 事件源对象),用于定义触发此函数的事件,map 的 key 只能包含字母数字字符。
返回值
Ref

当此资源的逻辑 ID 提供给 Ref 内置函数,它将返回底层 FC 函数的资源名称。

Fn::GetAtt

当资源的逻辑ID被提供给 Fn::GetAtt 内置函数,它会为此类型的指定属性返回一个值。本节列出了可用的属性。

属性名称 描述
Arn FC 函数的 ARN.

这可以与其他内置函数一起使用,例如 “Fn :: GetAtt” 、“Fn :: Sub” 和 “Fn :: Join”。

示例:Aliyun::Serverless::Function
Handler: index.js
Runtime: nodejs6.10
CodeUri: 'oss://my-code-bucket/my-function.zip'
Description: Creates thumbnails of uploaded images
MemorySize: 1024
Timeout: 15
Events:
  PhotoUpload:
    Type: OSS
    Properties:
      Bucket: my-photo-bucket

Aliyun::Serverless::Api

创建可通过 HTTPS 端点调用的阿里云 API 网关资源和方法的集合。

Aliyun::Serverless::Api 资源不需要显式添加到阿里云 serverless 应用定义模板中。这种类型的资源是通过在模板定义的 Aliyun::Serverless::Function 资源上定义的 Api 事件的联合隐式创建的,它不涉及 Aliyun::Serverless::Api 资源。应 Swagger 阿里云 API 网关资源的能力。

属性
属性名称 类型 描述
Name string API 网关 RestApi 资源的名称。
StageName string 必填。 阶段的名称,API网关用作调用统一资源标识符(URI)中的第一个路径段。
DefinitionUri string | OSS 位置对象 OSS URI 或位置描述 API 的 Swagger 文档。必须指定 DefinitionUriDefinitionBody 中的任何一个。
DefinitionBody JSON or YAML 对象 描述您的 API 的 Swagger 规范。必须指定 DefinitionUriDefinitionBody 中的任何一个。
BinaryMediaTypes string 列表 您的 API 可能返回的 MIME 类型列表。使用它来启用对 API 的二进制支持。在 MIME 类型中使用 〜1 而不是 /
Cors stringCors 配置 为所有 API 启用 CORS。指定允许作为字符串的域,或指定带有附加 Cors 配置 的字典。注意:Cors 需要 Fun 来修改您的 Swagger 定义。因此它只能用 DefinitionBody 定义的内联 swagger。
返回值
Ref

当此资源的逻辑 ID 提供给 Ref 内置函数,它会返回底层 API 网关 RestApi 的资源名称。

示例:Aliyun::Serverless::Api
StageName: prod
DefinitionUri: swagger.yml

Aliyun::Serverless::TableStore

Aliyun :: Serverless :: TableStore :: Table 资源创建 TableStore(OTS)的一个实例,

属性
属性名称 类型 描述
InstanceName string TableStore 表的名称

Aliyun::Serverless::TableStore::Table

Aliyun :: Serverless :: TableStore :: Table 资源使用主键列表创建 TableStore(OTS)表。只有通过主键访问数据时才有用。这是 TableStore 的部分功能。

属性
属性名称 类型 描述
PrimaryKeyList 主键列表 要用作表的主键的列表项的属性名称和类型。 如果不替换资源,则不能进行修改。 默认为 String 属性命名的 ID。
ProvisionedThroughput 预配吞吐量对象 读取和写入吞吐量配置信息。默认为 0 读取,每秒写入容量单位为 0。
TableName string TableStore 表的名称
返回值
Ref

当此资源的逻辑ID提供给 Ref 内置函数中,它返回底层 TableStore 的资源名称。

示例:Aliyun::Serverless::TableStore
Properties:
  PrimaryKeyList:
    - Name: id
      Type: String
  ProvisionedThroughput:
    ReadCapacityUnits: 5
    WriteCapacityUnits: 5

事件源类型

OSS

描述类型为 OSS 的事件源的对象

属性
属性名称 类型 描述
Bucket string 必填。 OSS bucket 名称。
Events string | string 的列表 必填。 有关 OSS 事件类型有效值,请参阅 阿里云 OSS 支持的 事件类型
Filter OSS 对象过滤器 用于过滤事件的规则。
示例:OSS 事件源对象
Type: OSS
Properties:
  Bucket: my-photo-bucket
  Events: oss:ObjectCreated:*

OTS

描述类型为 OTS 的事件源的对象。

属性
属性名称 类型 描述
Stream string 必填。 OTS 流的 ARN。
示例:OTS 事件源对象
Type: OTS
Properties:
  Stream: acs:ots:cn-hangzhou:123456789012:instance/test_instance/table/test_table

Api

描述类型为 Api 的事件源的对象。

如果定义了 Aliyun :: Serverless :: Api 资源,则路径和方法值必须对应于 API的 Swagger 定义中的操作。如果没有定义 Aliyun :: Serverless :: Api,则函数输入和输出表示 HTTP 请求和 HTTP 响应。例如,使用 JavaScript API,响应的状态码和主体可以通过返回一个带有statusCodebody 键的对象来控制。

属性
属性名称 类型 描述
Path string 必填。 为此函数调用的 Uri 路径。必须以 / 开头。
Method string 必填。 为此函数调用的 HTTP 方法。
RestApiId string 必须包含具有给定路径和方法的操作的 RestApi 资源的标识符。通常,这设置为 Ref 在此模板中定义的一个 Aliyun :: Serverless :: Api 资源。如果未定义,则使用生成的 Swagger 文档创建默认的 Aliyun :: Serverless :: Api 资源,该文档包含由此模板中定义的 Api 事件定义的所有路径和方法的联合,它们没有指定 RestApiId。
示例:Api 事件源对象
Type: Api
Properties:
  Path: /photos
  Method: post

Datahub

描述类型为 Datahub 的事件源的对象。

属性
属性名称 类型 描述
Topic string 必填。 阿里云 Datahub 主题的 ARN。
StartingPosition string 必填。 值必须是 OLDESTLATESTSYSTEM_TIME 其中之一。
StaringTime datetime 如果 StartingPosition 的值是 SYSTEM_TIME ,则是必需的。时间格式为 YYYY-MM-DD hh:mm
BatchSize integer 每个函数调用要处理的最大流记录数。
示例:Datahub 事件源对象
Type: Datahub
Properties:
  Topic: acs:dhs:cn-hangzhou:123456789012:projects/my-prj/topics/my-tpc
  StartingPosition: TRIM_HORIZON
  BatchSize: 10

Property 类型

事件源对象

描述触发函数的事件源的对象。

属性
属性名称 类型 描述
Type string 必填。 事件类型。 事件源类型包括 'OSS','Api','OTS' ,'Datahub'。有关所有类型的更多信息, 请参阅 事件源类型
Properties * 必填。 描述此事件映射属性的对象。必须符合定义的 类型 。有关所有类型的更多信息,请参阅 事件源类型
示例:事件源对象
Type: OSS
Properties:
  Bucket: my-photo-bucket
Type: Api

主键列表

描述主键属性的对象列表。

属性
属性名称 类型 描述
Name string 主键的属性名称。默认为id
Type string 主键的属性类型。必须是 StringNumberBinary 中的一个。
示例:主键列表
Properties:
  PrimaryKeyList:
    - Name: id
      Type: String

预配吞吐量对象

属性
属性名称 类型 描述
ReadCapacityUnits number 在阿里云表格存储(OTS)平衡负载之前,为指定的表设置每秒所需项目的最少一致读取次数(最大大小为 4KB)。
WriteCapacityUnits number 在阿里云表格存储(OTS)平衡负载之前,为指定表设置每秒所需项目的最小一致写入次数(最大大小为 4KB)。
示例:预配吞吐量对象
Properties:
  ProvisionedThroughput:
    ReadCapacityUnits: 5
    WriteCapacityUnits: 5

数据类型

OSS 位置对象

将 OSS 对象的位置指定为包含 BucketKey 和可选的 Version 属性的字典。

示例:

CodeUri:
  Bucket: mybucket-name
  Key: code.zip
  Version: 121212

Cors 配置

为 APIs 开启并配置 CORS。 开启 CORS 将允许你的 APIs 被其他域名调用。 假设你想允许你的 API 从域名 'www.example.com' 中调用。

Cors:
  AllowMethods: 可选。 包含要允许的 HTTP 方法的字符串。
  # 例如 "'GET,POST,DELETE'"。如果您省略此属性,则 SAM 将自动允许为每个 API 配置的所有方法。
  # 查看 [HTTP 规范](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods) 更多关于值的细节。
  AllowHeaders: 可选。 允许 headers 的字符串
  # 例如 "'X-Forwarded-For'"。查看 [HTTP 规范](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers) 更多关于值的细节。

  AllowOrigin: 必填。 允许 origin 的字符串。
  # 例如 "'www.example.com'"。 查看 [HTTP Spec](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin) 更多关于值的细节。

  MaxAge: 可选。 包含缓存 CORS 预检请求的秒数的字符串。
  # 例如 "'600'" 将缓存请求600秒。 查看 [HTTP 规范](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Max-Age) 更多关于值的细节。

注意:HTTP 规范要求允许属性的值为带引号的字符串。所以不要忘记值中的额外引号。即。 "'www.example.com'" 是正确的,而 "www.example.com" 是错误的。