本文以管理包含弹性伸缩生命周期挂钩功能的服务实例为例,介绍服务商如何创建或者更新服务版本,供用户创建并更新服务实例。
前提条件
创建部署物前,需要先完成如下操作。
已创建ECS实例。具体操作,请参见自定义购买实例。
使用已创建的ECS实例创建自定义镜像。具体操作,请参见使用实例创建自定义镜像。
流程介绍
此处介绍了该最佳实践的整体流程。
步骤一:创建部署物
使用软件包部署物创建服务和服务实例前,需要先完成部署物的创建和发布。
登录计算巢控制台。
在左侧导航栏中,单击服务部署物。然后在部署物管理界面,单击创建部署物。
在创建部署物界面,填写部署物信息、部署物内容和设置分发的信息。
配置项
配置示例
部署物名称
部署物版本演示
部署物版本名称
版本1
部署物描述
演示部署物版本1
部署物类型
ECS镜像
镜像类型
自定义镜像
选择镜像
自定义镜像所在地域:华东1(杭州)。
镜像名称:NginxV1。
选择要分发的地域
支持全部地域分发。
单击发布部署物。
单击发布部署物后,可在部署物详情页面,单击部署物名称,进入部署物详情界面,查看部署物的部署进度。分发镜像的时长由于地域和镜像大小的不同,可能在几分钟到几十分钟不等。
步骤二:创建服务
此处以创建一个包含ECS镜像的服务为例。
步骤三:创建和查看服务实例
该步骤是服务商以用户的身份验证服务中配置的镜像部署物是否能够在服务实例中正确部署。
创建服务实例。
更多信息,请参考创建私有部署服务实例。
服务实例部署成功,则表示镜像部署物也已经在服务实例中部署成功。
查看服务实例的版本信息。
在左侧导航栏中,单击服务实例。
找到您创建的服务实例,单击服务实例ID。进入服务实例详情页。查看服务实例的软件包版本信息。
查看服务实例版本信息
查看镜像信息。
在服务实例详情页,单击资源页签,单击ECS实例对应的资源ID,进入ECS实例详情页,查看镜像信息。
步骤四:更新部署物
服务商更新服务中的镜像之前,需要先完成部署物的更新和发布。
登录计算巢控制台。
在左侧导航栏,单击服务部署物,进入部署物管理页面。
找到已创建的部署物,单击创建新版本,进入创建新版本页面,更新部署物的参数。
在创建新版本界面,在部署物内容区域的选择镜像中选择新的镜像,其他参数保持不变。
单击发布部署物。
步骤五:更新服务
步骤六:升级服务实例
该步骤是服务商以用户的身份更新服务,验证用户侧是否能够成功升级服务实例并更新镜像。
登录计算巢控制台。
在左侧导航栏中选择服务实例。
在服务实例页面,单击服务实例ID,进入服务实例详情页面。
单击右上角的升级服务实例。进入升级服务实例弹窗。
选择升级版本,然后单击开始升级。
步骤七:查看升级后的服务实例版本和镜像信息
服务实例升级成功后,查看服务实例版本和镜像信息是否已经更新。
登录计算巢控制台。
在左侧导航栏中,单击服务实例。
找到您创建的服务实例,单击服务实例ID,进入服务实例详情页。查看服务实例版本、Nginx和镜像信息是否已经更新。
查看服务实例版本信息
服务实例版本已经升级为版本2。
查看镜像信息
在服务实例详情页,单击资源页签,单击ECS实例对应的资源ID,进入ECS实例详情页,查看镜像信息。可以发现镜像ID已经变更。
模板示例
此处展示的模板示例为该最佳实践创建服务使用的模板内容。
ROSTemplateFormatVersion: '2015-09-01'
Description:
en: This template deploys Nginx service for single instance
zh-cn: 此模板为单实例部署Nginx服务
Parameters:
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
Label:
en: VSwitch Availability Zone
zh-cn: 交换机可用区
VpcId:
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
Label:
en: VPC ID
zh-cn: 专有网络VPC实例ID
VSwitchId:
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${VpcId}
ZoneId: ${ZoneId}
Type: String
Label:
en: VSwitch ID
zh-cn: 交换机实例ID
EcsInstanceType:
Type: String
Label:
en: Instance Type
zh-cn: 实例类型
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${InstanceChargeType}
InstancePassword:
NoEcho: true
Type: String
Description:
en: Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)
zh-cn: 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)
AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
Label:
en: Instance Password
zh-cn: 实例密码
ConstraintDescription:
en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Special symbol in)
zh-cn: 长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)
MinLength: 8
MaxLength: 30
AssociationProperty: ALIYUN::ECS::Instance::Password
PayType:
Type: String
Label:
en: ECS Instance Charge Type
zh-cn: 付费类型
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
PayPeriodUnit:
Type: String
Description:
en: The long cycle of purchasing resources. <br>Week is a Week and Month is a Month. <br> The default value is month.<br><b><font color='red'> When ECS instance types are PrePaid valid </b></font>
zh-cn: 购买资源时长的周期。<br>Week为周,Month为月<br>默认值为月<br><b><font color='red'>当ECS实例类型为PrePaid有效</b></font>
Label:
en: Pay Period Unit
zh-cn: 购买资源时长周期
Default: Month
AllowedValues:
- Month
- Year
AssociationProperty: PayPeriodUnit
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
PayPeriod:
Type: Number
Label:
en: Period
zh-cn: 购买资源时长
Default: 1
AllowedValues:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
AssociationProperty: PayPeriod
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
Resources:
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName: nginx-sg
VpcId:
Ref: VpcId
SecurityGroupIngress:
- PortRange: 80/80
Priority: 1
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
NicType: internet
SecurityGroupEgress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: internet
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: intranet
WaitCondition:
Type: ALIYUN::ROS::WaitCondition
Properties:
Count: 1
Handle:
Ref: WaitConditionHandle
Timeout: 300
WaitConditionHandle:
Type: ALIYUN::ROS::WaitConditionHandle
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
IoOptimized: optimized
InstanceChargeType:
Ref: PayType
PeriodUnit:
Ref: PayPeriodUnit
Period:
Ref: PayPeriod
VpcId:
Ref: VpcId
VSwitchId:
Ref: VSwitchId
SecurityGroupId:
Ref: EcsSecurityGroup
SystemDiskCategory: cloud_essd
SystemDiskSize: 200
DiskMappings:
- Category: cloud_essd
Size: 200
MaxAmount: 1
ImageId: centos_7
InstanceType:
Ref: EcsInstanceType
Password:
Ref: InstancePassword
AllocatePublicIP: true
InternetMaxBandwidthOut: 100
InstanceName:
Fn::Join:
- '-'
- - Ref: ALIYUN::StackName
- '[1,4]'
UserData:
Fn::Sub:
- |
#!/bin/bash
# 挂盘到/disk1
cat >> /root/InitDataDisk.sh << EOF
#!/bin/bash
echo "p
n
p
w
" | fdisk -u /dev/vdb
EOF
/bin/bash /root/InitDataDisk.sh
rm -f /root/InitDataDisk.sh
rm -f InitDataDisk.sh
mkfs -t ext4 /dev/vdb1
cp /etc/fstab /etc/fstab.bak
mkdir /disk1
echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\\\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
mount -a
# 这里配置安装脚本
yum install -y nginx
# 配置启动脚本
/usr/sbin/nginx
# 执行成功回调WaitCondition结束waitCondition的等待
${CurlCli} -d "{\"Data\" : \"Success\", \"status\" : \"SUCCESS\"}"
- CurlCli:
Fn::GetAtt:
- WaitConditionHandle
- CurlCli
Outputs:
endpoint:
Description:
zh-cn: 对外暴露的公网IP地址
en: Public IP Addresses
Value:
Fn::Sub:
- http://${ServerAddress}
- ServerAddress:
Fn::Select:
- 0
- Fn::GetAtt:
- EcsInstanceGroup
- PublicIps
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- ZoneId
Label:
default:
zh-cn: 可用区配置
en: Zone Configuration
- Parameters:
- VpcId
- VSwitchId
Label:
default:
zh-cn: 选择已有基础资源配置
en: Choose existing Infrastructure Configuration
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
en: PayType Configuration
zh-cn: 付费类型配置
- Parameters:
- EcsInstanceType
- InstancePassword
Label:
default:
en: Instance
zh-cn: ECS实例配置
TemplateTags:
- acs:example:ISV软件部署:创建单ECS实例并部署Nginx