文档

创建MySQL公网链接的全托管服务并上架到云市场

更新时间:

本文介绍创建MySQL公网链接的全托管服务并上架到云市场的详细操作。

准备工作

  1. 创建VPC实例(本文中以cn-shanghai地域为例)。

  2. 在两个不同的可用区创建vSwitch(本文中以cn-shanghai-g、cn-shanghai-l为例)。

创建服务

  1. 登录计算巢控制台

  2. 在左侧导航栏中,单击我的服务,在我创建的服务页签中,单击创建新服务

  3. 选择自定义创建服务,并在服务类型处选择全托管服务,然后单击下一步:配置服务

  4. 在配置服务界面,完成如下配置。

    1. 基本信息区域,上传服务图标,填写服务名称服务简介版本描述服务信息

    2. 服务部署区域,配置服务所需要的资源。2024-02-02_16-19-08.png

      配置项

      配置参数

      租户类型

      单租户。

      用户类型

      阿里云。

      模板录入

      手动录入模板。

      部署方式

      ROS。

      模板内容

      选择YAML页签,并输入模板内容。关于模板的详细内容,请参见服务模板

      模板会创建一个ECS实例为其分配公网IP,并在ECS实例中安装MySQL数据库。

      自动参数映射

      RegionIdVpcId进行映射;将ZoneIdVSwitchId进行映射。

      VPCvSwitch为准备工作阶段创建的资源。

      套餐设置

      根据ECS的实例规则创建两个套餐。分别为:mysql.small和mysql.large。

      隐藏参数

      VpcIdVSwitchIdEcsInstanceType

      由于该部分参数不需要对用户透出,因此设置为隐藏。

      部署地域

      华东2(上海)。

      角色名称

      ComputeNestDeploy。

      预计部署时间

      填写业务预估部署时间。

    3. 服务运维(选填)高级配置(选填)区域,保持默认值,不做特殊配置。

  5. 单击创建服务

测试服务

服务创建完成后,需要对服务进行测试,保证服务的正常可用。

  1. 登录计算巢控制台

  2. 在左侧导航栏中,单击我的服务,在我创建的服务页签中,找到已创建的服务,单击服务名称。进入服务详情页,单击用户部署链接用户部署链接

  3. 在开打的创建服务实例页面,根据界面提示,填写参数。创建服务

  4. 单击下一步:确认订单,并在确认订单页面,确认服务实例信息并选择我已阅读并同意《计算巢服务协议》,然后单击立即创建。

  5. 创建成功后,在弹出的界面单击去列表查看

  6. 服务实例管理全托管服务的页签中,找到您创建的服务实例并单击服务实例ID。

  7. 服务实例详情页中,获取MySQL数据库的链接。

    获取链接

  8. 测试MySQL服务的连通性,能够正确连接到MySQL内部则代表部署成功。

    mysql -uadmin -h 47.xxx.xxx.xxx -p
  9. 测试通过后,先提交审核,审核通过后,即可发布服务。

将服务上架到云市场

服务发布成功后,需要将服务上架到云市场。

  1. 登录计算巢控制台

  2. 在左侧导航栏中,单击我的服务

  3. 找到待上架的服务,单击服务名称进入服务详情页。

  4. 单击服务详情页右上角的创建云市场商品2024-02-02_17-38-40.png

  5. 在云市场服务商控制台接入信息页面,配置商品信息。

    1. 商品名称:与创建的服务名称相同。

    2. 接入类型:选择应用软件类

    3. 应用开通方式:选择计算巢部署

    4. 服务方式:选择计算巢全托管服务,服务选择已创建的服务。

    接入信息

  6. 根据界面提示,完成后续的商品基本信息商品业务信息商品销售信息商品协议信息页签的内容填写。

    商品销售信息页面,您需要配置售卖方式。根据计算巢服务所选择的计费方式,指定相应的售卖方式。售卖方式选择按订购周期。您可以选择按月定价或按年定价,根据您在计算巢服务中指定的套餐,配置规格定价规则。由于服务创建了两个套餐,因此需要指定两个规格。售卖方式

  7. 单击下一步,弹出提示界面,单击确认提交。提交后会自动触发商品审核流程。

    当审核流程完成类目审核后,需进行服务商自测。

    1. 在服务详情页,单击前往编辑2024-02-02_17-40-49.png

    2. 将云市场商品规格和计算巢套餐进行绑定。2024-02-02_17-42-23.png

    3. 单击绑定,返回服务详情页面,在右上角单击去云市场查看。可在云市场商品页面中看到配置的两种套餐版本。

    4. 使用其他账号,模拟用户账号进行购买创建。

      1. 单击立即购买

      2. 在弹出的确认订单页面,确认产品名称、套餐版本并填写配置参数。

        说明

        订单中的参数填写完成后,先不要支付,可先将售价改为0元后,再进行支付。更多信息,请参考云市场订单改价

      3. 单击我已接受协议,前往支付

    5. 支付完成后,可以从云市场已购买的服务中查看该商品,并进入计算巢查看部署详情。

      进入部署详情

  8. 使用其他账号,模拟用户账号进行购买创建。

    1. 单击立即购买

    2. 在弹出的确认订单页面,确认产品名称、套餐版本并填写配置参数。

      说明

      填写订单中的参数,先不要支付,可先将售价改为0元后,再进行支付。更多信息,请参考云市场订单改价

    3. 单击我已接受协议,前往支付

    4. 部署完成后,可以在服务实例详情页面看到MySQL远程连接的信息。

  9. 测试通过后,在云市场进行商品自测中确认。完成服务商自测功能审核后,服务将自动上架到云市场商品列表中。

服务模板

ROSTemplateFormatVersion: '2015-09-01'
# 定义参数
Parameters:
  # 可用区
  ZoneId:
    Type: String
    AssociationProperty: ALIYUN::ECS::Instance:ZoneId
    Label:
      en: VSwitch Available Zone
      zh-cn: 可用区
  # 数据盘类型
  DataDiskCategory:
    Type: String
    AllowedValues:
      - cloud_efficiency        # 高效云盘
      - cloud_ssd               # SSD云盘
      - cloud                   # 普通云盘
      - cloud_essd              # ESSD云盘
    Default: cloud_efficiency
    Label:
      en: Disk Type
      zh-cn: 数据盘类型
    AssociationPropertyMetadata:
      LocaleKey: DiskCategory
  # 数据盘空间
  DataDiskSize:
    Type: Number
    Label:
      en: Data Disk Space
      zh-cn: 数据盘空间
    MinValue: 20
    MaxValue: 500
    Default: 40
  # 数据库root账户密码
  Password:
    # 查询该参数时只输出星号(*)
    NoEcho: true
    Type: String
    Description:
      en: 'Database root account passwor, 8-32 characters, including uppercase and lowercase letters, numbers and special symbols (including: !@#$%^&*-+=_).'
      zh-cn: 数据库root账户密码,长度8~32个字符,可包含大小字母、数字及特殊符号(包含:!@#$%^&*-+=_)。
    Label:
      en: Root Account Password
      zh-cn: 数据库root账户密码
    ConstraintDescription:
      en: '8-32 characters, including uppercase and lowercase letters, numbers and special symbols (including: !@#$%^&*-+=_).'
      zh-cn: 8~32个字符,可包含大小字母、数字及特殊符号(包含:!@#$%^&*-+=_)。
    MinLength: '8'
    MaxLength: '32'
    AssociationProperty: ALIYUN::ECS::Instance::Password
  # 专有网络VPC实例ID
  VpcId:
    AssociationProperty: ALIYUN::ECS::VPC::VPCId
    Type: String
    Label:
      en: VPC ID
      zh-cn: 专有网络VPC实例ID
  # 交换机实例ID
  VSwitchId:
    AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
    AssociationPropertyMetadata:
      VpcId: ${VpcId}
      ZoneId: ${ZoneId}
    Type: String
    Label:
      en: VSwitch ID
      zh-cn: 交换机实例ID
  # Ecs实例类型
  EcsInstanceType:
    Type: String
    Label:
      en: Instance Type
      zh-cn: Ecs实例类型
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
# 定义资源
Resources:
  # 定义WaitCondition和WaitConditionHandle来等待命令在Ecs中执行完毕部署成功
  WaitCondition:
    Type: ALIYUN::ROS::WaitCondition
    Properties:
      Count: 1
      Handle:
        Ref: WaitConditionHandle
      Timeout: 1800
  WaitConditionHandle:
    Type: ALIYUN::ROS::WaitConditionHandle
  EcsSecurityGroup:
    Type: 'ALIYUN::ECS::SecurityGroup'
    Properties:
      SecurityGroupIngress:
        - Priority: 1
          PortRange: 3306/3306
          NicType: intranet
          SourceCidrIp: 0.0.0.0/0
          IpProtocol: tcp
      VpcId:
        Ref: VpcId
  # ECS实例
  EcsInstance:
    Type: ALIYUN::ECS::Instance
    Properties:
      # I/O优化实例
      IoOptimized: optimized
      DiskMappings:
        - Category:
            Ref: DataDiskCategory
          Device: /dev/xvdb
          Size:
            Ref: DataDiskSize
      SystemDiskSize: 40
      # cloud-init执行用户命令
      # /var/log/cloud-init.log /var/log/cloud-init-output.log 可以看到执行日志
      # /var/lib/cloud/instance/scripts/part-001 为具体的脚本可以sh执行来排查问题
      UserData:
        Fn::Sub:
          - |
            #!/bin/sh

            # sleep一段时间确保网络就绪
            sleep 10

            # 对数据盘进行分区

            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.ext4 /dev/vdb1
            # 创建目录,MySQL将安装在该目录下
            mkdir /data1
            # 挂载文件系统
            mount /dev/vdb1 /data1
            # 向 /etc/fstab 写入新分区信息
            echo /dev/vdb1 /data1 ext4 defaults,nodelalloc,noatime 0 2 >> /etc/fstab
            cd /data1/

            # 安装社区版MySQL
            wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
            rpm -ivh mysql-community-release-el6-5.noarch.rpm
            yum repolist all | grep mysql
            yum install mysql-community-server -y

            # 启动MySQL服务
            service mysqld start

            # 以超级用户身份登入,创建admin用户,并允许admin用户以Password为密码远程登录
            mysqladmin -u root password '${Password}'
            echo "create database test character set utf8 collate utf8_bin;" > ./test.sql
            echo "CREATE USER 'admin'@'%' IDENTIFIED BY '${Password}';" >> ./test.sql
            echo "GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;" >> ./test.sql
            mysql -u root -p'${Password}' < ./test.sql

            # 将MySQL的配置和数据路径移动到数据盘上
            systemctl stop mysqld
            rsync -av /var/lib/mysql /data1
            # 修改配置文件
            sed -i 's/\/var\/lib/\/data1/g' /etc/my.cnf
            echo -e '\n' >> /etc/my.cnf
            echo '[client]' >> /etc/my.cnf
            echo 'port=3306' >> /etc/my.cnf
            echo 'socket=/data1/mysql/mysql.sock' >> /etc/my.cnf
            # 重启MySQL
            systemctl start mysqld

            # 执行成功回调WaitCondition结束WaitCondition的等待
            ${CurlCli} -d "{\"Data\" : \"SUCCESS\", \"Status\" : \"SUCCESS\"}"

          # 获取到WaitConditionHandle的地址放到 ${CurlCli}变量里
          - CurlCli:
              Fn::GetAtt:
                - WaitConditionHandle
                - CurlCli
            # 数据库root账户密码
            Password:
              Ref: Password
      # 付费方式:按量付费
      InstanceChargeType: PostPaid
      # 系统盘类型:高效云盘
      SystemDiskCategory: cloud_efficiency
      # 实例名称
      InstanceName:
        Fn::Join:
          - '-'
          - - mysql
            - Ref: ALIYUN::StackName
      VpcId:
        Ref: VpcId
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitchId
      # 指定CentOS 7.9镜像,如果修改镜像,UserData脚本需要进行适配
      ImageId: "centos_7_9_x64_20G_alibase_20220727.vhd"
      InstanceType:
        Ref: EcsInstanceType
      # 主机名
      HostName: mysql-public-ip
      # Ecs登录密码
      Password:
        Ref: Password
      # 是否为实例分配公网IP
      AllocatePublicIP: true
# 定义输出
Outputs:
  # 将数据库连接地址显示在控制台
  DBConnectionAddress:
    Value:
      # 将Ecs的公网IP拼接成数据库连接地址
      Fn::Sub:
        - mysql://${Domain}:3306
        - Domain:
            Fn::GetAtt:
              - EcsInstance
              - PublicIp
# 定义元数据
Metadata:
  ALIYUN::ROS::Interface:
    # 定义资源分组,创建服务实例时,同一分组的参数分布在一起
    ParameterGroups:
      - Parameters:
          - ZoneId
          - Password
        Label:
          en: Basic Configuration
          zh-cn: 基础配置
      - Parameters:
          - EcsInstanceType
        Label:
          en: Instance Type
          zh-cn: 实例规格
      - Parameters:
          - DataDiskCategory
          - DataDiskSize
        Label:
          en: Data Disk Configuration
          zh-cn: 数据盘配置
      - Parameters:
          - VpcId
          - VSwitchId
        Label:
          en: Network Configuration
          zh-cn: 网络配置

  • 本页导读 (0)