使用ROS部署ECS+SqlServer资源并通过PowerShell操作数据库

简介: 本文介绍如何通过ROS部署ECS+RDS+SqlServer资源,以及如何通过PowerShell操作SqlServer数据库。注意:附录模板和截图中的commandtext部分仅为演示作用,请根据需求修改后使用。

操作步骤

一、部署资源

  1. 登录资源编排控制台,使用附录中的模板内容创建模板
  2. 根据提示配置参数,配置完成后点击创建以部署资源。
  3. 资源部署成功后点击RDS实例的资源ID,跳转到RDS实例详情页。
  4. 使用创建资源栈时配置的数据库账号和密码登录数据库
  5. 登录数据库成功后,验证ROS模板中配置的表和数据是否创建成功。

二、通过PowerShell操作数据库

  1. 资源栏中点击ECS实例的资源ID,跳转到ECS实例详情页。
  2. 点击定时与自动化任务、命令执行结果、命令内容查看Pswershell命令详情。
  3. 复制命令后点击发送命令,命令类型选择PowerShell,粘贴并修改命令中commandtext部分,点击执行
  4. 命令执行成功后到DMS控制台查询上文插入的数据,可以看到数据已写入成功。

附录

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  ZoneId:
    Type: String
    AssociationProperty: ALIYUN::ECS::Instance::ZoneId
  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
  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\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
    AssociationProperty: ALIYUN::ECS::Instance::Password
    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
  EcsInstanceType:
    Type: String
    Label:
      en: Instance Type
      zh-cn: 实例类型
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceChargeType: ${PayType}
  # 付费类型
  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
    Description:
      en: When the resource purchase duration is Month, the value of Period ranges from 1 to 9, 12, 24, 36, 48, or 60. <br><b><font color='red'> When ECS instance types are PrePaid valid </b></font>
      zh-cn: 当购买资源时长为Month时,Period取值:1~9 <br><b><font color='red'>当ECS实例类型为PrePaid有效</b></font>
    Label:
      en: Period
      zh-cn: 购买资源时长
    Default: 1
    AllowedValues:
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      - 9
    AssociationProperty: PayPeriod
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Or:
            - Fn::Equals:
                - ${PayType}
                - PrePaid
            - Fn::Equals:
                - ${PayType}
                - undefined
  # sqlserver实例规格
  DBInstanceClass:
    Label:
      zh-cn: 实例规格
      en: DB Instance Class
    AssociationProperty: ALIYUN::RDS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ZoneId
      Engine: SQLServer
      EngineVersion: 2017_std_ha
    Type: String
    Default: mssql.s2.medium.s2
    Description:
      zh-cn: 根据数据库引擎的类型和可用的区域支持选择实例规格;<br>请参见详细信息:<a href='https://help.aliyun.com/document_detail/26312.html' target='_blank'><b><font color='blue'>实例规格表</font></b></a>
      en: 'Select the instance specification based on the type of database engine and the available area support;<br>see detail: <a href=''https://www.alibabacloud.com/help/doc-detail/26312.html'' target=''_blank''><b><font color=''blue''>Instance specification sheet</font></b></a>'
  # sqlserver存储大小
  DBInstanceStorage:
    Label:
      zh-cn: 实例存储
      en: Storage
    Type: Number
    Description:
      zh-cn: RDS实例大小范围为20-2000,每5个增量,单位为GB
      en: The size range of RDS instances is 20 - 2000, Incrementing in every 5, unit GB
    MinValue: 20
    MaxValue: 2000
    ConstraintDescription:
      zh-cn: RDS实例大小范围为20-2000,每5个增量,单位为GB
      en: The size range of RDS instances is 20 - 2000, Incrementing in every 5, unit GB
    Default: 20
  # sqlserver账号名
  MasterUsername:
    Type: String
    Description:
      en: Primary account name of the database instance.
      zh-cn: 数据库实例的主账号名称。
    ConstraintDescription:
      en: Consist of 2 to 16 characters of lowercase letters, underline. Must begin with a letter and be end with an alphanumeric character
      zh-cn: 由 2 到 16 个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾
    Label:
      zh-cn: 数据库账号名称
      en: DB Username
    Default: automation
    MaxLength: 16
    MinLength: 2
  # sqlserver账号密码
  MasterUserPassword:
    Type: String
    Description:
      en: Password of the primary account of the database instance, consisting of letters, numbers, and underline(_), is 8 to 32 characters long
      zh-cn: 数据库实例的主账号密码,由字母、数字、下划线(_)组成,长度为8~32个字符
    ConstraintDescription:
      en: '[8, 32] characters consist of alphanumeric characters, hyphen and underline'
      zh-cn: '[8, 32] 个字符由字母数字字符、连字符和下划线组成'
    Label:
      zh-cn: 数据库密码
      en: DB Password
    MaxLength: 32
    MinLength: 8
    NoEcho: true
   # sqlserver账号名
  DataBasename:
    Type: String
    Label:
      zh-cn: 数据库名称
      en: DB Name
    Default: automation
    MaxLength: 16
    MinLength: 2
Resources:
  # 安全组
  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: VpcId
      # 入方向开放80端口
      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
  # ecs配置
  EcsInstanceGroup:
    Type: ALIYUN::ECS::InstanceGroup
    Properties:
      IoOptimized: optimized
      PeriodUnit:
        Ref: PayPeriodUnit
      Period:
        Ref: PayPeriod
      InstanceChargeType:
        Ref: PayType
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitchId
      MaxAmount: 1
      SystemDiskCategory: cloud_essd
      SystemDiskSize: 100
      VpcId:
        Ref: VpcId
      ImageId: win2022_21H2_x64_dtc_zh-cn_40G_alibase_20220815.vhd
      InstanceType:
        Ref: EcsInstanceType
      Password:
        Ref: InstancePassword
      AllocatePublicIP: true
      InstanceName:
        Fn::Join:
          - '-'
          - - Ref: ALIYUN::StackName
            - '[1,4]'
      InternetMaxBandwidthOut: 5
      UserData: |-
        #!/bin/bash
  # sqlserver数据库
  Database:
    Type: ALIYUN::RDS::DBInstance
    Properties:
      VPCId:
        Ref: VpcId
      VSwitchId:
        Ref: VSwitchId
      # sqlserver
      Engine: SQLServer
      # 版本
      EngineVersion: 2017_std_ha
      DBInstanceClass:
        Ref: DBInstanceClass
      ZoneId:
        Ref: ZoneId
      DBInstanceStorage:
        Ref: DBInstanceStorage
      DBInstanceNetType: Intranet
      MasterUserPassword:
        Ref: MasterUserPassword
      MasterUsername:
        Ref: MasterUsername
      PayType:
        Ref: PayType
      PeriodType:
        Ref: PayPeriodUnit
      Period:
        Ref: PayPeriod
      # 数据库白名单
      SecurityIPList:
        Fn::Join:
          - ','
          - Fn::GetAtt:
            - EcsInstanceGroup
            - PrivateIps
  SqlServerDatabase:
    Type: ALIYUN::RDS::Database
    Properties:
      CharacterSetName: Chinese_PRC_CI_AS
      DBInstanceId:
        Ref: Database
      DBName:
        Ref: DataBasename
    DependsOn:
      - Database
  AccountPrivilege:
    Type: ALIYUN::RDS::AccountPrivilege
    Properties:
      AccountPrivilege: DBOwner
      DBInstanceId:
        Ref: Database
      DBName:
        Ref: DataBasename
      AccountName:
        Ref: MasterUsername
    DependsOn:
      - SqlServerDatabase
  # 到ecs中执行创建数据库命令
  RunCommand:
    DependsOn:
      - AccountPrivilege
    Type: ALIYUN::ECS::RunCommand
    Description: 获取创建资源的信息,给后续自动化部署的程序读取
    Properties:
      InstanceIds:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      Type: RunPowerShellScript
      CommandContent:
        Fn::Sub:
          - |
            $Database='${DataBasename}'
            $Server='${DBConnectString}'
            $UserName='${MasterUsername}'
            $Password='${MasterUserPassword}'
           # 连接数据库
            $SqlConn = New-Object System.Data.SqlClient.SqlConnection
            $SqlConn.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;user id=$UserName;pwd=$Password"
            $SqlConn.open()
            # 创建表并插入数据
            $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
            $SqlCmd.connection = $SqlConn
            $SqlCmd.commandtext = "IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[demo_test]') AND type in (N'U'))
            DROP TABLE [dbo].[demo_test];
            CREATE TABLE [dbo].[demo_test](
                user_id INT NOT NULL IDENTITY(1,1),
                user_name NVARCHAR(255),
                user_type NVARCHAR(255),
                PRIMARY KEY (user_id)
            );
            Insert into demo_test (user_name, user_type) Values ('jia', 'test');
            Insert into demo_test (user_name, user_type) Values ('shi', 'test');
            Insert into demo_test (user_name, user_type) Values ('wang', 'test');
            Insert into demo_test (user_name, user_type) Values ('xue', 'test');"
            $SqlCmd.executenonquery()
            $SqlConn.close()
          - MasterUsername:
              Ref: MasterUsername
            MasterUserPassword:
              Ref: MasterUserPassword
            DataBasename:
              Ref: DataBasename
            DBConnectString:
              Fn::GetAtt:
                - Database
                - InnerConnectionString
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实例配置
      - Parameters:
          - DBInstanceClass
          - DBInstanceStorage
          - MasterUsername
          - MasterUserPassword
          - DataBasename
        Label:
          default:
            en: RDS
            zh-cn: RDS配置
相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
12月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1751 152
|
11月前
|
Java Linux Apache
在CentOS服务器上编译并部署NiFi源码
部署Apache NiFi在CentOS上是一个涉及细节的过程,需要注意Java环境、源码编译、配置调整等多个方面。遵循上述步骤,可以在CentOS服务器上成功部署和配置Apache NiFi,从而高效地处理和分发数据。
331 17
|
12月前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
870 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
11月前
|
弹性计算 人工智能 前端开发
在阿里云ECS上部署n8n自动化工作流:U2实例实战
本文介绍如何在阿里云ECS的u2i/u2a实例上部署开源工作流自动化平台n8n,利用Docker快速搭建并配置定时任务,实现如每日抓取MuleRun新AI Agent并推送通知等自动化流程。内容涵盖环境准备、安全组设置、实战案例与优化建议,助力高效构建低维护成本的自动化系统。
2305 5
|
12月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
Ubuntu 机器人 Linux
|
传感器 人工智能 算法
ROS机器人操作系统
ROS机器人操作系统
900 1
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
前言 最近开始接触到基于DDS的这个系统,是在稚晖君的机器人项目中了解和认识到。于是便开始自己买书学习起来,感觉挺有意思的,但是只是单纯的看书籍,总会显得枯燥无味,于是自己又开始在网上找了一些视频教程结合书籍一起来看,便让我对ROS系统有了更深的认识和理解。 ROS的发展历程 ROS诞生于2007年的斯坦福大学,这是早期PR2机器人的原型,这个项目很快被一家商业公司Willow Garage看中,类似现在的风险投资一样,他们投了一大笔钱给这群年轻人,PR2机器人在资本的助推下成功诞生。 2010年,随着PR2机器人的发布,其中的软件正式确定了名称,就叫做机器人操作系统,Robot Op
1120 14
|
XML 算法 自动驾驶
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
【11月更文挑战第7天】本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。
1014 6