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
ImageIddalam 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 terkait Visibilitas paket penyebaran Tidak ada Pribadi (hanya Anda yang dapat menggunakannya) Setidaknya satu layanan publik Publik Semua layanan bersifat pribadi Pribadi Suatu layanan memiliki daftar putih Daftar 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 resource | Parameter ROS | Tipe resource ROS | Parameter Terraform | Tipe resource Terraform |
|---|---|---|---|---|
| Instans ECS | ImageId | ALIYUN::ECS::Instance | image_id | alicloud_instance |
| Kelompok instans ECS | ImageId | ALIYUN::ECS::InstanceGroup | — | — |
| Kelompok Auto Scaling | ImageId | ALIYUN::ESS::ScalingGroup | image_id | ALIYUN::ESS::ScalingGroup |
| Kluster E-HPC | ImageId | ALIYUN::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:
Citra ECS sebagai sumber. Compute Nest mendukung dua jenis citra:
Custom images — Citra ECS yang Anda buat di Akun Alibaba Cloud Anda. Jika belum memiliki, buat custom image dari sebuah instans.
Gambar Marketplace Alibaba Cloud — citra yang tersedia di Alibaba Cloud Marketplace.
Templat ROS atau Terraform yang memenuhi persyaratan templat di atas.
Buat dan terbitkan paket penyebaran
Masuk ke atau Compute Nest console. Di panel navigasi sebelah kiri, klik Service Deployment Package. Pada bagian Deployment Package, klik Create Deployment Package.
Di bagian Deployment Package Information, konfigurasikan parameter berikut.
Parameter Description Deployment Package Name 3–128 karakter; huruf, angka, dan garis bawah (_). Tidak dapat diubah setelah dibuat. Version Name 3–50 karakter; huruf, angka, dan garis bawah (_). Description 10–500 karakter. Resource Group Kelompok sumber daya untuk paket penyebaran ini. Kelompok sumber daya memungkinkan Anda mengelompokkan resource berdasarkan penggunaan, izin, dan wilayah. Lihat Mengelola kelompok sumber daya. Tag Settings Tag yang akan disambungkan ke paket penyebaran. Maksimal 20 tag per paket. Lihat Menambahkan tag kustom. Konfigurasikan konten paket penyebaran citra ECS.
Di bagian Deployment Package Version, atur Deployment Package Version menjadi ECS Image. Konfigurasikan Image Type dan Select Product berdasarkan citra yang telah Anda siapkan.
Di bagian Distribution Settings, pilih wilayah untuk mendistribusikan paket tersebut. > Important: Pilih minimal satu wilayah.
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.

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.
Masuk ke Konsol Compute Nest. Di panel navigasi kiri, klik My Services.
Di tab Created Services, klik Create Service.
Di halaman Create Service, atur Select Service Creation Method menjadi Custom Launch dan Select Service Type menjadi Private Service, lalu klik Next: Configure Settings.

Tentukan informasi dasar layanan. Di bagian Template, pilih atau masukkan templat. Contoh ini menggunakan Scenario-based Template.
Jika templat berisi parameter
ImageId, konfigurasikan Associate ECS Image di bagian Deployment Package Association. Templat contohTemplat 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.
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.

Simpan dan uji layanan. Setelah pengujian berhasil, pastikan layanan memenuhi kriteria tinjauan dan kirimkan untuk ditinjau.
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

ID citra setelah penggantian

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
Buat layanan — panduan lengkap untuk membuat layanan Compute Nest.
Buat versi baru — perbarui wilayah distribusi atau konten citra dengan membuat versi paket penyebaran baru.
Hapus paket penyebaran — hapus paket penyebaran atau versi yang tidak lagi diperlukan.
Konfigurasikan pengaturan pembaruan layanan — atur cara layanan Anda menangani pembaruan saat tersedia versi paket penyebaran baru.