ALIYUN::FC3::Function

更新时间:
复制 MD 格式

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

否

是

函数的环境变量。

可以在运行环境中访问设置的环境变量。更多信息,例如:

{'testKey': 'testValue'}

GpuConfig

Map

否

是

函数 GPU 配置。

更多信息,请参见GpuConfig属性。

InstanceLifecycleConfig

Map

否

是

实例生命周期回调方法配置。

更多信息,请参见InstanceLifecycleConfig属性。

InternetAccess

Boolean

否

是

是否允许函数访问公网。

默认值为 true。

InstanceConcurrency

Integer

否

是

实例最大并发度。

无。

Layers

List

否

是

层的列表。

多个层会按照数组下标从大到小的顺序进行合并,下标小的层的内容会覆盖下标大的层的同名文件。例如:

["acs:fc:cn-beijing:186824xxxxxx:layers/fc_layer/versions/1"]

LogConfig

Map

否

是

日志配置。

函数产生的日志会被写入到配置的日志库中。更多信息,请参见LogConfig属性。

DisableOndemand

Boolean

否

否

是否禁止创建按量实例,

,功能开启后,不会创建按量实例,只能使用预留实例

SessionAffinityConfig

Map

否

否

会话关联配置。

无

InstanceIsolationMode

String

否

否

实例隔离模式。

无

SessionAffinity

String

否

否

函数计算请求的会话关联策略。

取值:

  • MCP_SSE:实现MCP SSE协议请求亲近性

  • GENERATED_COOKIE:基于Cookie的关联。

  • HEADER_FIELD:基于标头的关联

  • NONE:没有关联效果

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 实例类型。

取值:

  • fc.gpu.tesla.1 表示 GPU Tesla 系列实例类型。

  • fc.gpu.ampere.1 表示 GPU Ampere 系列实例类型。

  • fc.gpu.ada.1 表示 GPU Ada 系列实例类型。

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 解析配置列表。

每一项对应一个键值对,格式为 key:value,其中键为必填。更多信息,请参见DnsOptions属性。

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"
        ]
      }
    }
  }
}