ECS鏡像部署物
計算巢通過ECS鏡像部署物方式解決在多地域部署服務(wù)時,使用ECS鏡像因需要手動完成鏡像復(fù)制、映射和權(quán)限管理等步驟而變得復(fù)雜的問題。本文為您介紹ECS鏡像部署物的原理以及創(chuàng)建和使用方法。
使用背景
為什么使用ECS鏡像部署物?
在部署服務(wù)時,我們常使用ECS鏡像來支持多地域部署。然而,由于ECS鏡像具有地域限制,我們需要在每個目標(biāo)地域復(fù)制這些鏡像,并在模板中為不同的地域指定對應(yīng)的鏡像。這包括了鏡像的復(fù)制、映射以及權(quán)限管理等一系列工作,而且每當(dāng)有新的鏡像版本發(fā)布時,這些步驟都需要重復(fù)執(zhí)行,使得整個過程非常復(fù)雜且繁瑣。
ECS鏡像部署物的優(yōu)勢?
服務(wù)商僅需完成原始鏡像的創(chuàng)建,后續(xù)鏡像復(fù)制、映射、權(quán)限管理等均由計算巢完成,服務(wù)商僅需在計算巢控制臺配置ECS鏡像部署物關(guān)聯(lián)即可。
鏡像復(fù)制:計算巢會將服務(wù)商的原始鏡像復(fù)制到計算巢的通用賬號下,在此賬號下完成鏡像多地域復(fù)制。
鏡像映射:計算巢會識別模板中是否存在
ImageId
的設(shè)置,若存在,則在服務(wù)詳情處可選擇將ImageId與ECS鏡像部署物關(guān)聯(lián),在用戶部署時,計算巢會識別用戶的部署地域,自動選擇該地域?qū)?yīng)鏡像Id替換模板的ImageId處,實現(xiàn)鏡像地域的動態(tài)映射。權(quán)限管理:部署物權(quán)限跟隨服務(wù),若未關(guān)聯(lián)服務(wù),部署物權(quán)限為私有,僅服務(wù)商可用。若關(guān)聯(lián)至少一個公開權(quán)限服務(wù),則ECS鏡像部署物權(quán)限為公開。若全部關(guān)聯(lián)私有權(quán)限服務(wù),則ECS鏡像部署物權(quán)限為私有,此時若服務(wù)新增白名單,則ECS鏡像部署物也會新增對應(yīng)白名單。
使用限制
模板中支持替換ECS部署物的云資源。
ROS
如果部署方式選擇ROS,則需要在ROS模板Resource
中包含鏡像ID:ImageId
。
支持的云資源類型。
ECS實例(ALIYUN::ECS::Instance)
ECS實例組(ALIYUN::ECS::InstanceGroup)
ESS伸縮組(ALIYUN::ESS::ScalingGroup)
彈性高性能計算E-HPC(ALIYUN::EHPC::Cluster)
資源屬性
ImageId
。資源屬性值必須是字符串(鏡像ID),不能是模板輸入?yún)?shù)或者其他模板內(nèi)置函數(shù)。
Terraform
如果部署方式選擇Terraform,則需要在模板中包含鏡像ID:image_id
。
支持的云資源類型。
ECS實例(alicloud_instance)
ESS伸縮組(ALIYUN::ESS::ScalingGroup)
資源屬性
image_id
。資源屬性值必須是字符串(鏡像ID),禁止模板輸入?yún)?shù)或者其他模板內(nèi)置函數(shù)。
創(chuàng)建和使用
前提條件
準(zhǔn)備ECS鏡像,計算巢服務(wù)中支持自定義鏡像和云市場鏡像,請根據(jù)您的需求進(jìn)行選擇。
自定義鏡像:您可選擇當(dāng)前賬號中已有的ECS鏡像。
若您還沒有自定義鏡像,請先創(chuàng)建自定義鏡像,詳細(xì)操作,請參見使用實例創(chuàng)建自定義鏡像。
云市場鏡像:您可選擇已在云市場發(fā)布的鏡像商品及版本。
根據(jù)您的需求可先去云市場查詢鏡像商品。
創(chuàng)建ECS鏡像部署物
配置部署物的基本信息。
登錄計算巢控制臺,在左側(cè)導(dǎo)航欄選擇服務(wù)部署物,并在部署物區(qū)域中單擊創(chuàng)建部署物。
在部署物信息區(qū)域,完成部署物信息填寫。
配置項
說明
部署物名稱
由中文、數(shù)字、英文及下劃線組成,長度在 3~50 個字符之間,一個中文字等于 2 個字符,部署物名稱創(chuàng)建后不可修改。
部署物版本名稱
由中文、數(shù)字、英文及下劃線組成,長度在 3~50 個字符之間,一個中文字等于 2 個字符。
部署物描述
簡介長度在10-500個字符之間,一個中文字等于2個字符。
資源組
選擇創(chuàng)建的部署所歸屬的資源組名稱。
資源組對您擁有的云資源從用途、權(quán)限、歸屬等維度進(jìn)行分組,實現(xiàn)企業(yè)內(nèi)部多用戶、多項目的資源分級管理。更多信息,請參見資源組。
標(biāo)簽配置
選擇或填寫完整的標(biāo)簽鍵和標(biāo)簽值,為部署物定標(biāo)簽。每個資源最多可綁定20條標(biāo)簽。若無可選的標(biāo)簽鍵和標(biāo)簽值,可創(chuàng)建自定義標(biāo)簽。創(chuàng)建自定義標(biāo)簽的詳細(xì)操作,請參見創(chuàng)建并綁定自定義標(biāo)簽。
配置ECS鏡像部署物。
在部署物內(nèi)容區(qū)域,選擇部署物類型為ECS鏡像,鏡像類型和選擇商品請選擇準(zhǔn)備的鏡像。
在設(shè)置分發(fā)區(qū)域選擇要分發(fā)的地域。本節(jié)以全部地域為例。
重要ECS鏡像部署物至少選擇一個分發(fā)地域。
單擊發(fā)布部署物。
部署物發(fā)布后,不可對當(dāng)前版本內(nèi)容進(jìn)行修改,只能通過創(chuàng)建新版本或新部署物的方式進(jìn)行修改。
說明您需要對部署物進(jìn)行測試,可單擊保存部署物。完成測試后再單擊發(fā)布部署物。
若部署物處于未發(fā)布狀態(tài),不能選擇部署物設(shè)置的分發(fā)地域進(jìn)行測試,僅可選擇鏡像所在地域測試。
查看部署物。
返回服務(wù)部署物頁面,單擊新創(chuàng)建的部署物名稱,進(jìn)入部署物詳情界面查看部署進(jìn)度。
當(dāng)狀態(tài)為可用后單擊查看,會獲取到ECS鏡像部署物的分發(fā)結(jié)果。
說明分發(fā)鏡像的時長由于地域和鏡像大小的不同,可能在幾分鐘到幾小時不等。
使用ECS鏡像部署物
本節(jié)以創(chuàng)建私有化部署服務(wù)為例,重點介紹在創(chuàng)建服務(wù)時使用ECS鏡像部署物相關(guān)配置。
登錄計算巢控制臺。
在左側(cè)導(dǎo)航欄中選擇我的服務(wù),在我創(chuàng)建的服務(wù)區(qū)域下單擊創(chuàng)建新服務(wù)。
創(chuàng)建私有化部署服務(wù)。
根據(jù)提示填入服務(wù)基本信息,在模板錄入中選擇并輸入模板。本節(jié)以經(jīng)典場景的ROS模板為例。
當(dāng)模板內(nèi)容中存在鏡像ID
ImageId
,則在部署物關(guān)聯(lián)區(qū)塊中可設(shè)置鏡像關(guān)聯(lián)。說明本示例模板僅可用于測試。
ROSTemplateFormatVersion: '2015-09-01' Description: en: This template deploys custom image for single instance, supports creating new VPC and specifying VPC. zh-cn: 單實例自定義鏡像部署,帶數(shù)據(jù)盤,公網(wǎng)IP可選(支持創(chuàng)建新VPC和指定VPC)。 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: 可用區(qū) AssociationProperty: ALIYUN::ECS::Instance::ZoneId WhetherCreateVpc: Type: Boolean Label: en: WhetherCreateVpc zh-cn: 是否新建VPC Default: false VpcCidrBlock: Type: String Label: en: VPC CIDR IPv4 Block zh-cn: 專有網(wǎng)絡(luò)IPv4網(wǎng)段 Description: zh-cn: VPC的ip地址段范圍,<br>您可以使用以下的ip地址段或其子網(wǎng):<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> 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: 交換機子網(wǎng)網(wǎng)段 Description: zh-cn: 必須屬于VPC的子網(wǎng)段。 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: 專有網(wǎng)絡(luò)VPC實例ID AssociationProperty: ALIYUN::ECS::VPC::VPCId AssociationPropertyMetadata: Visible: Condition: Fn::Equals: - ${WhetherCreateVpc} - false Default: '' VSwitchId: Type: String Label: en: VSwitch ID zh-cn: 交換機實例ID 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: 服務(wù)器登錄密碼,長度8-30,必須包含三項(大寫字母、小寫字母、數(shù)字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符號) ConstraintDescription: en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in) zh-cn: 長度8-30,必須包含三項(大寫字母、小寫字母、數(shù)字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符號) 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: 系統(tǒng)盤類型 AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory AssociationPropertyMetadata: LocaleKey: DiskCategory InstanceType: ${EcsInstanceType} AllowedValues: - cloud_efficiency - cloud_ssd - cloud_essd SystemDiskSize: Type: Number Label: zh-cn: 系統(tǒng)盤空間 (GB) en: System Disk Space (GB) Default: 200 DataDiskCategory: Type: String Label: zh-cn: 數(shù)據(jù)盤類型 en: Data disk type AssociationProperty: ALIYUN::ECS::Disk::DataDiskCategory AssociationPropertyMetadata: InstanceType: EcsInstanceType ZoneId: ZoneId LocaleKey: DiskCategory DataDiskSize: Type: Number Label: zh-cn: 數(shù)據(jù)盤空間 en: Data disk space Description: zh-cn: ECS實例數(shù)據(jù)盤大小,單位為GiB。取值范圍:20~32768 en: 'ECS Instance disk size, range of values: 20-32768, units: GB' Default: 200 MinValue: 20 MaxValue: 32768 AllocatePublicIP: Type: Boolean Label: zh-cn: 開啟公網(wǎng)IP en: allocate public ip Default: true InternetMaxBandwidthOut: Type: Number Label: zh-cn: 流量公網(wǎng)帶寬 en: Internet Max Bandwidth Out Description: zh-cn: 取值范圍0-100, 0為不開公網(wǎng)ip 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: # 按照軟件名稱設(shè)置安全組名稱 #SecurityGroupName: nginx-sg VpcId: Fn::If: - CreateVpcConditions - Ref: EcsVpc - Ref: VpcId # 按照軟件監(jiān)聽的端口,設(shè)置入方向規(guī)則(安全組默認(rèn)出方向的全部端口都是放行的) #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 # 系統(tǒng)盤大小可以根據(jù)需要調(diào)整 SystemDiskSize: Ref: SystemDiskSize # 數(shù)據(jù)盤配置 DiskMappings: - Category: Ref: DataDiskCategory Size: Ref: DataDiskSize MaxAmount: 1 InstanceType: Ref: EcsInstanceType Password: Ref: InstancePassword # 公網(wǎng)帶寬, 為 0 代表不開公網(wǎng) 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 # 等待命令執(zhí)行完成的超時時間 Timeout: 300 InstanceRunCommand: Type: ALIYUN::ECS::RunCommand Properties: InstanceIds: Fn::GetAtt: - EcsInstanceGroup - InstanceIds CommandContent: Fn::Sub: - | #!/bin/bash # 1. 如果使用了數(shù)據(jù)盤,需要對數(shù)據(jù)盤進(jìn)行格式化,并掛載到指定目錄,這里假定掛載到/data init_and_mount_data_disk() { local fs_type=$1 local mount_point=$2 # 找出磁盤設(shè)備(排除分區(qū)) devices=(`lsblk -o NAME,FSTYPE --noheadings --nodeps | awk '$2 == "" {print $1}'`) # 找出不存在文件系統(tǒng)的磁盤設(shè)備 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 # 為數(shù)據(jù)盤創(chuàng)建文件系統(tǒng) mkfs -t ${!fs_type} /dev/${!data_disk} cp /etc/fstab /etc/fstab.bak mkdir ${!mount_point} # 更新/etc/fstab并掛載磁盤 echo `blkid /dev/${!data_disk} | awk '{print $2}' | sed 's/\\\"http://g'` ${!mount_point} ext4 defaults 0 0 >> /etc/fstab mount -a } # 掛盤到/data init_and_mount_data_disk ext4 /data # 2. 安裝軟件,或者對軟件進(jìn)行初始化配置,比如將數(shù)據(jù)文件目錄指定到數(shù)據(jù)盤目錄 # yum install -y nginx # 3. 如果需要開機自啟動,請?zhí)砑酉到y(tǒng)服務(wù)并啟用 # systemctl enable nginx.service # 4. 配置啟動腳本或者啟動系統(tǒng)服務(wù) # systemctl start nginx.service # 5. 執(zhí)行成功回調(diào)WaitCondition結(jié)束waitCondition的等待 ${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}" # 腳本里任何地方如果發(fā)現(xiàn)執(zhí)行失敗,使用以下命令返回FAILURE和錯誤信息 # ${CurlCli} -d "{\"Data\" : \"error message\", \"status\" : \"FAILURE\"}" - CurlCli: Fn::GetAtt: - WaitConditionHandle - CurlCli Type: RunShellScript # 按照命令執(zhí)行時間設(shè)置超時,單位是秒;命令執(zhí)行超時則部署失敗 Timeout: 300 # outputs是根據(jù)軟件需求定義 # Outputs are defined according to software requirements # 以下是以nginx為例,輸出了網(wǎng)站公網(wǎng)訪問地址 # The following is an example of nginx, which outputs the public network access address of the website #Outputs: # endpoint: # Condition: IfAllocatePublicIP # Description: # zh-cn: 對外暴露的公網(wǎng)IP地址 # en: Public IP Addresses # Value: # Fn::Sub: # - http://${ServerAddress} # - ServerAddress: # Fn::Select: # - 0 # - Fn::GetAtt: # - EcsInstanceGroup # - PublicIps Metadata: ALIYUN::ROS::Interface: ## 參數(shù)組的順序會確定用戶創(chuàng)建服務(wù)實例頁面的參數(shù)排列順序 ## The order of the parameter groups determines the order in which the parameters are arranged on the user creation service instance page ## 如果絕大部分實例規(guī)格都適用,比如x86架構(gòu),可以按注釋中將可用區(qū)放在前面選擇 ## If most of the instance specifications are applicable, such as the x86 architecture, you can select the availability zone in front of the note # ParameterGroups: # - Parameters: # - ZoneId # Label: # default: # zh-cn: 可用區(qū)配置 # en: Zone Configuration # - Parameters: # - WhetherCreateVpc # - VpcCidrBlock # - VSwitchCidrBlock # - VpcId # - VSwitchId # Label: # default: # zh-cn: VPC配置 # 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: ECS實例配置 ParameterGroups: - Parameters: - PayType - PayPeriodUnit - PayPeriod Label: default: en: PayType Configuration zh-cn: 付費類型配置 - Parameters: - EcsInstanceType Label: default: zh-cn: ECS實例規(guī)格配置 en: ECS Instance Type Configuration - Parameters: - ZoneId Label: default: zh-cn: 可用區(qū)配置 en: Zone Configuration - Parameters: - WhetherCreateVpc - VpcCidrBlock - VSwitchCidrBlock - VpcId - VSwitchId Label: default: zh-cn: VPC配置 en: VPC Configuration - Parameters: - InstancePassword - SystemDiskCategory - SystemDiskSize - DataDiskCategory - DataDiskSize - AllocatePublicIP - InternetMaxBandwidthOut Label: default: en: Instance zh-cn: ECS實例詳細(xì)配置 TemplateTags: - acs:example:ISV軟件部署:單實例自定義鏡像部署帶數(shù)據(jù)盤公網(wǎng)IP可選
單擊選擇部署物,在彈框中選擇部署物和版本,單擊確定完成ECS鏡像部署物替換。
重要若選擇的部署物版本為draft版本時,由于該版本的ECS鏡像未分發(fā),則ECS鏡像只在創(chuàng)建鏡像的地域可用。
若選擇的部署物版本為正式版本時,ECS鏡像已分發(fā),則ECS鏡像在創(chuàng)建地域和已分發(fā)的地域均可用。
完成服務(wù)的創(chuàng)建,并測試通過后, 請根據(jù)計算巢服務(wù)的發(fā)布審核標(biāo)準(zhǔn)進(jìn)行自檢,并提交審核。發(fā)布審核標(biāo)準(zhǔn)的詳細(xì)信息,請參見發(fā)布審核標(biāo)準(zhǔn)。
審核通過后,上線服務(wù)。詳細(xì)步驟,請參見上線服務(wù)。
當(dāng)創(chuàng)建服務(wù)實例后,鏡像ID自動替換為部署物對應(yīng)分發(fā)結(jié)果。
替換前:
替換后:
相關(guān)文檔
關(guān)于創(chuàng)建計算巢服務(wù)的詳細(xì)內(nèi)容,請參見創(chuàng)建服務(wù)。
當(dāng)您不再需要部署物或部署物版本時,可刪除該部署物或部署物版本,請參見刪除部署物。
當(dāng)您需要變更部署物的分發(fā)地域、部署物內(nèi)容等信息時,可通過創(chuàng)建新版本來實現(xiàn),請參見創(chuàng)建新版本。
設(shè)置部署物的升級配置,請參見服務(wù)升級配置。