全部产品
Search
文档中心

资源编排:ALIYUN::FC3::Function

更新时间:Dec 05, 2024

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

函数的环境变量。

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

{'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属性

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

取值:

  • 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": [
  {
    "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 解析配置列表。

每一项对应一个键值对,格式为 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"
        ]
      }
    }
  }
}