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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 本文介绍如何通过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配置
相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
19天前
|
安全 云计算
服务器系统资源不足怎么办
服务器系统资源不足怎么办
27 4
|
25天前
|
存储 人工智能 弹性计算
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理。通过合理优化资源分配、利用自动伸缩及高效数据管理,ECS能显著提升AI系统的性能与效率,降低运营成本,助力科研与企业用户在AI领域取得突破。
45 6
|
2月前
|
弹性计算 JSON 关系型数据库
使用ROS模板基于ECS和RDS创建WordPress环境
使用ROS模板基于ECS和RDS创建WordPress环境
|
2月前
|
存储 监控 Linux
充分利用服务器的磁盘资源,提高系统的稳定性和可维护性
充分利用服务器的磁盘资源,提高系统的稳定性和可维护性
41 0
|
4月前
|
弹性计算 监控 安全
重装系统后,无法通过云监控查看ecs资源占用怎么解决
如果您在重装系统后无法通过云监控查看ECS资源占用,可以按以下步骤排查:1. 确认云监控插件状态是否“运行中”,若不是则需重新安装;2. 通过自动安装流程安装插件,并确认状态变回“运行中”;3. 检查ECS网络配置,确保能访问外部网络;4. 验证监控功能是否正常显示数据;5. 可选设置报警规则。如问题仍存,请检查防火墙或安全组设置。通过上述步骤,您应能重新启用云监控。
|
4月前
|
运维 Linux Apache
【一键变身超人!】Puppet 自动化运维神器 —— 让你的服务器听话如婴儿,轻松管理资源不是梦!
【8月更文挑战第9天】随着云计算与容器化技术的发展,自动化运维已成为现代IT基础设施的核心部分。Puppet是一款强大的自动化工具,用于配置管理,确保系统保持预期状态。通过易于理解的配置文件定义资源及其依赖关系,Puppet实现了“基础设施即代码”的理念。本文简要介绍了Puppet的安装配置方法及示例,包括Puppet Agent与Master的安装、基本配置步骤和一个简单的Apache HTTP Server管理示例,展示了Puppet在实际应用中的强大功能与灵活性。
62 9
|
4月前
|
弹性计算 Kubernetes 开发者
利用容器化服务实现游戏服务器的动态资源配置
【8月更文第12天】在游戏行业中,用户基数的变化往往呈现出明显的波动性,特别是在推广活动期间,用户基数会显著增加,而在非推广期则会有所下降。为了应对这种变化,游戏开发者需要一种能够根据用户基数动态调整服务器资源的解决方案,以确保用户体验的同时最大限度地节省成本。容器化服务因其灵活的资源管理和成本控制能力,成为了理想的解决方案。
69 2
|
5月前
|
SQL 关系型数据库 MySQL
云服务器 ECS产品使用问题之出现“1044 - Access denied for user ‘root‘@‘%‘ to database ‘数据库名称‘”这样的错误,该怎么办
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
5月前
|
Oracle 关系型数据库 Java
实时计算 Flink版操作报错合集之cdc postgres数据库,当表行记录修改后报错,该如何修改
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
SQL 监控 关系型数据库
实时计算 Flink版操作报错合集之在设置监控PostgreSQL数据库时,将wal_level设置为logical,出现一些表更新和删除操作报错,怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。

推荐镜像

更多
下一篇
DataWorks