本文介绍基于SpringBoot+ECS镜像的方式快速创建单机版ECS服务的详细信息。
服务说明
本示例会自动的构建计算巢服务,具体的服务构建流程如下。
OOS ACS-ECS-UpdateImage模板执行命令构建ECS镜像。
通过构建好的ECS镜像创建ECS镜像部署物并完成分发。
创建计算巢服务并关联镜像部署物。
创建过程大约持续15分钟,当服务变成待提交后构建成功。
部署架构
本部署架构为单机ECS部署,通过公网IP的8080端口访问。
服务构建计费说明
测试本服务构建需要支付构建镜像过程中的ECS费用和快照费用,请确保账号中有足够的余额,预计消耗金额。
构建镜像,需要创建ECS实例(ecs.c6.large,5 Mbps公网带宽,40 GiB高效云盘系统盘):0.660元/小时,预计消耗总金额:0.660*0.1≈0.07元(构建镜像预计10分钟以内)。
快照费用:该服务创建快照大小为40 GiB,构建镜像地域默认为新加坡,那么消耗金额为:0.136元/GB/月 * 40 GB * 1月)/30天/24小时≈0.007元/小时。更多信息,请参见快照计费。
创建服务实例涉及的费用参考服务实例计费说明
RAM账号所需权限
本服务需要对ECS、VPC等资源进行访问和创建操作,若您使用RAM用户创建服务实例,需要在创建服务实例前,对使用的RAM用户的账号添加相应资源的权限。添加RAM权限的详细操作,请参见为RAM用户授权。
所需权限如下表所示。
权限策略名称 | 备注 |
AliyunECSFullAccess | 管理云服务器服务(ECS)的权限 |
AliyunVPCFullAccess | 管理专有网络(VPC)的权限 |
AliyunROSFullAccess | 管理资源编排服务(ROS)的权限 |
AliyunComputeNestUserFullAccess | 管理计算巢服务(ComputeNest)的用户侧权限 |
AliyunComputeNestSupplierFullAccess | 管理计算巢服务(ComputeNest)的服务商侧权限 |
服务实例计费说明
测试本服务在计算巢上的费用主要如下资源:
所选vCPU与内存规格
系统盘类型及容量
公网带宽
计费方式包括:
按量付费(小时)
包年包月
目前提供如下实例:
规格族 | vCPU与内存 | 系统盘 | 公网带宽 |
ecs.c6.large | 内存型c6,2vCPU 4 GiB | ESSD云盘200 GiB PL0 | 固定带宽1 Mbps |
ecs.c6.2xlarge | 内存型c6,4vCPU 8 GiB | ESSD云盘200 GiB PL0 | 固定带宽1 Mbps |
预估费用在创建实例时可实时看到。
部署流程
部署参数说明
参数组 | 参数项 | 说明 |
服务实例 | 服务实例名称 | 长度不超过64个字符,必须以英文字母开头,可包含数字、英文字母、短划线(-)和下划线(_)。 |
地域 | 服务实例部署的地域。 | |
付费类型 | 资源的计费类型:按量付费和包年包月。 | |
ECS实例配置 | 实例类型 | 可用区下可以使用的实例规格。 |
实例密码 | 长度8-30,必须包含三项(大写字母、小写字母、数字、()`~!@#$%^&*-+=|{}[]:;'<>,.?/中的特殊符号)。 | |
网络配置 | 可用区 | ECS实例所在可用区。 |
部署步骤
获取部署链接。
在服务详情页,查看服务实例部署链接。
单击部署链接,进入服务实例部署界面,根据界面提示,填写参数完成部署。
参数填写完成后可以看到对应询价明细,确认参数后点击下一步:确认订单。
确认订单完成后同意服务协议并点击立即创建,进入部署阶段。
您可以单击去列表查看按钮,查看服务实例的部署进度。
等待部署完成后就可以开始使用服务,进入服务实例详情点击visitUrl。
查看部署结果。
服务详细说明
本文通过将代码构建后,将deploy.sh和application.jar打包成package.tgz放到artifacts目录下,然后OOS构建镜像SpringBootImage,构建镜像的基础镜像为centos_7_8_x64_20G_alibase_20211130.vhd,执行的命令如下。
yum install -y java
yum install -y git
# 下载包 例子是从git获取
git clone https://github.com/aliyun-computenest/springboot-ecs-image-demo.git
mkdir -p /home/admin/application
cp /root/springboot-ecs-image-demo/artifacts/package.tgz /home/admin/application
cd /home/admin/application
tar xvf package.tgz
rm -rf /root/springboot-ecs-image-demo
rm package.tgz
templates/template.yaml主要由如下三部分组成。
Parameters
定义需要用户填写的参数,包括付费类型,实例规格和实例密码可用区参数。PayType: Type: String Label: en: ECS Instance Charge Type zh-cn: 付费类型 Default: PostPaid AllowedValues: - PostPaid - PrePaid AssociationProperty: ChargeType AssociationPropertyMetadata: LocaleKey: InstanceChargeType PayPeriodUnit: Type: String 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 EcsInstanceType: Type: String Label: en: Instance Type zh-cn: 实例类型 AssociationProperty: ALIYUN::ECS::Instance::InstanceType AssociationPropertyMetadata: InstanceChargeType: ${PayType} AllowedValues: - ecs.c6.large - ecs.c6.2xlarge 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: '^[a-zA-Z0-9-\(\)\`\~\!\@\#\$\%\^\&\*\_\-\+\=\|\{\}\[\]\:\;\<\>\,\.\?\/]*$' 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 ZoneId: Type: String Label: en: Zone ID zh-cn: 可用区ID AssociationProperty: ALIYUN::ECS::Instance::ZoneId
Resources
定义需要开的资源,包括新开的VPC、Vswitch和ECS实例,以及执行命令的定义。InstanceGroup.ImageId
定义为springboot
,最终会由ECS镜像的部署物替换成对应地域的真正的镜像ID。Vpc: Type: ALIYUN::ECS::VPC Properties: CidrBlock: 192.168.0.0/16 SecurityGroup: Type: ALIYUN::ECS::SecurityGroup Properties: SecurityGroupName: Ref: ALIYUN::StackName VpcId: Ref: Vpc # 安全组入端口 SecurityGroupIngress: - PortRange: 8080/8080 Priority: 1 SourceCidrIp: 0.0.0.0/0 IpProtocol: tcp NicType: internet VSwitch: Type: ALIYUN::ECS::VSwitch Properties: ZoneId: Ref: ZoneId VpcId: Ref: Vpc CidrBlock: 192.168.0.0/24 InstanceGroup: Type: ALIYUN::ECS::InstanceGroup Properties: VpcId: Ref: Vpc VSwitchId: Ref: VSwitch SecurityGroupId: Ref: SecurityGroup ZoneId: Ref: ZoneId ImageId: springboot InstanceType: Ref: EcsInstanceType SystemDiskCategory: cloud_essd IoOptimized: optimized MaxAmount: 1 InstallPackage: Type: ALIYUN::ECS::RunCommand Properties: InstanceIds: Fn::GetAtt: - InstanceGroup - InstanceIds Type: RunShellScript Sync: true Timeout: 3600 CommandContent: Fn::Sub: - | #!/bin/bash cd /home/admin/application /bin/bash deploy.sh start - AccountId: Ref: ALIYUN::TenantId
Outputs
定义需要最终在计算巢概览页中对用户展示的输出。Outputs: VisitUrl: Description: en: VisitUrl. zh-cn: 访问页面。 Value: Fn::Sub: - http://${Address}:8080 - Address: Fn::Select: - 0 - Fn::GetAtt: - InstanceGroup - PublicIps