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。 タイムアウト期間が終了すると、Function Compute は初期化関数の実行を終了します。 |
Code | Map | いいえ | はい | 関数コードのZIPパッケージ。 | 詳細については、「Code プロパティ」をご参照ください。 |
InstanceType | String | いいえ | はい | 関数インスタンスのタイプ。 | 有効値:
デフォルト値:e1。 |
Description | String | いいえ | はい | 関数の説明。 | なし。 |
ServiceName | String | はい | いいえ | Function Compute の サービス 名。 | 名前は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。 単位:秒。 タイムアウト期間が終了すると、Function Compute は関数の実行を終了します。 |
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 サーバー が listen する ポート 。 | デフォルト値:9000。 説明 このプロパティは、Runtime が custom または custom-container に設定されている場合に有効になります。 |
AsyncConfiguration | Map | いいえ | はい | 非同期呼び出し構成。 | 詳細については、「AsyncConfiguration プロパティ」をご参照ください。 |
Cpu | Number | いいえ | はい | 関数の vCPU 数。 | なし。 |
CustomRuntimeConfig | Map | いいえ | はい | 関数のカスタムランタイムの構成。 | なし。 |
GpuMemorySize | Integer | いいえ | はい | 関数の GPU メモリサイズ。 | 有効値:1024 の倍数。単位:MB。 |
InstanceSoftConcurrency | Integer | いいえ | はい | インスタンスのソフト同時実行値。このプロパティを使用して、インスタンスのグレースフル スケールアップを実装できます。 | インスタンス同時実行値がインスタンスソフト同時実行値よりも大きい場合、インスタンスのスケールアップがトリガーされます。たとえば、インスタンスの起動に長時間を要する場合、適切なソフト同時実行値を指定して、インスタンスを事前に起動することができます。 InstanceSoftConcurrency の値は、InstanceConcurrency の値以下である必要があります。 |
DiskSize | Integer | いいえ | はい | 関数のディスクサイズ。 | 単位:MB。 有効値:512 および 10240。 |
InstanceLifecycleConfig | Map | いいえ | はい | 関数のインスタンスライフサイクル構成。 | 詳細については、「InstanceLifecycleConfig プロパティ」をご参照ください。 |
CustomDNS | Map | いいえ | はい | 関数のカスタム DNS(Domain Name System)構成。 | 詳細については、「CustomDNS プロパティ」をご参照ください。 |
CustomHealthCheckConfig | Map | いいえ | はい | custom および Custom Container ランタイムの ヘルスチェック 構成。 | 詳細については、「CustomHealthCheckConfig プロパティ」をご参照ください。 |
Code 構文
"Code": {
"OssBucketName": String,
"OssObjectName": String,
"ZipFile": String,
"SourceCode": String
}Code プロパティ
プロパティ | タイプ | 必須 | 編集可能 | 説明 | 制約 |
OssBucketName | String | いいえ | はい | ZIP パッケージ が格納されている Object Storage Service (OSS) バケット の名前。 | なし。 |
OssObjectName | String | いいえ | はい | OSS オブジェクト として使用される ZIP パッケージ の名前。 | なし。 |
ZipFile | String | いいえ | はい | Base64 エンコード された ZIP パッケージ のコンテンツ。 | なし。 |
SourceCode | String | いいえ | はい | 関数の ソースコード 。 | ソースコード は最大 4,096 文字までです。Node.js、PHP、および Python が サポート されています。 Resource Orchestration Service (ROS) は、このプロパティの値を index という名前の UTF-8 エンコード ファイルに書き込みます。 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 Enterprise Edition インスタンス の ID。 | Container Registry Enterprise Edition インスタンス を使用する場合、このプロパティを指定する必要があります。インスタンスのデフォルトの解決済み IP アドレス は、Container Registry が存在する VPC(Virtual Private Cloud)の IP アドレス である必要があります。 説明 Alibaba Cloud DNS PrivateZone を使用して ドメイン名解決 を定義することはできません。 |
WebServerMode | Boolean | いいえ | はい | Web サーバー モードを使用してイメージを実行するかどうかを指定します。 | 有効値:
|
AsyncConfiguration 構文
"AsyncConfiguration": {
"Destination": Map,
"MaxAsyncRetryAttempts": Integer,
"MaxAsyncEventAgeInSeconds": Integer,
"StatefulInvocation": Boolean
}AsyncConfiguration プロパティ
プロパティ | タイプ | 必須 | 編集可能 | 説明 | 制約 |
Destination | Map | いいえ | いいえ | 非同期呼び出しの宛先。 | 詳細については、「Destination プロパティ」をご参照ください。 |
MaxAsyncRetryAttempts | Integer | いいえ | はい | 最大再試行回数。 | なし。 |
MaxAsyncEventAgeInSeconds | Integer | いいえ | はい | メッセージ の最大 有効期間 。 | なし。 |
StatefulInvocation | Boolean | いいえ | はい | ステートフルな非同期呼び出しを有効にするかどうかを指定します。 | 有効値:
詳細については、「概要」をご参照ください。 |
宛先構文
"Destination": {
"OnSuccess": String, // 成功時の宛先
"OnFailure": String // 失敗時の宛先
}宛先プロパティ
プロパティ | タイプ | 必須 | 編集可能 | 説明 | 制約 |
OnSuccess | String | いいえ | はい | 関数の実行が成功した場合に Function Compute が呼び出す宛先です。 | なし。 |
OnFailure | String | いいえ | はい | システムエラーまたはビルトイン関数エラーが原因で関数の実行が失敗した場合に Function Compute が呼び出す宛先です。 | なし。 |
InstanceLifecycleConfig 構文
"InstanceLifecycleConfig":{
// 凍結前フック
"PreFreeze": Map,
// 停止前フック
"PreStop": Map
}InstanceLifecycleConfig プロパティ
プロパティ | タイプ | 必須 | 編集可能 | 説明 | 制約 |
PreFreeze | Map | いいえ | はい | PreFreeze フックの構成。 | 詳細については、「PreFreeze プロパティ」をご参照ください。 |
PreStop | Map | いいえ | はい | PreStop フックの構成。 | 詳細については、「PreStop プロパティ」をご参照ください。 |
PreStop 構文
"PreStop":{
"Handler": String, // ハンドラー
"Timeout": Integer // タイムアウト
}PreStop プロパティ
プロパティ | タイプ | 必須 | 編集可能 | 説明 | 制約 |
ハンドラ | 文字列 | いいえ | はい | 関数のハンドラ。 | 詳細については、「基本」をご参照ください。 |
タイムアウト | 整数 | いいえ | はい | 実行のタイムアウト期間。 | 単位:秒。 |
PreFreeze 構文
"PreFreeze":{
"Handler": String, // ハンドラー
"Timeout": Integer // タイムアウト
}PreFreeze プロパティ
プロパティ | タイプ | 必須 | 編集可能 | 説明 | 制約 |
Handler | String | いいえ | はい | 関数のハンドラ。 | 詳細については、「基本」をご参照ください。 |
Timeout | Integer | いいえ | はい | 実行のタイムアウト期間。 | 単位:秒。 |
CustomHealthCheckConfig 構文
"CustomHealthCheckConfig":{
// 成功のしきい値
"SuccessThreshold": Integer,
// 初期遅延時間(秒)
"InitialDelaySeconds": Integer,
// チェック間隔(秒)
"PeriodSeconds": Integer,
// HTTP GET リクエストの URL
"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 です。 | URL の長さは最大 2,048 文字です。 |
TimeoutSeconds | Integer | いいえ | はい | ヘルスチェックのタイムアウト期間です。 | 有効な値:1 ~ 3 です。 デフォルト値:1 です。 |
FailureThreshold | Integer | いいえ | はい | コンテナーが異常と宣言されるまでに、ヘルスチェックに連続して失敗する必要がある回数です。 |
有効な値:1 ~ 120 です。 デフォルト値:3 です。 |
CustomRuntimeConfig 構文
"CustomRuntimeConfig":{
// 引数リスト
"Args": List,
// コマンドリスト
"Command": List,
}CustomRuntimeConfig プロパティ
プロパティ | タイプ | 必須 | 編集可能 | 説明 | 制約 |
Args | リスト | いいえ | はい | 起動コマンドによって受信されるパラメーター。 | 例: |
Command | リスト | いいえ | はい | 起動コマンド。 | 例: |
Destination 構文
"CustomDNS":{
// ネームサーバーのリスト
"NameServers": List,
// DNS オプションのリスト
"DnsOptions": List,
// 検索ドメインのリスト
"Searches": List
}Destination プロパティ
プロパティ | 種類 | 必須 | 編集可能 | 説明 | 制約 |
ネームサーバ | リスト | いいえ | はい | DNS サーバの IP アドレス。 | なし。 |
DNS オプション | リスト | いいえ | はい |
| なし。 |
検索 | リスト | いいえ | はい | DNS 検索ドメイン。 | なし。 |
InstanceLifecycleConfig 構文
"DnsOptions":{
// 値
"Value": String,
// 名前
"Name": String,
}DnsOptions プロパティ
プロパティ | タイプ | 必須 | 編集可能 | 説明 | 制約 |
Value | String | いいえ | はい | 設定項目の値。 | 例:2。
|
Name | String | はい | はい | 設定項目の名前。 | 例:ndots。
|
戻り値
Fn::GetAtt
FunctionId: システムによって関数に生成される一意の ID です。
ServiceName: Function Compute のサービス名です。
ARN: 関数の Alibaba Cloud リソースネーム (ARN) です。
FunctionName: 関数の名前です。
ServiceId: Function Compute のサービスの ID です。
InstanceLifecycleConfig プロパティ
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 # jsonをインポート
import requests # requestsをインポート
import logging # 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"
]
}
}
}
}詳細については、「function-invoker.yml」をご参照ください。例では、次のリソースタイプが使用されています。
ALIYUN::FC::Service: Function Compute でサービスを作成します。
ALIYUN::FC::Function: 関数を作成します。
ALIYUN::FC::FunctionInvoker: 関数を呼び出します。
ALIYUN::FC::Trigger: 関数をトリガーします。
ALIYUN::FC::Version: サービスバージョンをリリースします。
ALIYUN::FC::Alias: エイリアスを作成します。
ALIYUN::FC::ProvisionConfig: プロビジョニングされたインスタンスを作成します。