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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 本文介绍如何通过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
相关文章
|
8月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
8月前
|
并行计算 机器人 网络安全
阿里云服务器上部署ROS2+Isaac-Sim4.5实现LeRobot机械臂操控
本文介绍了如何在阿里云上申请和配置一台GPU云服务器,并通过ROS2与Isaac Sim搭建机械臂仿真平台。内容涵盖服务器申请、系统配置、远程连接、环境搭建、仿真平台使用及ROS2操控程序的编写,帮助开发者快速部署机器人开发环境。
3254 5
|
8月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
存储 SQL 关系型数据库
服务器数据恢复—云服务器上mysql数据库数据恢复案例
某ECS网站服务器,linux操作系统+mysql数据库。mysql数据库采用innodb作为默认存储引擎。 在执行数据库版本更新测试时,操作人员误误将在本来应该在测试库执行的sql脚本在生产库上执行,导致生产库上部分表被truncate,还有部分表中少量数据被delete。
322 25
|
SQL 运维 关系型数据库
体验用分布式数据库突破资源瓶颈,完成任务领智能台灯!
体验用分布式数据库突破资源瓶颈,完成任务领智能台灯!
|
负载均衡 监控 架构师
「从零开始的云上建筑师速成班:用ROS编辑器搭个会呼吸的服务器小屋」
云上建筑师速成秘籍:用阿里云ROS架构编辑器像搭乐高一样玩转服务器!零代码拖拽资源+配置指南,从部署到拆家一条龙服务~
「从零开始的云上建筑师速成班:用ROS编辑器搭个会呼吸的服务器小屋」
|
数据库
【YashanDB知识库】数据库获取时间和服务器时间不一致
【YashanDB知识库】数据库获取时间和服务器时间不一致
|
监控 关系型数据库 MySQL
如何解决 MySQL 数据库服务器 CPU 飙升的情况
大家好,我是 V 哥。当 MySQL 数据库服务器 CPU 飙升时,如何快速定位和解决问题至关重要。本文整理了一套实用的排查和优化套路,包括使用系统监控工具、分析慢查询日志、优化 SQL 查询、调整 MySQL 配置参数、优化数据库架构及检查硬件资源等步骤。通过一个电商业务系统的案例,详细展示了从问题发现到解决的全过程,帮助你有效降低 CPU 使用率,提升系统性能。关注 V 哥,掌握更多技术干货。
1779 0
|
PHP 数据库 数据安全/隐私保护
布谷直播源码部署服务器关于数据库配置的详细说明
布谷直播系统源码搭建部署时数据库配置明细!
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
5077 2