运维编排场景系列-----自动一键连通跳板机-阿里云开发者社区

开发者社区> 无法重名的那个人> 正文

运维编排场景系列-----自动一键连通跳板机

简介: 跳板机是云盾提供的一个核心系统运维和安全审计管控平台。通过跳板机可以操作跳板机内连通的实例,并在跳板机内对实例进行免密连接操作。此文章构建的是一个简易的跳板机例文。 前提条件 实例状态为运行中(Running) 在控制台查看准备的秘钥对或创建秘钥对 保存秘钥对中的私钥部分 模版说明: 父.
+关注继续查看

跳板机是云盾提供的一个核心系统运维和安全审计管控平台。通过跳板机可以操作跳板机内连通的实例,并在跳板机内对实例进行免密连接操作。此文章构建的是一个简易的跳板机例文。

前提条件

  1. 实例状态为运行中Running
  2. 控制台查看准备的秘钥对或创建秘钥对
  3. 保存秘钥对中的私钥部分

模版说明:

父模版主要功能为:

  1. 获取实例
  2. 检查实例是否绑定了指定的公共秘钥否则绑定秘钥对
  3. 检查实例运行状态是否符合预期
  4. 检测选择执行公网Ip或者选择执行弹性公网Ip
  5. 将似钥存放进跳板机内并测试连接
  6. 检测选择是否执行测试连接弹性公网Ip
  7. 检测当前任务
FormatVersion: OOS-2019-06-01
Description:
  en: Connect the instance in the jumper instance.
  zh-cn: 连接跳板机内的实例。
Parameters:
  KeyPairName:
    Type: String
    Description:
      en: Key pair name.
      zh-cn: 秘钥对名称。
  SecretKeys:
    Type: String
    Description:
      en: Path and file name of the private key stored in the springboard.
      zh-cn: 跳板机内存放私钥的路径及文件名称。
  JumperInstanceId:
    Type: String
    Description:
      en: Jumper instance ID.
      zh-cn: 跳板机实例ID。
  Targets:
    Type: Json
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: 'ALIYUN::ECS::Instance'
  RateControl:
    Description:
      en: Concurrency ratio of task execution.
      zh-cn: 任务执行的并发比率。
    Type: Json
    AssociationProperty: RateControl
    Default:
      Mode: Concurrency
      MaxErrors: 100
      Concurrency: 10
  OOSAssumeRole:
    Description: The RAM role to be assumed by OOS.
    Type: String
    Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: getInstance
    Description:
      en: Views the ECS instances.
      zh-cn: 获取ECS实例。
    Action: 'ACS::SelectTargets'
    Properties:
      ResourceType: 'ALIYUN::ECS::Instance'
      Filters:
        - '{{ Targets }}'
    Outputs:
      instanceIds:
        Type: List
        ValueSelector: 'Instances.Instance[].InstanceId'
  - Name: checkInstanceHasInstalledKeyPair
    Action: 'ACS::Template'
    Description:
      en: 'Check if the instance has the specified public Secret, if not, install it.'
      zh-cn: 检查实例是否安装了指定的公共秘要,若无则安装。
    Properties:
      TemplateName: CheckInstanceWetherInstallKeyPair
      Parameters:
        KeyPairName: '{{ KeyPairName }}'
        InstanceId: '{{ ACS::TaskLoopItem }}'
    Loop:
      RateControl: '{{ RateControl }}'
      Items: '{{ getInstance.instanceIds }}'
  - Name: checkInstanceReady
    Action: 'ACS::CheckFor'
    Description:
      en: Check the ECS instance is not Starting status..
      zh-cn: 检查实例的状态不是Starting。
    Properties:
      Service: ECS
      API: DescribeInstances
      Parameters:
        InstanceIds:
          - '{{ ACS::TaskLoopItem }}'
      NotDesiredValues:
        - Starting
      PropertySelector: 'Instances.Instance[].Status'
    Outputs:
      publicIpAddress:
        Type: String
        ValueSelector: 'Instances.Instance[].PublicIpAddress.IpAddress[]'
      eipAddress:
        Type: String
        ValueSelector: 'Instances.Instance[].EipAddress.IpAddress'
    Loop:
      RateControl: '{{ RateControl }}'
      Items: '{{ getInstance.instanceIds }}'
      Outputs:
        publicIpAddresses:
          AggregateType: 'Fn::ListJoin'
          AggregateField: publicIpAddress
        eipAddresses:
          AggregateType: 'Fn::ListJoin'
          AggregateField: eipAddress
  - Name: chooseEipOrPublicIp
    Action: 'ACS::Choice'
    Properties:
      DefaultTask: runCommandPublicIp
      Choices:
        - When:
            'Fn::Equals':
              - - Null
              - '{{ checkInstanceReady.publicIpAddresses }}'
          NextTask: runCommandEIp
  - Name: runCommandPublicIp
    Action: 'ACS::ECS::RunCommand'
    Description:
      en: 'Try to connect the ECS instance in the jumper instance.'
      zh-cn: 测试连接跳板机内的实例。
    Properties:
      commandContent:
        'Fn::Join':
          - |+

          - - 'echo ''{{ SecretKeys }}'' > ~/jumperInstance.pem'
            - chmod 600 ~/jumperInstance.pem
            - 'ssh root@{{ ACS::TaskLoopItem }} -i ~/jumperInstance.pem'
            - ifconfig -a
      instanceId: '{{ JumperInstanceId }}'
      commandType: RunShellScript
    Outputs:
      commandOutput:
        Type: String
        ValueSelector: invocationOutput
    Loop:
      RateControl: '{{ RateControl }}'
      Items: '{{ checkInstanceReady.publicIpAddresses }}'
      Outputs:
        commandOutputs:
          AggregateType: 'Fn::ListJoin'
          AggregateField: commandOutput
  - Name: chooseEipOrEnd
    Action: 'ACS::Choice'
    Properties:
      DefaultTask: runCommandEIp
      Choices:
        - When:
            'Fn::Equals':
              - - Null
              - '{{ checkInstanceReady.eipAddresses }}'
          NextTask: listExecutions
  - Name: runCommandEIp
    Action: 'ACS::ECS::RunCommand'
    Description:
      en: 'Try to connect the ECS instance in the jumper instance.'
      zh-cn: 测试连接跳板机内的实例。
    Properties:
      commandContent:
        'Fn::Join':
          - |+

          - - 'echo ''{{ SecretKeys }}'' > ~/jumperInstance.pem'
            - chmod 600 ~/jumperInstance.pem
            - 'ssh root@{{ ACS::TaskLoopItem }} -i ~/jumperInstance.pem'
            - ifconfig -a
      instanceId: '{{ JumperInstanceId }}'
      commandType: RunShellScript
    Outputs:
      commandOutput:
        Type: String
        ValueSelector: invocationOutput
    Loop:
      RateControl: '{{ RateControl }}'
      Items: '{{ checkInstanceReady.eipAddresses }}'
      Outputs:
        commandOutputs:
          AggregateType: 'Fn::ListJoin'
          AggregateField: commandOutput
  - Name: listExecutions
    Action: 'ACS::ExecuteAPI'
    Description: 
      en: 'The execution springboard.'
      zh-cn: 执行跳板。
        Properties:
      Service: OOS
      API: ListExecutions
      Parameters:
        ExecutionId: '{{ ACS::ExecutionId }}'

子模版
需将子模版命名为:CheckInstanceWetherInstallKeyPair
子模版主要功能:

  • 检测是否绑定公共秘要
  • 若无则将公共秘要绑定到实例上
  • 重启实例
  • 检测是否绑定秘要
FormatVersion: OOS-2019-06-01
Description:
  en: Check if the instance bind the specified key pair.
  zh-cn: 检查实例是否绑定了指定的秘钥对。
Parameters:
  InstanceId:
    Type: String
    Description:
      en: The ECS instance ID in the jumper instance need to binding.
      zh-cn: 跳板机内需要绑定的ECS实例ID。
  KeyPairName:
    Type: String
    Description:
      en: The key pair name.
      zh-cn: 秘钥对的名称。
  OOSAssumeRole:
    Description: The RAM role to be assumed by OOS.
    Type: String
    Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: checkInstanceHasKeyPair
    Action: 'ACS::CheckFor'
    Description:
      zh-cn: 查询实例是否绑定了给定的秘钥对。
      en: Check if the instance bind the specified KeyPair.
    OnSuccess: checkInstanceHasKeyPairIsOnlyOne
    OnError: AttachKeyPair
    Properties:
      Service: ECS
      API: DescribeInstances
      Parameters:
        KeyPairName: '{{ KeyPairName }}'
        InstanceIds:
          - '{{ InstanceId }}'
      NotDesiredValues:
        - 0
      PropertySelector: TotalCount
  - Name: AttachKeyPair
    Action: 'ACS::ExecuteAPI'
    Description:
      en: Bind the key pair to the instance.
      zh-cn: 将秘钥对绑定到实例上。
    Properties:
      Service: ECS
      API: AttachKeyPair
      Parameters:
        InstanceIds:
          - '{{ InstanceId }}'
        KeyPairName: '{{ KeyPairName }}'
  - Name: rebootInstance
    Action: 'ACS::ECS::RebootInstance'
    Description:
      en: Restarts the ECS instances.
      zh-cn: 重启实例。
    Properties:
      instanceId: '{{ InstanceId }}'
  - Name: checkInstanceHasKeyPairIsOnlyOne
    Action: 'ACS::CheckFor'
    Description:
      zh-cn: 查询实例是否绑定了给定的秘钥对。
      en: Check if the instance bind the specified KeyPair.
    Properties:
      Service: ECS
      API: DescribeInstances
      Parameters:
        KeyPairName: '{{ KeyPairName }}'
        InstanceIds:
          - '{{ InstanceId }}'
      DesiredValues:
        - 1
      PropertySelector: TotalCount

模版参数说明:

参数 说明 示例
KeyPairName 创建的秘钥对名称 test-oos-jump
SecretKeys 秘钥对中的私钥 usr/test.pem
JumperInstanceId 跳板机实例Id
Targets 根据实例标签(tags)或实例ID(InstanceId)选定需要的实例。 i-11111111111
RateControl 固定参数。
- 速率控制类型:并发控制
- 并发速率:1
- 最大错误次数:0
OOSAssumeRole 可选参数。
- (默认设置)当前账号的已有权限:执行您使用的账号的权限动作。请确保您拥有创建自定义镜像涉及的所有ECS API调用权限。
- 指定RAM角色,使用该角色的权限:如果指定了RAM角色名称,OOS扮演该RAM角色执行运维任务。
当前账号的已有权限

操作步骤

  1. 请访问运维编排OOS的控制1575967687928_2a2bdc63_7a88_4a10_a561_178b68c70790
  2. 单击我的模版,单击创建模板按钮,选取空白模板1575969102712_7959cd3f_5f5c_4d6c_ad97_6e4f7beeaed1
  3. 先将上述提供的模板粘贴到yaml栏,输入名称CheckInstanceWetherInstallKeyPair,点击创建模板。然后将父模版粘贴到yaml栏,输入名称ConnectJumperInstance,点击创建模版。1576811830198_c4ce539d_ca54_45dd_a3f6_c3d2cad3c0a5
  4. 找到创建的父模版,单击创建执行1576811915209_f663aa88_b490_44a4_944e_0e68dfac9c99
  5. 保持基本信息的默认设置,单击下一步:设置参数
  6. 完成参数设置填写,单击下一步:确认1576812032493_5b7ae212_9d57_4658_aebd_ad08acc0e209
  7. 查看参数设置是否无误,确认无误后单击创建执行1576812146046_d882f3d6_5967_43c9_be37_24d677cfad67
  8. 执行管理中查看创建的运维任务。1576812308765_ed7b3546_286c_4046_8c2e_a85c1ba1c758
  9. 执行结果
    登陆跳板机,此时在跳板机内输入ssh root@11.xx.xx.xx -i ~/xxxx.pem就可以实现免密连接其下任意实例。
    1576812562482_1f4c2020_308f_49b2_9fe0_97481077bc38

系列文章

主题文章

阿里云重磅发布云上自动化利器——运维编排OOS

最佳实践

玩转运维编排服务的权限:Assume Role+Pass Role
阿里云运维编排新功能:一键批量克隆ECS
批量在多台ECS内执行命令

场景系列

运维编排场景系列----更新ECS镜像
运维编排场景系列----给ECS实例自动打TAG
运维编排场景系列----从实例中拷贝文件到OSS
运维编排场景系列----给实例加到SLS机器组
运维编排场景系列----检测MFA功能状态
运维编排场景系列----每日统计多Region实例的运行状态
运维编排场景系列----如何使用jq
运维编排场景系列----分批到机器上运行命令
运维编排场景系列----更新镜像后自动更新伸缩配置镜像
运维编排场景系列----向Linux实例上传文件
运维编排场景系列----运行远端shell脚本
运维编排场景系列----在ECS实例上运行Ansible-playbook
运维编排场景系列----下载JVM堆栈到OSS
运维编排系列场景----将实例的固定公网IP转换为其它新EIP
运维编排场景系列----自动定时升级临时带宽
运维编排场景系列----批量更新云助手客户端
运维编排系列场景----批量释放实例
运维编排场景系列----ECS实例系统快照下载到本地
运维编排场景系列----批量更换系统盘
运维编排场景系列----自动创建多个区域同类型存储空间
运维编排场景系列---一键批量重置实例密码

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
四:GTID中的运维(笔记)
一、ONGOING_ANONYMOUS_TRANSACTION_COUNT 主库 生成GTID: 这下面可以调用匿名+1 (gdb) bt #0 Gtid_state::generate_automatic_gtid (this=0x308ab20, thd=0x7ffe7c000b70, sp...
534 0
运维编排场景系列----更新ECS镜像
运维编排场景系列----更新ECS镜像 场景介绍       为了保证ECS实例的运行环境始终是安全的,包括安装最新补丁,或者更新所依赖的组件等。我们需要从一个源镜像开始逐步更新,最终生成一个新镜像,然后用于测试和生产。
16858 0
运维编排场景系列-----每日统计多Region实例的运行状态
应用场景 一个账号内存在一个Region或者多个Region时,并且每个Region都存在多个实例。需要自定义指定时间来查看所有Region下或者查看指定的部分Region的全部实例的运行状态,并统计出各种实例状态的数量,将输出的报告以钉钉的形式通知指定用户。
1748 0
运维数据生态:高阶落地的一些场景
前言:在上一篇《无数据,不工作!运维“数据思维”有多重要?》中,我们站在运维的视角来对数据的作用做了一些解读,其中包括数据的重要性、运维的数据观和数据思维的理解。在本篇中,对运维数据的一些高阶使用场景进行介绍,运维数据使用的发展态势和落地价值,本章节重点从产品开发角度,探讨运维数据场景的高阶落地途径和方法。
19 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4478 0
运维场景下的实时计算应用
案例与解决方案汇总页:阿里云实时计算产品案例&解决方案汇总 运维场景主要有下面几个需求: 整体系统运行指标计算与可视化,可参考:数据仓库介绍与实时数仓案例 问题排查与全链路DEBUG,可参考:【阿里内部应用】基于Blink构建搜索全链路debug系统快速定位搜索问题、【阿里内部应用】基于Bli.
6447 0
14
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载