全部產品
Search
文件中心

:ALIYUN::FC::Function

更新時間:Dec 06, 2024

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:彈性執行個體。

  • c1:效能執行個體。

Description

String

函數的描述。

ServiceName

String

服務名稱。

長度為1~128個字元。

MemorySize

Integer

函數的記憶體規格。

取值:

  • 彈性執行個體:128~3072,必須是64的倍數。

  • 效能執行個體:4096、8192、16384、32768。

單位: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。更多資訊,請參見Function Compute支援的函數運行環境列表

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

容器啟動命令。

取值樣本:["/code/myserver"]

Args

String

容器啟動參數。

取值樣本:["-arg1", "value1"]

Image

String

容器鏡像地址。

取值樣本:registry-vpc.cn-hangzhou.aliyuncs.com/fc-demo/helloworld:v1beta1

AccelerationType

String

是否開啟鏡像加速。

取值:

  • Default:開啟。

  • None(預設值):關閉。

InstanceId

String

Container Registry企業版執行個體的ID。

當容器鏡像選擇的是企業版執行個體時,您需要添加企業版執行個體ID,該執行個體的預設解析IP必須是服務所在的VPC網路地址。

說明

目前不支援使用PrivateZone產品定義網域名稱解析。

WebServerMode

Boolean

鏡像運行是否為Web Server模式。

取值:

  • true(預設值):表示需要在容器鏡像中實現Web Server來監聽連接埠並處理請求。

  • false:表示需要容器運行後主動退出進程,並且ExitCode需要為0。

AsyncConfiguration文法

"AsyncConfiguration": {
  "Destination": Map
  "MaxAsyncRetryAttempts": Integer,
  "MaxAsyncEventAgeInSeconds": Integer,
  "StatefulInvocation": Boolean
}

AsyncConfiguration屬性

屬性名稱

類型

必須

允許更新

描述

約束

Destination

Map

非同步呼叫目標。

更多資訊,請參見Destination屬性

MaxAsyncRetryAttempts

Integer

最大重試次數。

MaxAsyncEventAgeInSeconds

Integer

訊息最大存活時間長度。

StatefulInvocation

Boolean

是否開啟有狀態非同步呼叫。

取值:

  • true:開啟。

  • false(預設值):關閉。

更多資訊,請參見功能概覽

Destination文法

"Destination": {
  "OnSuccess": String,
  "OnFailure": String
}

Destination屬性

屬性名稱

類型

必須

允許更新

描述

約束

OnSuccess

String

當函數執行成功時,Function Compute將調用該配置對應的目標。

OnFailure

String

當函數執行失敗(系統錯誤或函數內部錯誤)時,Function Compute將調用該配置對應的目標。

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

啟動入口命令接收的參數。

樣本值:

["-arg1", "value1"]

Command

List

啟動入口命令。

樣本值:

["/code/myserver"]

CustomDNS文法

"CustomDNS":{
  "NameServers": List,
  "DnsOptions": List,
  "Searches": List
}

CustomDNS屬性

屬性名稱

類型

必須

允許更新

描述

約束

NameServers

List

DNS伺服器的IP地址。

DnsOptions

List

resolv.conf檔案中的配置項。

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樣本

  • 建立函數服務

  • 建立函數

  • 執行函數

  • 觸發函數執行

  • 發布版本

  • 建立別名

  • 建立預留執行個體