本文件中的 “一定”,“不一定”,“必填”,“将要”,“最好不要”,“应该”,“不应该”,“推荐”,“可能”,和 “可选” 按照 RFC 2119 中的描述进行解释。
Serverless 的 Fun 是根据 MIT许可证 授权的。
Fun 是用于在阿里云上定义 serverless 应用的模型。
Serverless 应用是由事件触发功能组成的应用。一个典型的 serverless 应用由一个或多个由诸如向 阿里云 OSS 上传对象,在 阿里云 OTS 上执行数据操作以及 API 操作等事件触发的阿里云函数计算组成。这些函数可以独立使用。也可以利用其它资源,例如阿里云 OTS 的表和 OSS 的 buckets。最基本的 serverless 应用可以只有一个函数。
Fun 旨在与阿里云 ROS 兼容。尽管到目前为止 ROS 还不支持函数计算。但是,Fun 作为 ROS 的子集是我们的目标。
阿里云 Fun 用来描述一个 serverless 应用的文件有 JSON 和 YAML 格式化的文本文件。这些文件与 ROS 模板 兼容。
阿里云 Fun 引入了几种新的资源和属性类型,可以嵌入到模板的 Resources 部分。模板可能包含所有其他模板部分,并使用 ROS 内置函数 来访问仅在运行时可用的属性。
为了在 ROS 模板中包含由阿里云 Fun 定义的对象,模板必须在文档根节点中包含一个值为 Aliyun::Serverless-2018-04-03
的 Transform
部分。
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 是 Fun 模板中的一部分,用于定义所有 serverless 功能和 API 通用的属性。所有 Aliyun :: Serverless :: Function
和 Aliyun :: Serverless :: Api
资源将继承这里定义的属性。
示例:
Globals:
Service:
Function:
Runtime: nodejs6.10
Timeout: 180
Handler: index.handler
Api:
EndpointConfiguration: REGIONAL
Cors: "'www.example.com'"
创建一个 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 |
服务的描述. |
创建一个 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 只能包含字母数字字符。 |
当此资源的逻辑 ID 提供给 Ref 内置函数,它将返回底层 FC 函数的资源名称。
当资源的逻辑ID被提供给 Fn::GetAtt 内置函数,它会为此类型的指定属性返回一个值。本节列出了可用的属性。
属性名称 | 描述 |
---|---|
Arn | FC 函数的 ARN. |
这可以与其他内置函数一起使用,例如 “Fn :: GetAtt” 、“Fn :: Sub” 和 “Fn :: Join”。
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
创建可通过 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 文档。必须指定 DefinitionUri 或 DefinitionBody 中的任何一个。 |
DefinitionBody | JSON or YAML 对象 |
描述您的 API 的 Swagger 规范。必须指定 DefinitionUri 或 DefinitionBody 中的任何一个。 |
BinaryMediaTypes | string 列表 |
您的 API 可能返回的 MIME 类型列表。使用它来启用对 API 的二进制支持。在 MIME 类型中使用 〜1 而不是 / 。 |
Cors | string 或 Cors 配置 |
为所有 API 启用 CORS。指定允许作为字符串的域,或指定带有附加 Cors 配置 的字典。注意:Cors 需要 Fun 来修改您的 Swagger 定义。因此它只能用 DefinitionBody 定义的内联 swagger。 |
当此资源的逻辑 ID 提供给 Ref 内置函数,它会返回底层 API 网关 RestApi 的资源名称。
StageName: prod
DefinitionUri: swagger.yml
Aliyun :: Serverless :: TableStore :: Table
资源创建 TableStore(OTS)的一个实例,
属性名称 | 类型 | 描述 |
---|---|---|
InstanceName | string |
TableStore 表的名称 |
Aliyun :: Serverless :: TableStore :: Table
资源使用主键列表创建 TableStore(OTS)表。只有通过主键访问数据时才有用。这是 TableStore 的部分功能。
属性名称 | 类型 | 描述 |
---|---|---|
PrimaryKeyList | 主键列表 | 要用作表的主键的列表项的属性名称和类型。 如果不替换资源,则不能进行修改。 默认为 String 属性命名的 ID。 |
ProvisionedThroughput | 预配吞吐量对象 | 读取和写入吞吐量配置信息。默认为 0 读取,每秒写入容量单位为 0。 |
TableName | string |
TableStore 表的名称 |
当此资源的逻辑ID提供给 Ref 内置函数中,它返回底层 TableStore 的资源名称。
Properties:
PrimaryKeyList:
- Name: id
Type: String
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
描述类型为 OSS
的事件源的对象
属性名称 | 类型 | 描述 |
---|---|---|
Bucket | string |
必填。 OSS bucket 名称。 |
Events | string | string 的列表 |
必填。 有关 OSS 事件类型有效值,请参阅 阿里云 OSS 支持的 事件类型 。 |
Filter | OSS 对象过滤器 | 用于过滤事件的规则。 |
Type: OSS
Properties:
Bucket: my-photo-bucket
Events: oss:ObjectCreated:*
描述类型为 OTS
的事件源的对象。
属性名称 | 类型 | 描述 |
---|---|---|
Stream | string |
必填。 OTS 流的 ARN。 |
Type: OTS
Properties:
Stream: acs:ots:cn-hangzhou:123456789012:instance/test_instance/table/test_table
描述类型为 Api
的事件源的对象。
如果定义了 Aliyun :: Serverless :: Api 资源,则路径和方法值必须对应于 API的 Swagger 定义中的操作。如果没有定义 Aliyun :: Serverless :: Api,则函数输入和输出表示 HTTP 请求和 HTTP 响应。例如,使用 JavaScript API,响应的状态码和主体可以通过返回一个带有statusCode
和 body
键的对象来控制。
属性名称 | 类型 | 描述 |
---|---|---|
Path | string |
必填。 为此函数调用的 Uri 路径。必须以 / 开头。 |
Method | string |
必填。 为此函数调用的 HTTP 方法。 |
RestApiId | string |
必须包含具有给定路径和方法的操作的 RestApi 资源的标识符。通常,这设置为 Ref 在此模板中定义的一个 Aliyun :: Serverless :: Api 资源。如果未定义,则使用生成的 Swagger 文档创建默认的 Aliyun :: Serverless :: Api 资源,该文档包含由此模板中定义的 Api 事件定义的所有路径和方法的联合,它们没有指定 RestApiId。 |
Type: Api
Properties:
Path: /photos
Method: post
描述类型为 Datahub
的事件源的对象。
属性名称 | 类型 | 描述 |
---|---|---|
Topic | string |
必填。 阿里云 Datahub 主题的 ARN。 |
StartingPosition | string |
必填。 值必须是 OLDEST 、 LATEST 或 SYSTEM_TIME 其中之一。 |
StaringTime | datetime |
如果 StartingPosition 的值是 SYSTEM_TIME ,则是必需的。时间格式为 YYYY-MM-DD hh:mm 。 |
BatchSize | integer |
每个函数调用要处理的最大流记录数。 |
Type: Datahub
Properties:
Topic: acs:dhs:cn-hangzhou:123456789012:projects/my-prj/topics/my-tpc
StartingPosition: TRIM_HORIZON
BatchSize: 10
描述触发函数的事件源的对象。
属性名称 | 类型 | 描述 |
---|---|---|
Type | string |
必填。 事件类型。 事件源类型包括 'OSS','Api','OTS' ,'Datahub'。有关所有类型的更多信息, 请参阅 事件源类型。 |
Properties | * | 必填。 描述此事件映射属性的对象。必须符合定义的 类型 。有关所有类型的更多信息,请参阅 事件源类型。 |
Type: OSS
Properties:
Bucket: my-photo-bucket
Type: Api
描述主键属性的对象列表。
属性名称 | 类型 | 描述 |
---|---|---|
Name | string |
主键的属性名称。默认为id 。 |
Type | string |
主键的属性类型。必须是 String ,Number 或 Binary 中的一个。 |
Properties:
PrimaryKeyList:
- Name: id
Type: String
属性名称 | 类型 | 描述 |
---|---|---|
ReadCapacityUnits | number |
在阿里云表格存储(OTS)平衡负载之前,为指定的表设置每秒所需项目的最少一致读取次数(最大大小为 4KB)。 |
WriteCapacityUnits | number |
在阿里云表格存储(OTS)平衡负载之前,为指定表设置每秒所需项目的最小一致写入次数(最大大小为 4KB)。 |
Properties:
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
将 OSS 对象的位置指定为包含 Bucket
,Key
和可选的 Version
属性的字典。
示例:
CodeUri:
Bucket: mybucket-name
Key: code.zip
Version: 121212
为 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" 是错误的。