使用SpringBoot+ECS镜像的方式创建单机版ECS服务

本文介绍基于SpringBoot+ECS镜像的方式快速创建单机版ECS服务的详细信息。

服务说明

本示例会自动的构建计算巢服务,具体的服务构建流程如下。

  1. OOS ACS-ECS-UpdateImage模板执行命令构建ECS镜像。

  2. 通过构建好的ECS镜像创建ECS镜像部署物并完成分发。

  3. 创建计算巢服务并关联镜像部署物。

创建过程大约持续15分钟,当服务变成待提交后构建成功。

部署架构

本部署架构为单机ECS部署,通过公网IP的8080端口访问。8.png

服务构建计费说明

测试本服务构建需要支付构建镜像过程中的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实例所在可用区。

部署步骤

  1. 获取部署链接。

    在服务详情页,查看服务实例部署链接。9.png

  2. 单击部署链接,进入服务实例部署界面,根据界面提示,填写参数完成部署。10.png

  3. 参数填写完成后可以看到对应询价明细,确认参数后点击下一步:确认订单11.png

  4. 确认订单完成后同意服务协议并点击立即创建,进入部署阶段。

    您可以单击去列表查看按钮,查看服务实例的部署进度。12.png13.png

  5. 等待部署完成后就可以开始使用服务,进入服务实例详情点击visitUrl14.png

  6. 查看部署结果。7.png

服务详细说明

本文通过将代码构建后,将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主要由如下三部分组成。

  1. 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
  2. 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
    
  3. Outputs定义需要最终在计算巢概览页中对用户展示的输出。

    Outputs:
      VisitUrl:
        Description:
          en: VisitUrl.
          zh-cn: 访问页面。
        Value:
          Fn::Sub:
          - http://${Address}:8080
          - Address:
              Fn::Select:
              - 0
              - Fn::GetAtt:
                - InstanceGroup
                - PublicIps
    

相关文档

服务配置

创建代运维服务完成实例运维

创建包含变配功能的服务并变配服务实例

升级配置

服务交付

自定义服务架构图

自定义服务架构图

将服务上架到云市场

其他

实例代码源地址

部署配置