ALIYUN::FC3::Function类型用于创建函数计算 FC 3.0函数。
语法
{
"Type": "ALIYUN::FC3::Function",
"Properties": {
"FunctionName": String,
"Handler": String,
"Runtime": String,
"Cpu": Number,
"CustomContainerConfig": Map,
"Code": Map,
"CustomRuntimeConfig": Map,
"CustomDns": Map,
"Description": String,
"DiskSize": Integer,
"EnvironmentVariables": Map,
"GpuConfig": Map,
"InstanceLifecycleConfig": Map,
"InternetAccess": Boolean,
"InstanceConcurrency": Integer,
"Layers": List,
"LogConfig": Map,
"MemorySize": Integer,
"NasConfig": Map,
"OssMountConfig": Map,
"Role": String,
"TracingConfig": Map,
"Timeout": Integer,
"VpcConfig": Map
}
}
属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
FunctionName | String | 是 | 是 | 函数的名称。 | 只能包含字母、数字、下划线(_)和短划线(-),不能以数字、短划线(-)开头,长度范围为 1~64 个字符。 |
Handler | String | 是 | 是 | 函数执行的入口。 | 无 |
Runtime | String | 是 | 是 | 函数的运行时环境。 | 目前支持的运行环境有:nodejs8, nodejs10, nodejs12, nodejs14, nodejs16, nodejs18, nodejs20, go1, python3, python3.9, python3.10, java8, java11, php7.2, dotnetcore3.1, custom, custom.debian10, custom-container。 |
Cpu | Number | 否 | 是 | 函数的 CPU 规格。 | 单位为 vCPU,为 0.05 vCPU 的倍数。最小值为 0.05,最大值为 16。同时 cpu 和 memorySize(按 GB 算)比例要在 1:1 和 1:4 之间。 |
CustomContainerConfig | Map | 否 | 是 | 自定义容器运行时的相关配置。 | 成功配置后函数可以使用自定义容器镜像执行函数。Code 和 CustomContainerConfig 二选一。更多信息,请参见CustomContainerConfig属性。 |
Code | Map | 否 | 是 | 函数代码 ZIP 包。 | Code 和 customContainerConfig 二选一。更多信息,请参见Code属性。 |
CustomRuntimeConfig | Map | 否 | 是 | 自定义运行时配置。 | 更多信息,请参见CustomRuntimeConfig属性。 |
CustomDns | Map | 否 | 是 | 自定义 DNS 配置。 | 更多信息,请参见CustomDns属性。 |
Description | String | 否 | 是 | 函数的描述。 | 无 |
DiskSize | Integer | 否 | 是 | 函数的磁盘规格。 | 单位为 MB,可选值为 512 MB 或 10240 MB。 |
EnvironmentVariables | Map | 否 | 是 | 函数的环境变量。 | 可以在运行环境中访问设置的环境变量。更多信息,例如:
|
GpuConfig | Map | 否 | 是 | 函数 GPU 配置。 | 更多信息,请参见GpuConfig属性。 |
InstanceLifecycleConfig | Map | 否 | 是 | 实例生命周期回调方法配置。 | 更多信息,请参见InstanceLifecycleConfig属性。 |
InternetAccess | Boolean | 否 | 是 | 是否允许函数访问公网。 | 默认值为 true。 |
InstanceConcurrency | Integer | 否 | 是 | 实例最大并发度。 | 无。 |
Layers | List | 否 | 是 | 层的列表。 | 多个层会按照数组下标从大到小的顺序进行合并,下标小的层的内容会覆盖下标大的层的同名文件。例如:
|
LogConfig | Map | 否 | 是 | 日志配置。 | 函数产生的日志会被写入到配置的日志库中。更多信息,请参见LogConfig属性。 |
MemorySize | Integer | 否 | 是 | 函数的内存规格。 | 单位为 MB,内存大小为 64 MB 的倍数。最小值为 128MB,最大值为 32GB。同时 CPU 和 MemorySize(按 GB 算)比例要在 1:1 和 1:4 之间。 |
NasConfig | Map | 否 | 是 | NAS 配置。 | 配置此参数后,函数可以访问指定的 NAS 资源。更多信息,请参见NasConfig属性。 |
OssMountConfig | Map | 否 | 是 | OSS 挂载配置。 | 更多信息,请参见OssMountConfig属性。 |
Role | String | 否 | 是 | 用户授权给函数计算的 RAM 角色。 | 设置后函数计算将扮演该角色生成临时访问凭证。在函数中可以使用该角色的临时访问凭证来访问指定的阿里云服务,例如 OSS 和 OTS。 |
TracingConfig | Map | 否 | 是 | 链路追踪配置。 | 当函数计算与链路追踪集成后,您可以记录请求在函数计算的耗时时间、查看函数的冷启动时间、记录函数内部时间中的消耗等。更多信息,请参见TracingConfig属性。 |
Timeout | Integer | 否 | 是 | 函数运行的超时时间。 | 单位为秒,最小 1 秒,最大值为 86400 秒,默认值是 3 秒。函数超过这个时间后会被终止执行。 |
VpcConfig | Map | 否 | 是 | VPC 配置。 | 配置此参数后,函数可以访问指定的 VPC 资源。更多信息,请参见VpcConfig属性。 |
TracingConfig语法
"TracingConfig": {
"Type": String,
"Params": Map
}
TracingConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Type | String | 否 | 是 | 链路追踪协议类型。 | 目前只支持 Jaeger。 |
Params | Map | 否 | 是 | 链路追踪参数。 | 参数为 map[string]string,其中 key 为"endpoint",value 为您的链路追踪内网接入点。 例如 endpoint: http://tracing-analysis-dc-hz.aliyuncs.com/adapt_xxx/api/otlp/traces 。 |
VpcConfig语法
"VpcConfig": {
"VpcId": String,
"VSwitchIds": List,
"SecurityGroupId": String
}
VpcConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
VpcId | String | 否 | 是 | VPC 网络 ID。 | 无 |
VSwitchIds | List | 否 | 是 | 交换机列表。 | 无 |
SecurityGroupId | String | 否 | 是 | 安全组 ID。 | 无 |
InstanceLifecycleConfig语法
"InstanceLifecycleConfig": {
"PreStop": Map,
"Initializer": Map
}
InstanceLifecycleConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
PreStop | Map | 否 | 是 | PreStop 回调方法配置。 | 更多信息,请参见PreStop属性。 |
Initializer | Map | 否 | 是 | Initializer 回调方法配置。 | 更多信息,请参见Initializer属性。 |
PreStop语法
"PreStop": {
"Timeout": Integer,
"Handler": String
}
PreStop属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Timeout | Integer | 否 | 是 | 回调方法的超时时间。 | 单位为秒。 |
Handler | String | 否 | 是 | 回调方法的执行入口。 | 含义与请求处理程序类似。 |
Initializer语法
"Initializer": {
"Timeout": Integer,
"Handler": String
}
Initializer属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Timeout | Integer | 否 | 是 | 回调方法的超时时间。 | 单位为秒。 |
Handler | String | 否 | 是 | 回调方法的执行入口。 | 含义与请求处理程序类似。 |
CustomContainerConfig语法
"CustomContainerConfig": {
"ResolvedImageUri": String,
"AccelerationInfo": Map,
"AcrInstanceId": String,
"Entrypoint": List,
"Command": List,
"AccelerationType": String,
"Port": Integer,
"HealthCheckConfig": Map,
"Image": String
}
CustomContainerConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
ResolvedImageUri | String | 否 | 是 | 所部署的镜像的实际 digest 版本。 | 函数启动时实际使用此 digest 指定的代码版本。由 GetFunction 时返回,作为参数时无需提供。 |
AccelerationInfo | Map | 否 | 是 | 镜像加速信息。 | 更多信息,请参见AccelerationInfo属性。 |
AcrInstanceId | String | 否 | 是 | ACR 企业版镜像仓库 ID。 | 使用 ACR 企业版镜像时须传入。 |
Entrypoint | List | 否 | 是 | 容器启动命令。 | 无 |
Command | List | 否 | 是 | 容器启动参数。 | 无 |
AccelerationType | String | 否 | 是 | 是否开启镜像加速。 | Default 表示开启镜像加速,None 表示关闭镜像加速。 |
Port | Integer | 否 | 是 | 自定义容器运行时 HTTP Server 的监听端口。 | 无 |
HealthCheckConfig | Map | 否 | 是 | 函数自定义健康检查配置。 | 更多信息,请参见HealthCheckConfig属性。 |
Image | String | 否 | 是 | 容器镜像地址。 | 无 |
AccelerationInfo语法
"AccelerationInfo": {
"Status": String
}
AccelerationInfo属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Status | String | 否 | 是 | 镜像加速状态。 | 无 |
HealthCheckConfig语法
"HealthCheckConfig": {
"TimeoutSeconds": Integer,
"InitialDelaySeconds": Integer,
"HttpGetUrl": String,
"PeriodSeconds": Integer,
"FailureThreshold": Integer,
"SuccessThreshold": Integer
}
HealthCheckConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
TimeoutSeconds | Integer | 否 | 是 | 健康检查超时时间。 | 取值范围 1~3。默认值为 1。 |
InitialDelaySeconds | Integer | 否 | 是 | 容器启动到发起健康检查的延迟。 | 取值范围 0~120。默认值为 0。 |
HttpGetUrl | String | 否 | 是 | 容器自定义健康检查 URL 地址。 | 长度不超过 2048 个字符。 |
PeriodSeconds | Integer | 否 | 是 | 健康检查周期。 | 取值范围 1~120。默认值为 3。 |
FailureThreshold | Integer | 否 | 是 | 健康检查失败次数阈值。 | 达到该值后系统认为检查失败。取值范围 1~120。默认值为 3。 |
SuccessThreshold | Integer | 否 | 是 | 健康检查成功次数阈值。 | 达到该值后系统认为检查成功。取值范围 1~120。默认值为 1。 |
Code语法
"Code": {
"SourceCode": String,
"ZipFile": String,
"Checksum": String,
"OssObjectName": String,
"OssBucketName": String
}
Code属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
SourceCode | String | 否 | 是 | 函数代码。 | 无 |
ZipFile | String | 否 | 是 | 函数代码 ZIP 包的 Base 64 编码。 | 无 |
Checksum | String | 否 | 是 | 函数代码包的 CRC-64 值。 | 如果提供了 Checksum,则函数计算会校验代码包的 Checksum 是否和提供的一致。 |
OssObjectName | String | 否 | 是 | 用户存放函数代码 ZIP 包的 OSS Object 名称。 | 无 |
OssBucketName | String | 否 | 是 | 用户存放函数代码 ZIP 包的 OSS Bucket 名称。 | 无 |
CustomRuntimeConfig语法
"CustomRuntimeConfig": {
"Args": List,
"Command": List,
"Port": Integer,
"HealthCheckConfig": Map
}
CustomRuntimeConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Args | List | 否 | 是 | 实例启动参数。 | 无 |
Command | List | 否 | 是 | 实例启动命令。 | 无 |
Port | Integer | 否 | 是 | HTTP Server 的监听端口。 | 无 |
HealthCheckConfig | Map | 否 | 是 | 函数自定义健康检查配置。 | 更多信息,请参见HealthCheckConfig属性。 |
GpuConfig语法
"GpuConfig": {
"GpuMemorySize": Integer,
"GpuType": String
}
GpuConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
GpuMemorySize | Integer | 否 | 是 | GPU 显存规格。 | 单位为 MB,为 1024MB 的倍数。 |
GpuType | String | 否 | 是 | GPU 实例类型。 | 取值:
|
OssMountConfig语法
"OssMountConfig": {
"MountPoints": List
}
OssMountConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
MountPoints | List | 否 | 是 | OSS 挂载点列表。 | 更多信息,请参见MountPoints属性。 |
MountPoints语法
"MountPoints": [
{
"EnableTls": Boolean,
"ServerAddr": String,
"MountDir": String
}
]
MountPoints属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
EnableTls | Boolean | 否 | 是 | 使用传输加密方式挂载。 | 无 |
ServerAddr | String | 否 | 是 | 服务地址。 | 无 |
MountDir | String | 否 | 是 | 本地挂载目录。 | 无 |
CustomDns语法
"CustomDns": {
"Searches": List,
"DnsOptions": List,
"NameServers": List
}
CustomDns属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Searches | List | 否 | 是 | DNS 搜索域列表。 | 无 |
DnsOptions | List | 否 | 是 | resolv.conf 文件中的 DNS 解析配置列表。 | 每一项对应一个键值对,格式为 |
NameServers | List | 否 | 是 | DNS 服务器的 IP 地址列表。 | 无 |
DnsOptions语法
"DnsOptions": [
{
"Value": String,
"Name": String
}
]
DnsOptions属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Name | String | 否 | 是 | 配置项名称 | 无 |
Value | String | 否 | 是 | 配置项值 | 无 |
NasConfig语法
"NasConfig": {
"MountPoints": List,
"UserId": Integer,
"GroupId": Integer
}
NasConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
MountPoints | List | 否 | 是 | 挂载点列表。 | 更多信息,请参见MountPoints属性。 |
UserId | Integer | 否 | 是 | 账号 ID。 | 无 |
GroupId | Integer | 否 | 是 | 群组 ID。 | 无 |
LogConfig语法
"LogConfig": {
"Project": String,
"LogBeginRule": String,
"Logstore": String,
"EnableInstanceMetrics": Boolean,
"EnableRequestMetrics": Boolean
}
LogConfig属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Project | String | 否 | 是 | 日志服务的 Project 名称 | 无。 |
LogBeginRule | String | 否 | 是 | 日志行首匹配规则 | 无 |
Logstore | String | 否 | 是 | 日志服务的 Logstore 名称。 | 无 |
EnableInstanceMetrics | Boolean | 否 | 是 | 是否开启实例级别指标。 | 开启该功能后,您可以查看实例级别的 CPU 使用情况、内存使用情况、实例网络情况和实例内请求数等核心指标信息。false:默认值,表示关闭实例级别指标。true:表示开启实例级别指标。 |
EnableRequestMetrics | Boolean | 否 | 是 | 是否开启请求级别指标。 | 开启该功能后,您可以查看该服务下所有函数的某次调用所消耗的时间及内存。false:表示关闭请求级别指标。true:默认值,表示开启请求级别指标。 |
返回值
Fn::GetAtt
FunctionId:系统为每个函数生成的唯一ID。
FunctionName:函数名。
ARN:函数的ARN。
示例
ROSTemplateFormatVersion: '2015-09-01'
Resources:
Function:
Type: ALIYUN::FC3::Function
Properties:
Code:
SourceCode: |
import time
import json
import urllib.request
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())
}
data = json.dumps(result).encode('utf-8') # 需要编码为字节串
req = urllib.request.Request(event['ResponseURL'], data=data, headers=headers, method='PUT')
with urllib.request.urlopen(req) as resp:
resp_content = resp.read().decode('utf-8') # 读取响应并解码
logger.info('response: %s', resp_content)
Handler: index.handler
FunctionName:
Ref: FunctionName
Runtime:
Ref: Runtime
Parameters:
Runtime:
Default: python3.9
Required: true
Type: String
Description:
en: The programming language of the function.
FunctionName:
Default: hello-world
Required: true
Type: String
Description:
en: The name of the function.
Outputs:
FunctionId:
Description: The function ID
Value:
Fn::GetAtt:
- Function
- FunctionId
ARN:
Description: The ARN for ALIYUN::ROS::CustomResource
Value:
Fn::GetAtt:
- Function
- ARN
FunctionName:
Description: The function name
Value:
Fn::GetAtt:
- Function
- FunctionName
{
"ROSTemplateFormatVersion": "2015-09-01",
"Resources": {
"Function": {
"Type": "ALIYUN::FC3::Function",
"Properties": {
"Code": {
"SourceCode": "import time\nimport json\nimport urllib.request\nimport logging\n\n\ndef handler(event, context):\n logger = logging.getLogger()\n\n event = json.loads(event)\n logger.info('receive request: %s', event)\n\n res_props = event['ResourceProperties']\n\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\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 data = json.dumps(result).encode('utf-8') # 需要编码为字节串\n req = urllib.request.Request(event['ResponseURL'], data=data, headers=headers, method='PUT')\n with urllib.request.urlopen(req) as resp:\n resp_content = resp.read().decode('utf-8') # 读取响应并解码\n logger.info('response: %s', resp_content)\n"
},
"Handler": "index.handler",
"FunctionName": {
"Ref": "FunctionName"
},
"Runtime": {
"Ref": "Runtime"
}
}
}
},
"Parameters": {
"Runtime": {
"Default": "python3.9",
"Required": true,
"Type": "String",
"Description": {
"en": "The programming language of the function."
}
},
"FunctionName": {
"Default": "hello-world",
"Required": true,
"Type": "String",
"Description": {
"en": "The name of the function."
}
}
},
"Outputs": {
"FunctionId": {
"Description": "The function ID",
"Value": {
"Fn::GetAtt": [
"Function",
"FunctionId"
]
}
},
"ARN": {
"Description": "The ARN for ALIYUN::ROS::CustomResource",
"Value": {
"Fn::GetAtt": [
"Function",
"ARN"
]
}
},
"FunctionName": {
"Description": "The function name",
"Value": {
"Fn::GetAtt": [
"Function",
"FunctionName"
]
}
}
}
}