ALIYUN::FC::Function类型用于创建函数。函数必须从属于服务,一个服务下的所有函数都共享该服务的属性,例如:授权、日志设置等。
语法
{
"Type": "ALIYUN::FC::Function",
"Properties": {
"Code": Map,
"FunctionName": String,
"ServiceName": String,
"InstanceType": String,
"MemorySize": Integer,
"InstanceConcurrency": Integer,
"EnvironmentVariables": Map,
"Initializer": String,
"Handler": String,
"Timeout": Integer,
"InitializationTimeout": Integer,
"CustomContainerConfig": Map,
"AsyncConfiguration": Map,
"CAPort": Integer,
"Runtime": String,
"Description": String,
"Cpu": Number,
"CustomRuntimeConfig": Map,
"GpuMemorySize": Integer,
"InstanceSoftConcurrency": Integer,
"DiskSize": Integer,
"InstanceLifecycleConfig": Map,
"CustomDNS": Map,
"CustomHealthCheckConfig": Map
}
}
属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Initializer | String | 否 | 是 | 初始化函数执行的入口。 | 具体格式和语言相关。 |
InitializationTimeout | Integer | 否 | 是 | 初始化函数运行的超时时间。 | 取值范围:1~300。 单位:秒。 默认值:3。 初始化函数时,如果超该时间,则终止执行。 |
Code | Map | 否 | 是 | 指定Code ZIP包。 | 更多信息,请参见Code属性。 |
InstanceType | String | 否 | 是 | 函数实例类型。 | 取值:
|
Description | String | 否 | 是 | 函数的描述。 | 无 |
ServiceName | String | 是 | 否 | 服务名称。 | 长度为1~128个字符。 |
MemorySize | Integer | 否 | 是 | 函数的内存规格。 | 取值:
单位:MB。 |
InstanceConcurrency | Integer | 否 | 是 | 实例并发度。 | 取值范围:1~100。 |
EnvironmentVariables | Map | 否 | 是 | 函数设置的环境变量。 | 无 |
Handler | String | 是 | 是 | 函数执行的入口。 | 以Python为例,创建函数时指定的Handler为index.handler,文件名为index.py,入口函数为handler。具体格式和语言相关。 |
Timeout | Integer | 否 | 是 | 函数运行的超时时间。 | 取值范围:1~600。 默认值:3。 单位:秒。 运行函数时,如果超出该时间,则终止执行。 |
Runtime | String | 是 | 是 | 函数的运行环境。 | 目前支持nodejs6、nodejs8、nodejs10、nodejs12、python3、java8、custom、custom-container。更多信息,请参见函数计算支持的函数运行环境列表。 |
FunctionName | String | 是 | 否 | 函数名称。 | 长度为1~128个字符。以英文字母或下划线(_)开头,可以包含英文字母、下划线(_)、数字和短划线(-)。 |
CustomContainerConfig | Map | 否 | 是 | Runtime取值为custom-container时的配置,配置后可以使用自定义容器镜像执行函数。 | 更多信息,请参见CustomContainerConfig属性。 |
CAPort | Integer | 否 | 是 | 自定义HTTP Server监听的端口。 | 默认值:9000。 说明 Runtime取值为custom或custom-container时该参数生效。 |
AsyncConfiguration | Map | 否 | 是 | 异步调用配置。 | 更多信息,请参见AsyncConfiguration属性。 |
Cpu | Number | 否 | 是 | 函数的CPU规格。 | 无。 |
CustomRuntimeConfig | Map | 否 | 是 | Custom Runtime函数详细配置。 | 无。 |
GpuMemorySize | Integer | 否 | 是 | function的GPU显存规格。 | 单位为MB,为1024MB的倍数。 |
InstanceSoftConcurrency | Integer | 否 | 是 | 实例软并发度,用于优雅扩容。 | 当实例上的并发数超过软并发度时,会触发实例扩容。例如,您的实例启动较慢,可以通过设置合适的软实例并发度,提前启动实例。 取值小于或等于InstanceConcurrency。 |
DiskSize | Integer | 否 | 是 | 函数的磁盘规格。 | 单位为MB。 可选值为512 MB或10240 MB。 |
InstanceLifecycleConfig | Map | 否 | 是 | 实例生命周期函数配置。 | 更多信息,请参见InstanceLifecycleConfig属性。 |
CustomDNS | Map | 否 | 是 | 函数自定义DNS配置。 | 更多信息,请参见CustomDNS属性。 |
CustomHealthCheckConfig | Map | 否 | 是 | Custom Runtime和Custom Container自定义健康检查配置。 | 更多信息,请参见CustomHealthCheckConfig属性。 |
Code语法
"Code": {
"OssBucketName": String,
"OssObjectName": String,
"ZipFile": String,
"SourceCode": String
}
Code属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
OssBucketName | String | 否 | 是 | Code ZIP包的存储空间名称。 | 无 |
OssObjectName | String | 否 | 是 | Code ZIP包的对象名称。 | 无 |
ZipFile | String | 否 | 是 | Code ZIP包的Base64编码。 | 无 |
SourceCode | String | 否 | 是 | 函数源码。 | 最长为4096个字符。支持Node.js、PHP、Python语言。 ROS会将参数值写入一个UTF-8编码的名为index的文件。 当同时指定ZipFile、SourceCode、OssBucketName和OssObjectName时,优先级由高到低依次为:ZipFile、SourceCode、OssBucketName和OssObjectName。 |
CustomContainerConfig语法
"CustomContainerConfig": {
"Command": String,
"Args": String,
"Image": String,
"AccelerationType": String,
"InstanceId": String,
"WebServerMode": Boolean
}
CustomContainerConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Command | String | 否 | 是 | 容器启动命令。 | 取值示例: |
Args | String | 否 | 是 | 容器启动参数。 | 取值示例: |
Image | String | 是 | 是 | 容器镜像地址。 | 取值示例: |
AccelerationType | String | 否 | 是 | 是否开启镜像加速。 | 取值:
|
InstanceId | String | 否 | 是 | 容器镜像服务企业版实例的ID。 | 当容器镜像选择的是企业版实例时,您需要添加企业版实例ID,该实例的默认解析IP必须是服务所在的VPC网络地址。 说明 目前不支持使用PrivateZone产品定义域名解析。 |
WebServerMode | Boolean | 否 | 是 | 镜像运行是否为Web Server模式。 | 取值:
|
AsyncConfiguration语法
"AsyncConfiguration": {
"Destination": Map
"MaxAsyncRetryAttempts": Integer,
"MaxAsyncEventAgeInSeconds": Integer,
"StatefulInvocation": Boolean
}
AsyncConfiguration属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Destination | Map | 否 | 否 | 异步调用目标。 | 更多信息,请参见Destination属性。 |
MaxAsyncRetryAttempts | Integer | 否 | 是 | 最大重试次数。 | 无 |
MaxAsyncEventAgeInSeconds | Integer | 否 | 是 | 消息最大存活时长。 | 无 |
StatefulInvocation | Boolean | 否 | 是 | 是否开启有状态异步调用。 | 取值:
更多信息,请参见功能概览。 |
Destination语法
"Destination": {
"OnSuccess": String,
"OnFailure": String
}
Destination属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
OnSuccess | String | 否 | 是 | 当函数执行成功时,函数计算将调用该配置对应的目标。 | 无 |
OnFailure | String | 否 | 是 | 当函数执行失败(系统错误或函数内部错误)时,函数计算将调用该配置对应的目标。 | 无 |
InstanceLifecycleConfig语法
"InstanceLifecycleConfig":{
"PreFreeze": Map,
"PreStop": Map
}
InstanceLifecycleConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
PreFreeze | Map | 否 | 是 | 生命周期函数配置。 | 更多信息,请参见PreFreeze属性。 |
PreStop | Map | 否 | 是 | 生命周期函数配置。 | 更多信息,请参见PreStop属性。 |
PreStop语法
"PreStop":{
"Handler": String,
"Timeout": Integer
}
PreStop属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Handler | String | 否 | 是 | 函数执行的入口。 | 更多信息,请参见基础信息。 |
Timeout | Integer | 否 | 是 | 运行的超时时间。 | 单位为秒。 |
PreFreeze语法
"PreFreeze":{
"Handler": String,
"Timeout": Integer
}
PreFreeze属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Handler | String | 否 | 是 | 函数执行的入口。 | 更多信息,请参见基础信息。 |
Timeout | Integer | 否 | 是 | 运行的超时时间。 | 单位为秒。 |
CustomHealthCheckConfig语法
"CustomHealthCheckConfig":{
"SuccessThreshold": Integer,
"InitialDelaySeconds": Integer,
"PeriodSeconds": Integer,
"HttpGetUrl": String,
"TimeoutSeconds": Integer,
"FailureThreshold": Integer
}
CustomHealthCheckConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
SuccessThreshold | Integer | 否 | 是 | 健康检查成功次数阈值。 | 达到该值后系统认为检查成功。 取值范围1~120。 默认值为1。 |
InitialDelaySeconds | Integer | 否 | 是 | 容器启动到发起健康检查的延迟。 | 取值范围0~120。 默认值为0。 |
PeriodSeconds | Integer | 否 | 是 | 健康检查周期。 | 取值范围1~120。 默认值为3。 |
HttpGetUrl | String | 否 | 是 | 容器自定义健康检查URL地址。 | 长度不超过2048个字符。 |
TimeoutSeconds | Integer | 否 | 是 | 健康检查超时时间。 | 取值范围1~3。 默认值为1。 |
FailureThreshold | Integer | 否 | 是 | 健康检查失败次数阈值。 | 达到该值后系统认为检查失败。 取值范围1~120。 默认值为3。 |
CustomRuntimeConfig语法
"CustomRuntimeConfig":{
"Args": List,
"Command": List,
}
CustomRuntimeConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Args | List | 否 | 是 | 启动入口命令接收的参数。 | 示例值:
|
Command | List | 否 | 是 | 启动入口命令。 | 示例值:
|
CustomDNS语法
"CustomDNS":{
"NameServers": List,
"DnsOptions": List,
"Searches": List
}
CustomDNS属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
NameServers | List | 否 | 是 | DNS服务器的IP地址。 | 无 |
DnsOptions | List | 否 | 是 |
| 无 |
Searches | List | 否 | 是 | DNS搜索域值。 | 无 |
DnsOptions语法
"DnsOptions":{
"Value": String,
"Name": String,
}
DnsOptions属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Value | String | 否 | 是 | 配置项值。 | 示例值: 2。 |
Name | String | 是 | 是 | 配置项名称。 | 示例值: ndots。 |
返回值
Fn::GetAtt
FunctionId:系统为每个函数生成的唯一ID。
ServiceName:服务名称。
ARN:函数的ARN。
FunctionName:函数名。
ServiceId:函数服务ID。
示例
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
ServiceName:
Type: String
Default: test-service
FunctionName:
Type: String
Default: test-function
Timeout:
Type: Number
Default: 60
X:
Type: Number
Y:
Type: Number
Resources:
Service:
Type: ALIYUN::FC::Service
Properties:
ServiceName:
Ref: ServiceName
Function:
Type: ALIYUN::FC::Function
Properties:
ServiceName:
Fn::GetAtt: [Service, ServiceName]
FunctionName:
Ref: FunctionName
Handler: index.handler
Runtime: python3.10
Code:
SourceCode: |
import time
import json
import requests
import logging
def handler(event, context):
logger = logging.getLogger()
event = json.loads(event)
logger.info('receive request: %s', event)
res_props = event['ResourceProperties']
result = dict(
RequestId=event['RequestId'],
LogicalResourceId=event['LogicalResourceId'],
StackId=event['StackId'],
Status='SUCCESS',
PhysicalResourceId='dummy'
)
if event['RequestType'] != 'Delete':
result['Data'] = dict(Z=res_props['X'] + res_props['Y'])
headers = {
'Content-type': 'application/json',
'Accept': 'application/json',
'Date': time.strftime('%a, %d %b %Y %X GMT', time.gmtime())
}
resp = requests.post(event['ResponseURL'], json=result, headers=headers)
resp_content = resp.json()
logger.info('response: %s', resp_content)
SimpleTest:
Type: Custom::Add
Properties:
ServiceToken:
Fn::GetAtt: [Function, ARN]
Parameters:
X:
Ref: X
Y:
Ref: Y
Timeout:
Ref: Timeout
Outputs:
Result:
Value:
Fn::GetAtt: [SimpleTest, Z]
{
"ROSTemplateFormatVersion": "2015-09-01",
"Parameters": {
"ServiceName": {
"Type": "String",
"Default": "test-service"
},
"FunctionName": {
"Type": "String",
"Default": "test-function"
},
"Timeout": {
"Type": "Number",
"Default": 60
},
"X": {
"Type": "Number"
},
"Y": {
"Type": "Number"
}
},
"Resources": {
"Service": {
"Type": "ALIYUN::FC::Service",
"Properties": {
"ServiceName": {
"Ref": "ServiceName"
}
}
},
"Function": {
"Type": "ALIYUN::FC::Function",
"Properties": {
"ServiceName": {
"Fn::GetAtt": [
"Service",
"ServiceName"
]
},
"FunctionName": {
"Ref": "FunctionName"
},
"Handler": "index.handler",
"Runtime": "python3.10",
"Code": {
"SourceCode": "import time\nimport json\nimport requests\nimport logging\ndef handler(event, context):\n logger = logging.getLogger()\n event = json.loads(event)\n logger.info('receive request: %s', event)\n res_props = event['ResourceProperties']\n result = dict(\n RequestId=event['RequestId'],\n LogicalResourceId=event['LogicalResourceId'],\n StackId=event['StackId'],\n Status='SUCCESS',\n PhysicalResourceId='dummy'\n )\n if event['RequestType'] != 'Delete':\n result['Data'] = dict(Z=res_props['X'] + res_props['Y'])\n headers = {\n 'Content-type': 'application/json',\n 'Accept': 'application/json',\n 'Date': time.strftime('%a, %d %b %Y %X GMT', time.gmtime())\n }\n \n resp = requests.post(event['ResponseURL'], json=result, headers=headers)\n resp_content = resp.json()\n logger.info('response: %s', resp_content)\n"
}
}
},
"SimpleTest": {
"Type": "Custom::Add",
"Properties": {
"ServiceToken": {
"Fn::GetAtt": [
"Function",
"ARN"
]
},
"Parameters": {
"X": {
"Ref": "X"
},
"Y": {
"Ref": "Y"
}
},
"Timeout": {
"Ref": "Timeout"
}
}
}
},
"Outputs": {
"Result": {
"Value": {
"Fn::GetAtt": [
"SimpleTest",
"Z"
]
}
}
}
}
关于以下操作的更多示例,请参见YAML示例。
创建函数服务
创建函数
执行函数
触发函数执行
发布版本
创建别名
创建预留实例