全部产品
Search
文档中心

Cloud Config:Definisi dan eksekusi aturan fungsi kustom

更新时间:Jan 05, 2026

Cloud Config memungkinkan Anda membuat aturan kustom berdasarkan Function Compute untuk mengaudit sumber daya terkait. Ketika sebuah aturan dipicu, Cloud Config memanggil fungsi aturan yang sesuai untuk mengevaluasi sumber daya tersebut dan mengembalikan hasil evaluasi kepatuhan. Topik ini menjelaskan parameter input dari aturan fungsi kustom serta menyediakan contoh kode Python yang relevan.

Pengenalan aturan fungsi kustom

Aturan fungsi kustom adalah aturan kustom yang digunakan oleh Cloud Config untuk melakukan audit dengan memanggil fungsi Function Compute.

Skenario

Jika template aturan preset dan aturan kondisi Cloud Config tidak dapat memenuhi persyaratan deteksi kepatuhan sumber daya, Anda dapat menulis kode fungsi untuk mengaudit sumber daya dalam skenario kompleks. Untuk informasi lebih lanjut, lihat alibabacloud-config-samples.

Cara kerjanya

Gambar berikut menunjukkan cara kerja aturan kustom yang dibuat berdasarkan Function Compute.

image.png

Berikut ini penjelasan tentang cara kerja aturan kustom berdasarkan Function Compute:

  1. Fungsi dibuat di Function Compute.

  2. Aturan kustom dibuat berdasarkan Function Compute di Cloud Config, dan Cloud Config secara otomatis memicu evaluasi.

    Catatan

    Setelah Anda membuat aturan, Cloud Config secara otomatis memicu evaluasi.

  3. Cloud Config mendapatkan izin untuk memanggil operasi GetFunction dan InvokeFunction menggunakan peran terhubung layanan AliyunServiceRoleForConfig.

  4. Cloud Config memanggil operasi InvokeFunction untuk mengeksekusi fungsi guna mendapatkan konfigurasi sumber daya dan informasi aturan.

  5. Fungsi tersebut mengevaluasi sumber daya.

  6. Function Compute mengembalikan hasil evaluasi sumber daya ke Cloud Config dengan memanggil operasi PutEvaluations.

    Cloud Config menyimpan hasil evaluasi sumber daya dan menampilkannya di konsol Cloud Config. Anda dapat melihat hasilnya di konsol Cloud Config atau memperbaiki sumber daya yang tidak sesuai serta mengirimkan data sumber daya ke layanan cloud yang sesuai.

Kode Fungsi

Aturan adalah potongan kode penilaian logis yang disimpan dalam fungsi aturan. Cloud Config mengaudit sumber daya berdasarkan aturan. Ketika aturan dipicu, Cloud Config memanggil fungsi aturan yang sesuai untuk mengevaluasi sumber daya terkait. Dalam contoh ini, kode fungsi aturan kustom mencakup fungsi-fungsi utama berikut:

  • handler

    Fungsi handler adalah fungsi masukan yang dipanggil ketika aturan dipicu. Saat membuat fungsi di konsol Function Compute, Anda harus mengonfigurasi fungsi handler. Untuk informasi lebih lanjut, lihat Handlers.

    Catatan

    Cloud Config hanya mendukung penanganan acara. Untuk informasi lebih lanjut, lihat Penanganan Acara.

  • put_evaluations

    Hasil evaluasi sumber daya dikembalikan ke Cloud Config dengan memanggil operasi PutEvaluations.

Anda dapat menggunakan kode Python sampel berikut untuk membuat aturan:

# # !/usr/bin/env python
# # -*- encoding: utf-8 -*-
import json
import logging

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest


logger = logging.getLogger()
# Jenis evaluasi kepatuhan sumber daya. 
COMPLIANCE_TYPE_COMPLIANT = 'COMPLIANT'
COMPLIANCE_TYPE_NON_COMPLIANT = 'NON_COMPLIANT'
COMPLIANCE_TYPE_NOT_APPLICABLE = 'NOT_APPLICABLE'
# Jenis konfigurasi sumber daya yang didorong. 
CONFIGURATION_TYPE_COMMON = 'COMMON'
CONFIGURATION_TYPE_OVERSIZE = 'OVERSIZE'
CONFIGURATION_TYPE_NONE = 'NONE'


# Fungsi masukan yang mengoordinasikan dan memproses logika bisnis. 
def handler(event, context):
    """
    Proses suatu acara.
    :param event: acara.
    :param context: konteks.
    :return: hasil evaluasi kepatuhan.
    """
    # Periksa apakah acara tersebut valid. Anda dapat langsung menyalin kode contoh berikut. 
    evt = validate_event(event)
    if not evt:
        return None
    creds = context.credentials
    rule_parameters = evt.get('ruleParameters')
    result_token = evt.get('resultToken')
    invoking_event = evt.get('invokingEvent')
    ordering_timestamp = evt.get('orderingTimestamp')

    # Dapatkan konfigurasi sumber daya. Aturan harus diatur untuk dipicu saat terjadi perubahan konfigurasi. Setelah aturan yang Anda buat dipicu atau Anda memicu aturan secara manual, Cloud Config memanggil fungsi aturan untuk mengevaluasi sumber daya terkait satu per satu. Jika konfigurasi sumber daya berubah, Cloud Config secara otomatis memanggil fungsi aturan yang sesuai untuk mengevaluasi sumber daya. 
    configuration_item = invoking_event.get('configurationItem')
    account_id = configuration_item.get('accountId')
    resource_id = configuration_item.get('resourceId')
    resource_type = configuration_item.get('resourceType')
    region_id = configuration_item.get('regionId')

    # Periksa apakah ukuran konfigurasi sumber daya yang ingin Anda dorong tidak kurang dari 100 KB. Jika ya, operasi GetDiscoveredResource dipanggil untuk menanyakan detail sumber daya. 
    configuration_type = invoking_event.get('configurationType')
    if configuration_type and configuration_type == CONFIGURATION_TYPE_OVERSIZE:
        resource_result = get_discovered_resource(creds, resource_id, resource_type, region_id)
        resource_json = json.loads(resource_result)
        configuration_item["configuration"] = resource_json["DiscoveredResourceDetail"]["Configuration"]

    # Evaluasi sumber daya. Anda harus menerapkan logika evaluasi berdasarkan skenario bisnis Anda. Kode berikut hanya untuk referensi: 
    compliance_type, annotation = evaluate_configuration_item(
        rule_parameters, configuration_item)

    # Tentukan hasil evaluasi kepatuhan. Hasilnya harus menggunakan sintaks yang ditunjukkan dalam contoh berikut: 
    evaluations = [
        {
            'accountId': account_id,
            'complianceResourceId': resource_id,
            'complianceResourceType': resource_type,
            'complianceRegionId': region_id,
            'orderingTimestamp': ordering_timestamp,
            'complianceType': compliance_type,
            'annotation': annotation
        }
    ]

    # Kembalikan hasil evaluasi kepatuhan dan tulis ke Cloud Config. Anda dapat langsung menyalin kode contoh berikut. 
    put_evaluations(creds, result_token, evaluations)
    return evaluations


# Evaluasi sumber daya berdasarkan informasi aturan dan konfigurasi sumber daya. Anda harus menerapkan logika evaluasi berdasarkan skenario bisnis. Kode berikut hanya untuk referensi: 
def evaluate_configuration_item(rule_parameters, configuration_item):
    """
    Evaluasi sumber daya.
    :param rule_parameters: informasi aturan.
    :param configuration_item: konfigurasi sumber daya.
    :return: hasil evaluasi kepatuhan.
    """
    # Inisialisasi nilai pengembalian.
    compliance_type = COMPLIANCE_TYPE_NON_COMPLIANT
    annotation = None

    # Dapatkan konfigurasi sumber daya lengkap.
    full_configuration = configuration_item['configuration']
    if not full_configuration:
        annotation = 'Konfigurasi kosong.'
        return compliance_type, annotation

    # Konversi konfigurasi ke objek JSON.
    configuration = parse_json(full_configuration)
    if not configuration:
        annotation = 'Konfigurasi:{} tidak valid.'.format(full_configuration)
        return compliance_type, annotation
    return compliance_type, annotation


def validate_event(event):
    """
    Periksa apakah suatu acara valid.
    :param event: acara.
    :return: objek JSON.
    """
    if not event:
        logger.error('Acara kosong.')
    evt = parse_json(event)
    logger.info('Memuat acara: %s .' % evt)

    if 'resultToken' not in evt:
        logger.error('ResultToken kosong.')
        return None
    if 'ruleParameters' not in evt:
        logger.error('RuleParameters kosong.')
        return None
    if 'invokingEvent' not in evt:
        logger.error('InvokingEvent kosong.')
        return None
    return evt


def parse_json(content):
    """
    Konversi string JSON menjadi objek JSON.
    :param content: string JSON.
    :return: objek JSON.
    """
    try:
        return json.loads(content)
    except Exception as e:
        logger.error('Parse konten:{} ke json error:{}.'.format(content, e))
        return None


# Kembalikan hasil evaluasi kepatuhan dan tulis ke Cloud Config. Anda dapat langsung menyalin kode contoh berikut. 
def put_evaluations(creds, result_token, evaluations):
    """
    Panggil API Cloud Config untuk mengembalikan hasil evaluasi kepatuhan dan tulis hasilnya ke Cloud Config. 
    :param context: konteks Function Compute.
    :param result_token: token hasil.
    :param evaluations: hasil evaluasi kepatuhan.
    :return: None
    """
    # Akun Anda harus diberi peran layanan Function Compute yang dilampirkan dengan kebijakan AliyunConfigFullAccess. 
    client = AcsClient(creds.access_key_id, creds.access_key_secret, region_id='ap-southeast-1')

    # Buat permintaan dan tentukan parameter. Dalam contoh ini, parameter domain diatur ke config.ap-southeast-1.aliyuncs.com. 
    request = CommonRequest()
    request.set_domain('config.ap-southeast-1.aliyuncs.com')
    request.set_version('2019-01-08')
    request.set_action_name('PutEvaluations')
    request.add_body_params('ResultToken', result_token)
    request.add_body_params('Evaluations', evaluations)
    request.add_body_params('SecurityToken', creds.security_token)
    request.set_method('POST')

    try:
        response = client.do_action_with_exception(request)
        logger.info('PutEvaluations dengan permintaan: {}, respons: {}.'.format(request, response))
    except Exception as e:
        logger.error('PutEvaluations error: %s' % e)


# Dapatkan detail sumber daya. Anda dapat menyalin kode contoh berikut berdasarkan skenario bisnis Anda. 
def get_discovered_resource(creds, resource_id, resource_type, region_id):
    """
    Panggil operasi API untuk mendapatkan detail sumber daya.
    :param context: konteks Function Compute.
    :param resource_id: ID sumber daya.
    :param resource_type: jenis sumber daya.
    :param region_id: ID wilayah tempat sumber daya berada.
    :return: detail sumber daya.
    """
    # Akun Anda harus diberi peran layanan Function Compute yang dilampirkan dengan kebijakan AliyunConfigFullAccess. 
    client = AcsClient(creds.access_key_id, creds.access_key_secret, region_id='ap-southeast-1')

    request = CommonRequest()
    request.set_domain('config.ap-southeast-1.aliyuncs.com')
    request.set_version('2020-09-07')
    request.set_action_name('GetDiscoveredResource')
    request.add_query_param('ResourceId', resource_id)
    request.add_query_param('ResourceType', resource_type)
    request.add_query_param('Region', region_id)
    request.add_query_param('SecurityToken', creds.security_token)
    request.set_method('GET')

    try:
        response = client.do_action_with_exception(request)
        resource_result = str(response, encoding='utf-8')
        return resource_result
    except Exception as e:
        logger.error('GetDiscoveredResource error: %s' % e)
Penting

Untuk mendapatkan nama parameter aturan yang ingin Anda konfigurasikan, kami sarankan Anda melihat parameter inti dari konfigurasi sumber daya yang ditentukan oleh parameter konfigurasi dalam kode di konsol Cloud Config. Untuk informasi lebih lanjut, lihat Langkah 6 dalam Lihat Informasi tentang Sumber Daya.

Parameter Input

Parameter input dari fungsi aturan Function Compute dapat dibagi menjadi dua kategori: konfigurasi sumber daya dan informasi aturan. Dalam pesan acara, bidang configurationItem menyimpan parameter input konfigurasi sumber daya, dan bidang ruleParameters menyimpan parameter input fungsi aturan. Konten yang dikirim Cloud Config ke Function Compute bervariasi berdasarkan trigger type aturan.

Catatan

Untuk informasi lebih lanjut tentang cara mendapatkan parameter input fungsi aturan dari Function Compute, lihat Konfigurasi Pencatatan.

  • Jika parameter Trigger diatur ke Periodic Execution, Cloud Config tidak mengirim konfigurasi sumber daya ke Function Compute.

    Saat aturan baru dieksekusi untuk pertama kali, aturan dieksekusi secara otomatis secara berkala, atau aturan dieksekusi secara manual, Cloud Config hanya mengirim catatan yang tidak berisi konfigurasi sumber daya ke Function Compute. Contoh kode berikut menunjukkan contoh JSON.

    {
        "orderingTimestamp": 1716365226714,
        "invokingEvent": {
            "accountId": 120886317861****,
            "messageType": "ScheduledNotification",
            "notificationCreationTimestamp": 1716365226714,
            "configurationType": "NONE"
        },
        "ruleParameters": {
            "CpuCount": "2"
        },
        "resultToken": "HLQr3BZx/C+DLjwudFcYdXxZFPF2HnGqlg1uHceZ5kDEFeQF2K5LZGofyhn+GE4NP5VgkwANUH3qcdeSjWwODk1ymtmLWLzFV4JForVWYIKdbwwhbDBOgVwF7Ov9c3uVCNz/KpxNElwhTzMkZB95U1vmLs4vUYXuB/Txw4jiCYBYZZnVumhwXWswTLvAhIe5Y451FckObyM3I47AaB+4KtDW3I5q8O+Kx7eSYkqqGTawmJEYjvWXz9CHHMLFtNYyJX54a35mpVdxFSvgeXYDJTStxqb+d9UH/162fZh7T78OHxpQZgl8bcXzZhml****"
    }
  • Jika parameter Trigger diatur ke Configuration Change, Cloud Config mengirim konfigurasi sumber daya ke Function Compute.

    Saat aturan baru dieksekusi untuk pertama kali, aturan dieksekusi secara otomatis secara berkala, atau aturan dieksekusi secara manual, Cloud Config mengirim konfigurasi sumber daya ke Function Compute satu per satu. Saat sumber daya baru ditambahkan atau sumber daya yang ada diubah, Cloud Config hanya mengirim konfigurasi sumber daya tunggal yang berubah ke Function Compute. Contoh kode berikut menunjukkan contoh JSON.

    {
        "orderingTimestamp":1695786337959,
        "invokingEvent":{
            "accountId":120886317861****,
            "messageType":"Manual",
            "notificationCreationTimestamp":1695786337959,
            "configurationType":"COMMON",
            "configurationItem":{
                "accountId":120886317861****,
                "arn":"acs:ecs:ap-southeast-1:120886317861****:instance/i-t4n0vr6x7v54jdbu****",
                "availabilityZone":"ap-southeast-1a",
                "regionId":"ap-southeast-1",
                "configuration":"{\\"ResourceGroupId\\":\\"\\",\\"Memory\\":4096,\\"InstanceChargeType\\":\\"PostPaid\\",\\"Cpu\\":2,\\"OSName\\":\\"Alibaba Cloud Linux  3.2104 LTS 64\xe4\xbd\x8d\\",\\"InstanceNetworkType\\":\\"vpc\\",\\"InnerIpAddress\\":{\\"IpAddress\\":[]},\\"ExpiredTime\\":\\"2099-12-31T15:59Z\\",\\"ImageId\\":\\"aliyun_3_x64_20G_alibase_20230727.vhd\\",\\"EipAddress\\":{\\"AllocationId\\":\\"\\",\\"IpAddress\\":\\"\\",\\"InternetChargeType\\":\\"\\"},\\"ImageOptions\\":{},\\"VlanId\\":\\"\\",\\"HostName\\":\\"iZt4n0vr6x7v54jdbuk****\\",\\"Status\\":\\"Running\\",\\"HibernationOptions\\":{\\"Configured\\":false},\\"MetadataOptions\\":{\\"HttpTokens\\":\\"\\",\\"HttpEndpoint\\":\\"\\"},\\"InstanceId\\":\\"i-t4n0vr6x7v54jdbu****\\",\\"StoppedMode\\":\\"Not-applicable\\",\\"CpuOptions\\":{\\"ThreadsPerCore\\":2,\\"Numa\\":\\"ON\\",\\"CoreCount\\":1},\\"StartTime\\":\\"2023-08-18T09:02Z\\",\\"DeletionProtection\\":false,\\"VpcAttributes\\":{\\"PrivateIpAddress\\":{\\"IpAddress\\":[\\"192.168.XX.XX\\"]},\\"VpcId\\":\\"vpc-t4nmwd0l9a7aj09yr****\\",\\"VSwitchId\\":\\"vsw-t4njclm0dlz2szayi****\\",\\"NatIpAddress\\":\\"\\"},\\"SecurityGroupIds\\":{\\"SecurityGroupId\\":[\\"sg-t4n5pulxj2lvechw****\\"]},\\"InternetChargeType\\":\\"PayByTraffic\\",\\"InstanceName\\":\\"zs-test-peer****\\",\\"DeploymentSetId\\":\\"\\",\\"InternetMaxBandwidthOut\\":0,\\"SerialNumber\\":\\"8c3fadf7-2ea1-4486-84ce-7784aeb7****\\",\\"OSType\\":\\"linux\\",\\"CreationTime\\":\\"2023-08-18T09:02Z\\",\\"AutoReleaseTime\\":\\"\\",\\"Description\\":\\"\\",\\"InstanceTypeFamily\\":\\"ecs.c7\\",\\"DedicatedInstanceAttribute\\":{\\"Tenancy\\":\\"\\",\\"Affinity\\":\\"\\"},\\"PublicIpAddress\\":{\\"IpAddress\\":[]},\\"GPUSpec\\":\\"\\",\\"NetworkInterfaces\\":{\\"NetworkInterface\\":[{\\"Type\\":\\"Primary\\",\\"PrimaryIpAddress\\":\\"192.168.XX.XX\\",\\"MacAddress\\":\\"00:16:3e:04:XX:XX\\",\\"NetworkInterfaceId\\":\\"eni-t4n16tmnpp794y1o****\\",\\"PrivateIpSets\\":{\\"PrivateIpSet\\":[{\\"PrivateIpAddress\\":\\"192.168.XX.XX\\",\\"Primary\\":true}]}}]},\\"SpotPriceLimit\\":0.0,\\"SaleCycle\\":\\"\\",\\"DeviceAvailable\\":true,\\"InstanceType\\":\\"ecs.c7.large\\",\\"OSNameEn\\":\\"Alibaba Cloud Linux  3.2104 LTS 64 bit\\",\\"SpotStrategy\\":\\"NoSpot\\",\\"IoOptimized\\":true,\\"ZoneId\\":\\"ap-southeast-1a\\",\\"ClusterId\\":\\"\\",\\"EcsCapacityReservationAttr\\":{\\"CapacityReservationPreference\\":\\"\\",\\"CapacityReservationId\\":\\"\\"},\\"DedicatedHostAttribute\\":{\\"DedicatedHostId\\":\\"\\",\\"DedicatedHostName\\":\\"\\",\\"DedicatedHostClusterId\\":\\"\\"},\\"GPUAmount\\":0,\\"OperationLocks\\":{\\"LockReason\\":[]},\\"InternetMaxBandwidthIn\\":-1,\\"Recyclable\\":false,\\"RegionId\\":\\"ap-southeast-1\\",\\"CreditSpecification\\":\\"\\"}",
                "captureTime":1695786337959,
                "resourceCreateTime":1692349320000,
                "resourceId":"i-t4n0vr6x7v54jdbu****",
                "resourceName":"zs-test-peer****",
                "resourceGroupId":"rg-acfmw3ty5y7****",
                "resourceType":"ACS::ECS::Instance",
                "tags":"{}"
            }
        },
        "ruleParameters":{
            "CpuCount":"2"
        },
        "resultToken":"HLQr3BZx/C+DLjwudFcYdXxZFPF2HnGqlg1uHceZ5kDEFeQF2K5LZGofyhn+GE4NP5VgkwANUH3qcdeSjWwODk1ymtmLWLzFV4JForVWYIKdbwwhbDBOgVwF7Ov9c3uVCNz/KpxNElwhTzMkZB95U1vmLs4vUYXuB/Txw4jiCYBYZZnVumhwXWswTLvAhIe5Y451FckObyM3I47AaB+4KtDW3I5q8O+Kx7eSYkqqGTawmJEYjvWXz9CHHMLFtNYyJX54a35mpVdxFSvgeXYDJTStxqb+d9UH/162fZh7T78OHxpQZgl8bcXzZhml****"
    }

    Jika ukuran file konfigurasi sumber daya yang dikirim oleh Cloud Config tidak kurang dari 100 KB, Cloud Config hanya mengirim informasi ringkasan sumber daya, tidak termasuk bidang konfigurasi dalam file konfigurasi sumber daya. Contoh kode berikut menunjukkan contoh JSON.

    Catatan

    Anda dapat memanggil operasi GetDiscoveredResource untuk mendapatkan konfigurasi sumber daya lengkap.

    {
        "orderingTimestamp":1695786337959,
        "invokingEvent":{
            "accountId":120886317861****,
            "messageType":"Manual",
            "notificationCreationTimestamp":1695786337959,
            "configurationType":"OVERSIZE",
            "configurationItem":{
                "accountId":120886317861****,
                "arn":"acs:ecs:ap-southeast-1:120886317861****:instance/i-t4n0vr6x7v54jdbu****",
                "availabilityZone":"ap-southeast-1a",
                "regionId":"ap-southeast-1",
                "captureTime":1695786337959,
                "resourceCreateTime":1692349320000,
                "resourceId":"i-t4n0vr6x7v54jdbu****",
                "resourceName":"zs-test-peer****",
                "resourceGroupId":"rg-acfmw3ty5y7****",
                "resourceType":"ACS::ECS::Instance",
                "tags":"{}"
            }
        },
        "ruleParameters":{
            "CpuCount":"2"
        },
        "resultToken":"HLQr3BZx/C+DLjwudFcYdXxZFPF2HnGqlg1uHceZ5kDEFeQF2K5LZGofyhn+GE4NP5VgkwANUH3qcdeSjWwODk1ymtmLWLzFV4JForVWYIKdbwwhbDBOgVwF7Ov9c3uVCNz/KpxNElwhTzMkZB95U1vmLs4vUYXuB/Txw4jiCYBYZZnVumhwXWswTLvAhIe5Y451FckObyM3I47AaB+4KtDW3I5q8O+Kx7eSYkqqGTawmJEYjvWXz9CHHMLFtNYyJX54a35mpVdxFSvgeXYDJTStxqb+d9UH/162fZh7T78OHxpQZgl8bcXzZhml****"
    }

Tabel berikut menjelaskan jenis parameter input dan parameter utama.

Kategori

Parameter

Deskripsi

Konfigurasi Sumber Daya

configurationItem

Konfigurasi sumber daya. Konfigurasi berikut disertakan: ID akun Alibaba Cloud tempat sumber daya berada, Nama Sumber Daya Alibaba Cloud (ARN) dari sumber daya, ID zona tempat sumber daya berada, ID wilayah tempat sumber daya berada, konfigurasi detail sumber daya, timestamp ketika Cloud Config mendeteksi perubahan sumber daya dan membuat log, timestamp saat sumber daya dibuat, status sumber daya, ID sumber daya, nama sumber daya, tipe sumber daya, dan tag.

configurationType

Tipe konfigurasi yang didorong. Nilai valid:

  • COMMON: Jika ukuran configurationItem kurang dari 100 KB, konfigurasi sumber daya didorong sesuai harapan.

  • OVERSIZE: Jika ukuran configurationItem lebih besar atau sama dengan 100 KB, operasi GetDiscoveredResource dipanggil untuk menanyakan detail sumber daya.

Informasi Aturan

orderingTimestamp

Timestamp awal eksekusi evaluasi.

invokingEvent

Acara pemanggilan.

accountId

ID akun dari acara pemanggilan.

messageType

Tipe pesan. Nilai valid:

  • Manual: Aturan dipicu secara manual.

  • ConfigurationItemChangeNotification: Aturan dipicu oleh perubahan konfigurasi.

  • ScheduledNotification: Aturan dipicu secara berkala.

notificationCreationTimestamp

Timestamp ketika aturan dipicu.

ruleParameters

Parameter input aturan kustom. Nama dan nilai yang diharapkan dari parameter input aturan kustom harus ditentukan.

resultToken

Token hasil di Function Compute.