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,
    "DisableOndemand": Boolean,
    "SessionAffinityConfig": Map,
    "InstanceIsolationMode": String,
    "SessionAffinity": String
    "Tags": List
  }
}属性
| 属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 | 
| 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属性。 | 
| DisableOndemand | Boolean | 否 | 否 | 是否禁止创建按量实例, | ,功能开启后,不会创建按量实例,只能使用预留实例 | 
| SessionAffinityConfig | Map | 否 | 否 | 会话关联配置。 | 无 | 
| InstanceIsolationMode | String | 否 | 否 | 实例隔离模式。 | 无 | 
| SessionAffinity | String | 否 | 否 | 函数计算请求的会话关联策略。 | 取值: 
 | 
| 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 秒。函数超过这个时间后会被终止执行。 | 
| Tags | List | 否 | 否 | 自定义标签列表。 | |
| VpcConfig | Map | 否 | 是 | VPC 配置。 | 配置此参数后,函数可以访问指定的 VPC 资源。更多信息,请参见VpcConfig属性。 | 
Tags语法
"Tags": [
  {
    "Key": String,
    "Value": String
  }
]Tags属性
| 属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 | 
| Value | String | 否 | 否 | 标签值。 | 长度:0-256。 | 
| Key | String | 是 | 否 | 标签键。 | 长度:1-256。 | 
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,
  "RegistryConfig": Map
}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 | 否 | 是 | 容器镜像地址。 | 无 | 
| RegistryConfig | Map | 否 | 是 | 镜像仓库的配置信息。 | 更多信息,请参见RegistryConfig属性。 | 
RegistryConfig语法
"RegistryConfig": {
  "CertConfig": Map,
  "NetworkConfig": Map,
  "AuthConfig": Map
}RegistryConfig属性
| 属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 | 
| CertConfig | Map | 是 | 是 | 证书配置。 | 更多信息,请参见CertConfig属性。 | 
| NetworkConfig | Map | 否 | 是 | 网络配置。 | 更多信息,请参见NetworkConfig属性。 | 
| AuthConfig | Map | 否 | 是 | 权限认证配置。 | 更多信息,请参见AuthConfig属性。 | 
CertConfig语法
"CertConfig": {
  "Insecure": Boolean,
  "RootCaCertBase64": String
}CertConfig属性
| 属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 | 
| Insecure | Boolean | 是 | 是 | 是否跳过证书验证。 | 无 | 
| RootCaCertBase64 | String | 否 | 是 | 镜像仓库 CA 证书。 | 无 | 
NetworkConfig语法
"NetworkConfig": {
  "VSwitchId": String,
  "VpcId": String,
  "SecurityGroupId": String
}NetworkConfig属性
| 属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 | 
| VSwitchId | String | 是 | 是 | 可以连通镜像仓库的 VSwitch ID。 | 无 | 
| VpcId | String | 是 | 是 | 可以连通镜像仓库的 VPC ID。 | 无 | 
| SecurityGroupId | String | 是 | 是 | 可以连通镜像仓库的 SecurityGroup ID。 | 无 | 
AuthConfig语法
"AuthConfig": {
  "Password": String,
  "UserName": String
}AuthConfig属性
| 属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 | 
| Password | String | 是 | 是 | 镜像仓库密码。 | 无 | 
| UserName | 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": [
  {
    "MountDir": String,
    "BucketName": String,
    "Endpoint": String,
    "ReadOnly": Boolean,
    "BucketPath": String
  }
]MountPoints属性
| 属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 | 
| MountDir | String | 否 | 是 | 本地挂载目录。 | 无 | 
| BucketName | String | 否 | 是 | 挂载的 OSS Bucket。 | 无 | 
| Endpoint | String | 否 | 是 | OSS 访问地址。 | 无 | 
| ReadOnly | Boolean | 否 | 是 | 是否只读。 | 无 | 
| BucketPath | String | 否 | 是 | 挂载的 OSS Bucket 路径。 | 无 | 
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"
        ]
      }
    }
  }
}