All Products
Search
Document Center

Compute Nest:Artefak citra ECS

Last Updated:Apr 01, 2026

Citra ECS bersifat spesifik per wilayah, sehingga menyulitkan penerapan layanan multi-wilayah: Anda harus mereplikasi citra secara manual ke setiap wilayah target, memperbarui ID citra per wilayah dalam templat, serta mengelola izin secara terpisah—dan mengulangi semua langkah ini setiap kali merilis versi citra baru.

Paket penyebaran citra ECS mengotomatiskan proses tersebut. Cukup buat paket penyebaran, kaitkan dengan citra sumber Anda, dan Compute Nest akan menangani replikasi citra, pemetaan ID citra per wilayah, serta pengelolaan izin di semua wilayah yang dipilih.

Cara kerja

Saat Anda menerbitkan paket penyebaran citra ECS, Compute Nest secara otomatis melakukan tiga operasi berikut:

  • Replikasi citra — Compute Nest mereplikasi citra ECS sumber Anda ke akun umum Compute Nest yang digunakan untuk distribusi multi-wilayah.

  • Pemetaan citra — Saat pelanggan menerapkan layanan Anda, Compute Nest mendeteksi wilayah target dan mengganti nilai ImageId dalam templat Anda dengan ID citra regional yang sesuai. Pemetaan ini bersifat dinamis; Anda tidak perlu memperbarui templat untuk setiap wilayah.

  • Pengelolaan izin — Paket penyebaran mewarisi visibilitas dari layanan yang terkait dengannya:

    Layanan terkaitVisibilitas paket penyebaran
    Tidak adaPribadi (hanya Anda yang dapat menggunakannya)
    Setidaknya satu layanan publikPublik
    Semua layanan bersifat pribadiPribadi
    Suatu layanan memiliki daftar putihDaftar putih yang sama berlaku

Persyaratan templat

Sebelum membuat paket penyebaran, pastikan templat ROS atau Terraform Anda memenuhi persyaratan berikut.

Batasan parameter (berlaku untuk ROS dan Terraform): Nilai ID citra harus berupa string literal statis. Anda tidak boleh menyediakan nilai ini melalui parameter input atau fungsi bawaan.

Tipe resourceParameter ROSTipe resource ROSParameter TerraformTipe resource Terraform
Instans ECSImageIdALIYUN::ECS::Instanceimage_idalicloud_instance
Kelompok instans ECSImageIdALIYUN::ECS::InstanceGroup
Kelompok Auto ScalingImageIdALIYUN::ESS::ScalingGroupimage_idALIYUN::ESS::ScalingGroup
Kluster E-HPCImageIdALIYUN::EHPC::Cluster

Untuk templat ROS, tentukan ImageId di bagian Resources. Untuk templat Terraform, tentukan image_id di blok resource.

Buat paket penyebaran citra ECS

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Buat dan terbitkan paket penyebaran

  1. Masuk ke atau Compute Nest console. Di panel navigasi sebelah kiri, klik Service Deployment Package. Pada bagian Deployment Package, klik Create Deployment Package.

  2. Di bagian Deployment Package Information, konfigurasikan parameter berikut.

    ParameterDescription
    Deployment Package Name3–128 karakter; huruf, angka, dan garis bawah (_). Tidak dapat diubah setelah dibuat.
    Version Name3–50 karakter; huruf, angka, dan garis bawah (_).
    Description10–500 karakter.
    Resource GroupKelompok sumber daya untuk paket penyebaran ini. Kelompok sumber daya memungkinkan Anda mengelompokkan resource berdasarkan penggunaan, izin, dan wilayah. Lihat Mengelola kelompok sumber daya.
    Tag SettingsTag yang akan disambungkan ke paket penyebaran. Maksimal 20 tag per paket. Lihat Menambahkan tag kustom.
  3. Konfigurasikan konten paket penyebaran citra ECS.

    1. Di bagian Deployment Package Version, atur Deployment Package Version menjadi ECS Image. Konfigurasikan Image Type dan Select Product berdasarkan citra yang telah Anda siapkan.

    2. Di bagian Distribution Settings, pilih wilayah untuk mendistribusikan paket tersebut. > Important: Pilih minimal satu wilayah.

    3. Klik Publish Deployment Package.Note: Untuk menguji paket sebelum menerbitkannya, klik terlebih dahulu Save Deployment Package. Setelah pengujian selesai, klik Publish Deployment Package. Sebelum diterbitkan, paket hanya dapat diuji di wilayah tempat citra ECS sumber berada—bukan di wilayah distribusi yang dipilih. Setelah versi diterbitkan, kontennya dikunci; untuk melakukan perubahan, buat versi baru atau paket penyebaran baru.

    image

  4. Kembali ke halaman Service Deployment Package, temukan paket penyebaran yang telah Anda buat, lalu klik namanya untuk membuka halaman Deployment Package Version. Proses distribusi dapat memakan waktu beberapa menit hingga beberapa jam, tergantung wilayah dan ukuran citra. Setelah paket mencapai status Available, klik tab Deployment Package Version, temukan versi tersebut, lalu klik View di kolom Actions untuk meninjau hasil distribusi.

Gunakan paket penyebaran citra ECS

Contoh berikut membuat layanan pribadi untuk menunjukkan cara mengaitkan paket penyebaran citra ECS dengan templat layanan.

  1. Masuk ke Konsol Compute Nest. Di panel navigasi kiri, klik My Services.

  2. Di tab Created Services, klik Create Service.

  3. Di halaman Create Service, atur Select Service Creation Method menjadi Custom Launch dan Select Service Type menjadi Private Service, lalu klik Next: Configure Settings.

    image

  4. Tentukan informasi dasar layanan. Di bagian Template, pilih atau masukkan templat. Contoh ini menggunakan Scenario-based Template.

  5. Jika templat berisi parameter ImageId, konfigurasikan Associate ECS Image di bagian Deployment Package Association. Templat contoh

    Templat contoh ini hanya untuk pengujian.
    ROSTemplateFormatVersion: '2015-09-01'
    Description:
      en: This template deploys custom image for single instance, supports creating new
        VPC and specifying VPC.
      zh-cn:
    Conditions:
      CreateVpcConditions:
        Fn::Equals:
        - true
        - Ref: WhetherCreateVpc
      IfAllocatePublicIP:
        Fn::Equals:
        - Ref: AllocatePublicIP
        - true
    Parameters:
      PayType:
        Type: String
        Label:
          en: ECS Instance Charge Type
          zh-cn:
        AssociationProperty: ChargeType
        AssociationPropertyMetadata:
          LocaleKey: InstanceChargeType
        Default: PostPaid
        AllowedValues:
          - PostPaid
          - PrePaid
      PayPeriodUnit:
        Type: String
        Label:
          en: Pay Period Unit
          zh-cn:
        AssociationProperty: PayPeriodUnit
        AssociationPropertyMetadata:
          Visible:
            Condition:
              Fn::Not:
                Fn::Equals:
                  - ${PayType}
                  - PostPaid
        Default: Month
        AllowedValues:
          - Month
          - Year
      PayPeriod:
        Type: Number
        Label:
          en: Period
          zh-cn:
        AssociationProperty: PayPeriod
        AssociationPropertyMetadata:
          Visible:
            Condition:
              Fn::Not:
                Fn::Equals:
                  - ${PayType}
                  - PostPaid
        Default: 1
        AllowedValues:
          - 1
          - 2
          - 3
          - 4
          - 5
          - 6
          - 7
          - 8
          - 9
      EcsInstanceType:
        Type: String
        Label:
          en: Instance Type
          zh-cn:
        AssociationProperty: ALIYUN::ECS::Instance::InstanceType
        AssociationPropertyMetadata:
          ZoneId: ${ZoneId}
          InstanceChargeType: ${InstanceChargeType}
      ZoneId:
        Type: String
        Label:
          en: Availability Zone
          zh-cn:
        AssociationProperty: ALIYUN::ECS::Instance::ZoneId
      WhetherCreateVpc:
        Type: Boolean
        Label:
          en: WhetherCreateVpc
          zh-cn:
        Default: false
      VpcCidrBlock:
        Type: String
        Label:
          en: VPC CIDR IPv4 Block
          zh-cn:
        Description:
          zh-cn:
          en: 'The ip address range of the VPC in the CidrBlock form; <br>You can use
            the following ip address ranges and their subnets: <br><font color=''green''>[10.0.0.0/8]</font><br><font
            color=''green''>[172.16.0.0/12]</font><br><font color=''green''>[192.168.0.0/16]</font>'
        AssociationProperty: ALIYUN::VPC::VPC::CidrBlock
        AssociationPropertyMetadata:
          Visible:
            Condition:
              Fn::Equals:
              - ${WhetherCreateVpc}
              - true
        Default: 192.168.0.0/16
      VSwitchCidrBlock:
        Type: String
        Label:
          en: VSwitch CIDR Block
          zh-cn:
        Description:
          zh-cn:
          en: Must belong to the subnet segment of VPC.
        AssociationProperty: ALIYUN::VPC::VSwitch::CidrBlock
        AssociationPropertyMetadata:
          VpcCidrBlock: VpcCidrBlock
          Visible:
            Condition:
              Fn::Equals:
              - ${WhetherCreateVpc}
              - true
        Default: 192.168.1.0/24
      VpcId:
        Type: String
        Label:
          en: VPC ID
          zh-cn:
        AssociationProperty: ALIYUN::ECS::VPC::VPCId
        AssociationPropertyMetadata:
          Visible:
            Condition:
              Fn::Equals:
              - ${WhetherCreateVpc}
              - false
        Default: ''
      VSwitchId:
        Type: String
        Label:
          en: VSwitch ID
          zh-cn:
        AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
        AssociationPropertyMetadata:
          VpcId: ${VpcId}
          ZoneId: ${ZoneId}
          Visible:
            Condition:
              Fn::Equals:
              - ${WhetherCreateVpc}
              - false
        Default: ''
      InstancePassword:
        Type: String
        Label:
          en: Instance Password
          zh-cn:
        Description:
          en: Server login password, Length 8-30, must contain three(Capital letters,
            lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol
            in)
          zh-cn:
        ConstraintDescription:
          en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers,
            ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)
          zh-cn:
        AssociationProperty: ALIYUN::ECS::Instance::Password
        AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
        MinLength: 8
        MaxLength: 30
        NoEcho: true
      SystemDiskCategory:
        Type: String
        Label:
          en: System Disk Category
          zh-cn:
        AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
        AssociationPropertyMetadata:
          LocaleKey: DiskCategory
          InstanceType: ${EcsInstanceType}
        AllowedValues:
        - cloud_efficiency
        - cloud_ssd
        - cloud_essd
      SystemDiskSize:
        Type: Number
        Label:
          zh-cn:
          en: System Disk Space (GB)
        Default: 200
      DataDiskCategory:
        Type: String
        Label:
          zh-cn:
          en: Data disk type
        AssociationProperty: ALIYUN::ECS::Disk::DataDiskCategory
        AssociationPropertyMetadata:
          InstanceType: EcsInstanceType
          ZoneId: ZoneId
          LocaleKey: DiskCategory
      DataDiskSize:
        Type: Number
        Label:
          zh-cn:
          en: Data disk space
        Description:
          zh-cn:
          en: 'ECS Instance disk size, range of values: 20-32768, units: GB'
        Default: 200
        MinValue: 20
        MaxValue: 32768
      AllocatePublicIP:
        Type: Boolean
        Label:
          zh-cn:
          en: allocate public ip
        Default: true
      InternetMaxBandwidthOut:
        Type: Number
        Label:
          zh-cn:
          en: Internet Max Bandwidth Out
        Description:
          zh-cn:
          en: no public ip if zero
        AssociationPropertyMetadata:
          Visible:
            Condition:
              Fn::Equals:
              - ${AllocatePublicIP}
              - true
        Default: 5
        MinValue: 0
        MaxValue: 100
    Resources:
      EcsVpc:
        Type: ALIYUN::ECS::VPC
        Condition: CreateVpcConditions
        Properties:
          CidrBlock:
            Ref: VpcCidrBlock
          VpcName:
            Ref: ALIYUN::StackName
      EcsVSwitch:
        Type: ALIYUN::ECS::VSwitch
        Condition: CreateVpcConditions
        Properties:
          ZoneId:
            Ref: ZoneId
          VpcId:
            Ref: EcsVpc
          CidrBlock:
            Ref: VSwitchCidrBlock
      EcsSecurityGroup:
        Type: ALIYUN::ECS::SecurityGroup
        Properties:
          # Tentukan nama grup keamanan berdasarkan nama perangkat lunak.
          #SecurityGroupName: nginx-sg
          VpcId:
            Fn::If:
            - CreateVpcConditions
            - Ref: EcsVpc
            - Ref: VpcId
          # Tentukan aturan masuk grup keamanan berdasarkan port yang didengarkan oleh perangkat lunak. Secara default, semua port diaktifkan untuk arah keluar.
          #SecurityGroupIngress:
          #  - PortRange: 80/80
          #    Priority: 1
          #    SourceCidrIp: 0.0.0.0/0
          #    IpProtocol: tcp
      EcsInstanceGroup:
        Type: ALIYUN::ECS::InstanceGroup
        Properties:
          ZoneId:
            Ref: ZoneId
          VpcId:
            Fn::If:
            - CreateVpcConditions
            - Ref: EcsVpc
            - Ref: VpcId
          VSwitchId:
            Fn::If:
            - CreateVpcConditions
            - Ref: EcsVSwitch
            - Ref: VSwitchId
          SecurityGroupId:
            Ref: EcsSecurityGroup
          ImageId: centos_7
          IoOptimized: optimized
          InstanceChargeType:
            Ref: PayType
          PeriodUnit:
            Ref: PayPeriodUnit
          Period:
            Ref: PayPeriod
          SystemDiskCategory:
            Ref: SystemDiskCategory
          # Anda dapat menyesuaikan ukuran disk sistem berdasarkan kebutuhan bisnis Anda.
          SystemDiskSize:
            Ref: SystemDiskSize
          # Konfigurasi disk data.
          DiskMappings:
          - Category:
              Ref: DataDiskCategory
            Size:
              Ref: DataDiskSize
          MaxAmount: 1
          InstanceType:
            Ref: EcsInstanceType
          Password:
            Ref: InstancePassword
          # Bandwidth publik. Nilai 0 menunjukkan bahwa akses Internet dinonaktifkan.
          InternetMaxBandwidthOut:
            Fn::If:
            - IfAllocatePublicIP
            - Ref: InternetMaxBandwidthOut
            - 0
          InstanceName:
            Fn::Join:
            - '-'
            - - Ref: ALIYUN::StackName
              - '[1,4]'
      WaitConditionHandle:
        Type: ALIYUN::ROS::WaitConditionHandle
        Properties: {}
      WaitCondition:
        Type: ALIYUN::ROS::WaitCondition
        Properties:
          Count: 1
          Handle:
            Ref: WaitConditionHandle
          # Periode timeout untuk menjalankan perintah.
          Timeout: 300
      InstanceRunCommand:
        Type: ALIYUN::ECS::RunCommand
        Properties:
          InstanceIds:
            Fn::GetAtt:
            - EcsInstanceGroup
            - InstanceIds
          CommandContent:
            Fn::Sub:
            - |
              #!/bin/bash
              # 1. Jika Anda menggunakan disk data, Anda harus memformat disk data dan memasangnya ke direktori yang ditentukan. Dalam contoh ini, disk data dipasang ke direktori /data.
              init_and_mount_data_disk() {
                local fs_type=$1
                local mount_point=$2
    
                # Kueri perangkat disk dan kecualikan partisi disk.
                devices=(`lsblk -o NAME,FSTYPE --noheadings --nodeps | awk '$2 == "" {print $1}'`)
                # Kueri perangkat disk yang tidak memiliki sistem file.
                for device in ${!devices[@]};
                do
                  lsblk -o NAME,FSTYPE --noheadings  | awk '$2 != "" {print $1}' | grep ${!device}
                  if [[ $?  -eq 1 ]]; then
                    data_disk=${!device}
                    break
                  fi
                done
    
                # Buat sistem file untuk disk data.
                mkfs -t ${!fs_type} /dev/${!data_disk}
    
                cp /etc/fstab /etc/fstab.bak
                mkdir ${!mount_point}
                # Perbarui file /etc/fstab dan pasang disk.
                echo `blkid /dev/${!data_disk} | awk '{print $2}' | sed 's/\\\"//g'` ${!mount_point} ext4 defaults 0 0 >> /etc/fstab
                mount -a
              }
    
              # Pasang disk ke direktori /data.
              init_and_mount_data_disk ext4 /data
    
              # 2. Instal perangkat lunak atau inisialisasi perangkat lunak. Misalnya, tentukan direktori disk data sebagai direktori file data.
              # yum install -y nginx
    
              # 3. Jika Anda perlu menjalankan perangkat lunak saat startup, tambahkan dan aktifkan layanan sistem yang sesuai.
              # systemctl enable nginx.service
    
              # 4. Konfigurasikan skrip startup atau jalankan layanan sistem.
              # systemctl start nginx.service
    
              # 5. Jika skrip berhasil dieksekusi, picu callback dan hentikan penantian berdasarkan WaitCondition.
              ${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}"
              # Jika skrip gagal dieksekusi, jalankan perintah berikut untuk mengembalikan FAILURE dan pesan kesalahan.
              # ${CurlCli} -d "{\"Data\" : \"error message\", \"status\" : \"FAILURE\"}"
            - CurlCli:
                Fn::GetAtt:
                - WaitConditionHandle
                - CurlCli
          Type: RunShellScript
          # Atur periode timeout berdasarkan waktu eksekusi perintah. Satuan: detik. Jika eksekusi perintah melebihi batas waktu, penerapan gagal.
          Timeout: 300
    
    # Output didefinisikan berdasarkan kebutuhan perangkat lunak.
    
    # Dalam contoh ini, NGINX digunakan dan output-nya adalah URL publik untuk mengakses website.
    #Outputs:
    #  endpoint:
    #    Condition: IfAllocatePublicIP
    #    Description:
    #      zh-cn:
    #      en: Public IP Addresses
    #    Value:
    #      Fn::Sub:
    #        - http://${ServerAddress}
    #        - ServerAddress:
    #            Fn::Select:
    #              - 0
    #              - Fn::GetAtt:
    #                  - EcsInstanceGroup
    #                  - PublicIps
    Metadata:
      ALIYUN::ROS::Interface:
    
    ## Urutan kelompok parameter menentukan urutan parameter yang ditampilkan di halaman pembuatan instans layanan.
    
    ## Jika sebagian besar tipe instans didukung, seperti instans arsitektur x86, Anda dapat menentukan konfigurasi zona terlebih dahulu dengan mengacu pada komentar.
    #    ParameterGroups:
    #      - Parameters:
    #          - ZoneId
    #        Label:
    #          default:
    #            zh-cn:
    #            en: Zone Configuration
    #      - Parameters:
    #          - WhetherCreateVpc
    #          - VpcCidrBlock
    #          - VSwitchCidrBlock
    #          - VpcId
    #          - VSwitchId
    #        Label:
    #          default:
    #            zh-cn:
    #            en: VPC Configuration
    #      - Parameters:
    #          - PayType
    #          - PayPeriodUnit
    #          - PayPeriod
    #        Label:
    #          default:
    #            en: PayType Configuration
    #            zh-cn:
    #      - Parameters:
    #          - EcsInstanceType
    #          - InstancePassword
    #          - SystemDiskCategory
    #          - SystemDiskSize
    #          - DataDiskCategory
    #          - DataDiskSize
    #          - AllocatePublicIP
    #          - InternetMaxBandwidthOut
    #        Label:
    #          default:
    #            en: Instance
    #            zh-cn:
        ParameterGroups:
        - Parameters:
            - PayType
            - PayPeriodUnit
            - PayPeriod
          Label:
            default:
              en: PayType Configuration
              zh-cn:
        - Parameters:
          - EcsInstanceType
          Label:
            default:
              zh-cn:
              en: ECS Instance Type Configuration
        - Parameters:
          - ZoneId
          Label:
            default:
              zh-cn:
              en: Zone Configuration
        - Parameters:
          - WhetherCreateVpc
          - VpcCidrBlock
          - VSwitchCidrBlock
          - VpcId
          - VSwitchId
          Label:
            default:
              zh-cn:
              en: VPC Configuration
        - Parameters:
          - InstancePassword
          - SystemDiskCategory
          - SystemDiskSize
          - DataDiskCategory
          - DataDiskSize
          - AllocatePublicIP
          - InternetMaxBandwidthOut
          Label:
            default:
              en: Instance
              zh-cn:
        TemplateTags:
        - acs:example:Independent software vendor (ISV) software deployment: Templat ini digunakan untuk menerapkan satu instans dengan disk data menggunakan custom image. Alamat IP publik bersifat opsional.

    image

  6. Klik Select Deployment Package. Di kotak dialog, pilih paket penyebaran dan versinya, lalu klik OK. ID citra sumber dalam templat diganti dengan paket penyebaran citra ECS.

    Penting

    - Versi draft (belum didistribusikan): Citra yang dikaitkan hanya dapat digunakan di wilayah tempat citra tersebut dibuat. - Versi resmi (telah didistribusikan): Citra yang dikaitkan dapat digunakan di wilayah tempat citra tersebut dibuat dan di semua wilayah tempat citra tersebut telah didistribusikan.

    image

  7. Simpan dan uji layanan. Setelah pengujian berhasil, pastikan layanan memenuhi kriteria tinjauan dan kirimkan untuk ditinjau.

  8. Setelah disetujui, terbitkan layanan.

Saat pelanggan membuat instans layanan di suatu wilayah, Compute Nest secara otomatis menggunakan citra yang telah didistribusikan ke wilayah tersebut.

  • ID citra sebelum penggantian

    image

  • ID citra setelah penggantian

    image

Batasan

  • Anda dapat memodifikasi sumber daya cloud dari paket penyebaran citra ECS dalam templat.

  • Setelah versi paket penyebaran diterbitkan, isinya tidak dapat dimodifikasi. Untuk memperbarui citra atau wilayah distribusi, buat versi baru.

Langkah selanjutnya

Referensi