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 | 否 | 是 | 函數執行個體類型。 | 取值:
|
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。更多資訊,請參見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 | 否 | 是 | 容器啟動命令。 | 取值樣本: |
Args | String | 否 | 是 | 容器啟動參數。 | 取值樣本: |
Image | String | 是 | 是 | 容器鏡像地址。 | 取值樣本: |
AccelerationType | String | 否 | 是 | 是否開啟鏡像加速。 | 取值:
|
InstanceId | String | 否 | 是 | Container Registry企業版執行個體的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 | 否 | 是 | 當函數執行成功時,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 | 否 | 是 | 啟動入口命令接收的參數。 | 樣本值:
|
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樣本。
建立函數服務
建立函數
執行函數
觸發函數執行
發布版本
建立別名
建立預留執行個體