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 | 否 | 是 | 函数实例类型。 | 取值: 
 默认值:e1。 | 
| 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示例。
- 创建函数服务 
- 创建函数 
- 执行函数 
- 触发函数执行 
- 发布版本 
- 创建别名 
- 创建预留实例