全部产品
Search
文档中心

Resource Orchestration Service:ALIYUN::FC::Function

更新时间:Jun 26, 2025

ALIYUN::FC::Function digunakan untuk membuat fungsi. Fungsi harus berada dalam layanan. Semua fungsi dalam suatu layanan berbagi atribut yang sama dengan layanan tersebut, seperti otorisasi dan konfigurasi log.

Sintaksis

{
  "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
  }
}

Properti

Properti

Tipe

Diperlukan

Dapat Diedit

Deskripsi

Kendala

Initializer

String

Tidak

Ya

Penanganan fungsi inisialisasi.

Format nilai bervariasi berdasarkan bahasa pemrograman.

InitializationTimeout

Integer

Tidak

Ya

Jangka waktu timeout untuk eksekusi fungsi inisialisasi.

Nilai valid: 1 hingga 300.

Satuan: detik.

Nilai default: 3.

Ketika jangka waktu timeout berakhir, Function Compute menghentikan eksekusi fungsi inisialisasi.

Code

Map

Tidak

Ya

Paket ZIP kode fungsi.

Untuk informasi lebih lanjut, lihat Properti Code.

InstanceType

String

Tidak

Ya

Tipe instans fungsi.

Nilai valid:

  • e1: instans elastis

  • c1: instans performa

  • fc.gpu.tesla.1: instans dipercepat GPU dengan seri Tesla GPUs

  • fc.gpu.ampere.1: instans dipercepat GPU dengan seri Ampere GPUs

  • fc.gpu.ada.1: instans dipercepat GPU dengan seri Ada GPUs

  • g1: instans dipercepat GPU dengan seri Tesla GPUs

Nilai default: e1.

Description

String

Tidak

Ya

Deskripsi fungsi.

Tidak ada.

ServiceName

String

Ya

Tidak

Nama layanan di Function Compute.

Nama harus memiliki panjang 1 hingga 128 karakter.

MemorySize

Integer

Tidak

Ya

Ukuran memori fungsi.

Nilai valid:

  • Nilai valid ketika InstanceType disetel ke e1: kelipatan 64 yang berkisar antara 128 hingga 3072.

  • Nilai valid ketika InstanceType disetel ke c1: 4096, 8192, 16384, dan 32768.

  • Nilai valid ketika InstanceType disetel ke fc.gpu.tesla.1: kelipatan 64 yang berkisar antara 128 hingga X. X dihitung menggunakan rumus berikut: X = Memori GPU (GB) × 2048.

  • Nilai valid ketika InstanceType disetel ke fc.gpu.ada.1: 65536. 65536 MB setara dengan 64 GB.

Satuan: MB.

Untuk informasi lebih lanjut, lihat Tipe instans dan mode penggunaan.

InstanceConcurrency

Integer

Tidak

Ya

Nilai konkurensi instans.

Nilai valid: 1 hingga 100.

EnvironmentVariables

Map

Tidak

Ya

Variabel lingkungan yang ingin Anda konfigurasikan untuk fungsi.

Tidak ada.

Handler

String

Ya

Ya

Penanganan fungsi.

Misalnya, jika Anda menyetel Handler ke index.handler saat membuat fungsi Python, nama file adalah index.py dan nama fungsinya adalah handler. Format nilai bervariasi berdasarkan bahasa pemrograman.

Timeout

Integer

Tidak

Ya

Jangka waktu timeout untuk eksekusi fungsi.

Nilai valid: 1 hingga 600.

Nilai default: 3.

Satuan: detik.

Ketika jangka waktu timeout berakhir, Function Compute menghentikan eksekusi fungsi.

Runtime

String

Ya

Ya

Waktu proses fungsi.

Nilai yang valid: nodejs6, nodejs8, nodejs10, nodejs12, python3, java8, custom, dan custom-container. Untuk informasi lebih lanjut, lihat Runtimes yang didukung oleh Function Compute.

FunctionName

String

Ya

Tidak

Nama fungsi.

Nama harus memiliki panjang 1 hingga 128 karakter, dan dapat berisi huruf, angka, garis bawah (_), dan tanda hubung (-). Harus dimulai dengan huruf atau garis bawah (_).

CustomContainerConfig

Map

Tidak

Ya

Konfigurasi runtime Custom Container jika Anda menyetel Runtime ke custom-container. Setelah Anda menentukan konfigurasi, Anda dapat menggunakan gambar kontainer kustom untuk memanggil fungsi.

Untuk informasi lebih lanjut, lihat Properti CustomContainerConfig.

CAPort

Integer

Tidak

Ya

Port tempat server HTTP kustom mendengarkan.

Nilai default: 9000.

Catatan

Properti ini berlaku ketika Runtime disetel ke custom atau custom-container.

AsyncConfiguration

Map

Tidak

Ya

Konfigurasi pemanggilan asinkron.

Untuk informasi lebih lanjut, lihat Properti AsyncConfiguration.

Cpu

Number

Tidak

Ya

Jumlah vCPU fungsi.

Tidak ada.

CustomRuntimeConfig

Map

Tidak

Ya

Konfigurasi runtime kustom fungsi.

Tidak ada.

GpuMemorySize

Integer

Tidak

Ya

Ukuran memori GPU fungsi.

Nilai valid: kelipatan 1024. Satuan: MB.

InstanceSoftConcurrency

Integer

Tidak

Ya

Nilai konkurensi lunak instans. Anda dapat menggunakan properti ini untuk menerapkan peningkatan skala yang mulus untuk instans.

Ketika nilai konkurensi instans lebih besar dari nilai konkurensi lunak instans, peningkatan skala instans dipicu. Misalnya, jika instans Anda memerlukan waktu lama untuk memulai, Anda dapat menentukan nilai konkurensi lunak yang sesuai untuk memulai instans sebelumnya.

Nilai InstanceSoftConcurrency harus kurang dari atau sama dengan nilai InstanceConcurrency.

DiskSize

Integer

Tidak

Ya

Ukuran disk fungsi.

Satuan: MB.

Nilai valid: 512 dan 10240.

InstanceLifecycleConfig

Map

Tidak

Ya

Konfigurasi siklus hidup instans fungsi.

Untuk informasi lebih lanjut, lihat Properti InstanceLifecycleConfig.

CustomDNS

Map

Tidak

Ya

Konfigurasi Domain Name System (DNS) kustom fungsi.

Untuk informasi lebih lanjut, lihat Properti CustomDNS.

CustomHealthCheckConfig

Map

Tidak

Ya

Konfigurasi pemeriksaan kesehatan runtime custom dan Custom Container.

Untuk informasi lebih lanjut, lihat Properti CustomHealthCheckConfig.

Sintaksis Kode

"Code": {
  "OssBucketName": String,
  "OssObjectName": String,
  "ZipFile": String,
  "SourceCode": String
}

Properti Kode

Properti

Tipe

Diperlukan

Dapat Diedit

Deskripsi

Kendala

OssBucketName

String

Tidak

Ya

Nama bucket Object Storage Service (OSS) tempat paket ZIP disimpan.

Tidak ada.

OssObjectName

String

Tidak

Ya

Nama paket ZIP yang digunakan sebagai objek OSS.

Tidak ada.

ZipFile

String

Tidak

Ya

Isi paket ZIP yang dikodekan Base64.

Tidak ada.

SourceCode

String

Tidak

Ya

Kode sumber fungsi.

Kode sumber dapat memiliki panjang hingga 4.096 karakter. Node.js, PHP, dan Python didukung.

Layanan Orkestrasi Sumber Daya (ROS) menulis nilai properti ini ke file berkode UTF-8 bernama index.

Ketika Anda menentukan properti ZipFile, SourceCode, OssBucketName, dan OssObjectName, prioritas properti tersebut adalah dalam urutan menurun.

Sintaksis CustomContainerConfig

"CustomContainerConfig": {
  "Command": String,
  "Args": String,
  "Image": String,
  "AccelerationType": String,
  "InstanceId": String,
  "WebServerMode": Boolean
}

Properti CustomContainerConfig

Properti

Tipe

Diperlukan

Dapat Diedit

Deskripsi

Kendala

Command

String

Tidak

Ya

Perintah startup kontainer.

Contoh: ["/code/myserver"].

Args

String

Tidak

Ya

Parameter startup kontainer.

Contoh: ["-arg1", "value1"].

Image

String

Ya

Ya

Alamat gambar kontainer.

Contoh: registry-vpc.cn-hangzhou.aliyuncs.com/fc-demo/helloworld:v1beta1.

AccelerationType

String

Tidak

Ya

Menentukan apakah akan mengaktifkan percepatan gambar.

Nilai valid:

  • Default: mengaktifkan percepatan gambar.

  • None (default): menonaktifkan percepatan gambar.

InstanceId

String

Tidak

Ya

ID instance Container Registry Enterprise Edition.

Anda harus menentukan properti ini ketika menggunakan instance Container Registry Enterprise Edition. Alamat IP default yang diselesaikan dari instance harus merupakan alamat IP dari virtual private cloud (VPC) tempat Container Registry berada.

Catatan

Anda tidak dapat menggunakan Alibaba Cloud DNS PrivateZone untuk mendefinisikan resolusi nama domain.

WebServerMode

Boolean

Tidak

Ya

Menentukan apakah akan menggunakan mode server web untuk menjalankan gambar.

Nilai valid:

  • true (default): menggunakan mode server web untuk menjalankan gambar. Dalam hal ini, server web diimplementasikan dalam gambar kontainer Anda untuk mendengarkan port dan memproses permintaan.

  • false: tidak menggunakan mode server web untuk menjalankan gambar. Dalam hal ini, kontainer Anda harus keluar secara aktif dari proses setelah kontainer berjalan. Kode keluar harus 0.

Sintaksis AsyncConfiguration

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

Properti AsyncConfiguration

Properti

Tipe

Diperlukan

Dapat Diedit

Deskripsi

Kendala

Destination

Map

Tidak

Tidak

Tujuan pemanggilan asinkron.

Untuk informasi lebih lanjut, lihat Properti Destination.

MaxAsyncRetryAttempts

Integer

Tidak

Ya

Jumlah maksimum percobaan ulang.

Tidak ada.

MaxAsyncEventAgeInSeconds

Integer

Tidak

Ya

Masa berlaku maksimum pesan.

Tidak ada.

StatefulInvocation

Boolean

Tidak

Ya

Menentukan apakah akan mengaktifkan pemanggilan asinkron stateful.

Nilai valid:

  • true

  • false (default)

Untuk informasi lebih lanjut, lihat Ikhtisar.

Sintaksis Destination

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

Properti Destination

Properti

Tipe

Diperlukan

Dapat Diedit

Deskripsi

Kendala

OnSuccess

String

Tidak

Ya

Tujuan yang dipanggil oleh Function Compute jika eksekusi fungsi berhasil.

Tidak ada.

OnFailure

String

Tidak

Ya

Tujuan yang dipanggil oleh Function Compute jika eksekusi fungsi gagal karena kesalahan sistem atau kesalahan fungsi bawaan.

Tidak ada.

Sintaksis InstanceLifecycleConfig

"InstanceLifecycleConfig":{
  "PreFreeze": Map,
  "PreStop": Map
}

Properti InstanceLifecycleConfig

Properti

Tipe

Diperlukan

Dapat Diedit

Deskripsi

Kendala

PreFreeze

Map

Tidak

Ya

Konfigurasi hook PreFreeze.

Untuk informasi lebih lanjut, lihat Properti PreFreeze.

PreStop

Map

Tidak

Ya

Konfigurasi hook PreStop.

Untuk informasi lebih lanjut, lihat Properti PreStop.

Sintaksis PreStop

"PreStop":{
  "Handler": String,
  "Timeout": Integer
}

Properti PreStop

Properti

Tipe

Diperlukan

Dapat Diedit

Deskripsi

Kendala

Handler

String

Tidak

Ya

Penanganan fungsi.

Untuk informasi lebih lanjut, lihat Dasar-dasar.

Timeout

Integer

Tidak

Ya

Jangka waktu timeout untuk eksekusi.

Satuan: detik.

Sintaksis PreFreeze

"PreFreeze":{
  "Handler": String,
  "Timeout": Integer
}

Properti PreFreeze

Properti

Tipe

Diperlukan

Dapat Diedit

Deskripsi

Kendala

Handler

String

Tidak

Ya

Penanganan fungsi.

Untuk informasi lebih lanjut, lihat Dasar-dasar.

Timeout

Integer

Tidak

Ya

Jangka waktu timeout untuk eksekusi.

Satuan: detik.

Sintaksis CustomHealthCheckConfig

"CustomHealthCheckConfig":{
  "SuccessThreshold": Integer,
  "InitialDelaySeconds": Integer,
  "PeriodSeconds": Integer,
  "HttpGetUrl": String,
  "TimeoutSeconds": Integer,
  "FailureThreshold": Integer
}

Properti CustomHealthCheckConfig

Properti

Tipe

Diperlukan

Dapat Diedit

Deskripsi

Kendala

SuccessThreshold

Integer

Tidak

Ya

Jumlah kali berturut-turut suatu kontainer harus lulus pemeriksaan kesehatan sebelum dinyatakan sehat.

Nilai valid: 1 hingga 120.

Nilai default: 1.

InitialDelaySeconds

Integer

Tidak

Ya

Durasi setelah kontainer dimulai sebelum pemeriksaan kesehatan dimulai.

Nilai valid: 0 hingga 120.

Nilai default: 0.

PeriodSeconds

Integer

Tidak

Ya

Interval pemeriksaan kesehatan.

Nilai valid: 1 hingga 120.

Nilai default: 3.

HttpGetUrl

String

Tidak

Ya

URL pemeriksaan kesehatan kustom untuk kontainer.

URL dapat memiliki panjang hingga 2.048 karakter.

TimeoutSeconds

Integer

Tidak

Ya

Jangka waktu timeout untuk pemeriksaan kesehatan.

Nilai valid: 1 hingga 3.

Nilai default: 1.

FailureThreshold

Integer

Tidak

Ya

Jumlah kali berturut-turut suatu kontainer harus gagal dalam pemeriksaan kesehatan sebelum dinyatakan tidak sehat.

Nilai valid: 1 hingga 120.

Nilai default: 3.

Sintaksis CustomRuntimeConfig

"CustomRuntimeConfig":{
  "Args": List,
  "Command": List,
}

Properti CustomRuntimeConfig

Properti

Tipe

Diperlukan

Dapat Diedit

Deskripsi

Kendala

Args

List

Tidak

Ya

Parameter yang diterima oleh perintah startup.

Contoh:

["-arg1", "value1"]

Command

List

Tidak

Ya

Perintah startup.

Contoh:

["/code/myserver"]

Sintaksis CustomDNS

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

Properti CustomDNS

Properti

Tipe

Diperlukan

Dapat Diedit

Deskripsi

Kendala

NameServers

List

Tidak

Ya

Alamat IP server DNS.

Tidak ada.

DnsOptions

List

Tidak

Ya

Item konfigurasi dalam file resolv.conf.

Tidak ada.

Searches

List

Tidak

Ya

Domain pencarian DNS.

Tidak ada.

Sintaksis DnsOptions

"DnsOptions":{
  "Value": String,
  "Name": String,
}

Properti DnsOptions

Properti

Tipe

Diperlukan

Dapat Diedit

Deskripsi

Kendala

Value

String

Tidak

Ya

Nilai item konfigurasi.

Contoh: 2.

Name

String

Ya

Ya

Nama item konfigurasi.

Contoh: ndots.

Nilai Kembali

Fn::GetAtt

  • FunctionId: ID unik yang dihasilkan sistem untuk fungsi.

  • ServiceName: nama layanan di Function Compute.

  • ARN: Alibaba Cloud Resource Name (ARN) dari fungsi.

  • FunctionName: nama fungsi.

  • ServiceId: ID layanan di Function Compute.

Contoh

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"
        ]
      }
    }
  }
}

Untuk lebih banyak contoh, kunjungi function-invoker.yml. Dalam contoh-contoh tersebut, tipe sumber daya berikut digunakan:

  • ALIYUN::FC::Service: membuat layanan di Function Compute.

  • ALIYUN::FC::Function: membuat fungsi.

  • ALIYUN::FC::FunctionInvoker: memanggil fungsi.

  • ALIYUN::FC::Trigger: memicu fungsi.

  • ALIYUN::FC::Version: merilis versi layanan.

  • ALIYUN::FC::Alias: membuat alias.

  • ALIYUN::FC::ProvisionConfig: membuat instans yang disediakan.