基于Mappings自动化配置yum源

本文涉及的产品
无影云电脑企业版,4核8GB 120小时 1个月
无影云电脑个人版,1个月黄金款+200核时
资源编排,不限时长
简介: 本场景介绍资源编排服务ROS(Resource Orchestration Service)支持通过创建资源栈的方式使用Mappings自动化配置不同版本CentOS系统的yum源。

基于Mappings自动化配置yum源

1. 编写ROS模板

模板语法

映射(mappings)是一个Key-Value映射表,其中Key和Value可以为字符串类型或者数字类型。如果声明多个映射,用英文逗号(,)分隔。每个映射的名称不能重复。在模板的Resources和Outputs中,可以使用Fn::FindInMap内部函数,通过指定Key而获取映射表的Value。

映射代码示例:

"Mappings": {
    "ValidMapping": {
        "TestKey1": {"TestValu1": "value1"},
        "TestKey2": {"TestValu2": "value2"},
        1234567890: {"TestValu3": "value3"},
        "TestKey4": {"TestValu4": 1234}
    }
}

Fn::FindInMap

内部函数Fn::FindInMap返回与Mappings声明的双层映射中的键对应的值。

声明

"Fn::FindInMap": ["MapName", "TopLevelKey", "SecondLevelKey"]

参数

MapName:Mappings中所声明映射的ID,包含键和值。

TopLevelKey:第一级键,其值是一个键/值对列表。

SecondLevelKey:第二级键,其值是一个字符串或者数字。

返回值

分配给SecondLevelKey的值。

示例

在创建名为WebServer的资源时,需要指定ImageId属性。在Mappings中,描述根据区域区分的ImageId映射。在Parameters中,描述需要用户指定的区域。Fn::FindInMap会根据用户指定的区域,在RegionMap中查找对应的ImageId映射,然后在映射中找到对应的ImageId。

MapName可按照个人意愿设置。在本示例中为"RegionMap"

TopLevelKey设置为创建资源栈的地区。在本示例中,通过{"Ref" : "regionParam"}确定。

SecondLevelKey设置为所需的架构。在本示例中为"32"

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Parameters": {
    "regionParam": {
      "Description": "选择创建ECS的区域",
      "Type": "String",
      "AllowedValues": [
        "hangzhou",
        "beijing"
      ]
    }
  },
  "Mappings": {
    "RegionMap": {
      "hangzhou": {
        "32": "m-25l0rcfjo",
        "64": "m-25l0rcfj1"
      },
      "beijing": {
        "32": "m-25l0rcfj2",
        "64": "m-25l0rcfj3"
      }
    }
  },
  "Resources": {
    "WebServer": {
      "Type": "ALIYUN::ECS::Instance",
      "Properties": {
        "ImageId": {
          "Fn::FindInMap": [
            "RegionMap",
            {"Ref": "regionParam"},
            "32"
          ]
        },
        "InstanceType": "ecs.t1.small",
        "SecurityGroupId": "sg-25zwc****",
        "ZoneId": "cn-beijing-b",
        "Tags": [
          {
            "Key": "key1",
            "Value": "value1"
          },
          {
            "Key": "key2",
            "Value": "value2"
          }
        ]
      }
    }
  }
}

支持的函数

Fn::FindInMap

Ref

模板说明

模板中定义了mappings:{...}对象内容,记录多个CentOS系统版本对应的阿里yum源地址。在创建ECS进行系统初始化操作时,Fn::FindInMap函数会根据所选择镜像参数(InstanceImageId)的版本匹配对应的yum源,然后完成yum源的替换。

声明创建的资源(Resources)

示例代码段如下:

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Description": "Creates ECS Centos system instance, and set yum repo.",
  "Metadata": {
    "ALIYUN::ROS::Interface": {
      "ParameterGroups": [
        {
          "Parameters": [
            "VSwitchZoneId",
            "InstanceImageId",
            "InstanceType",
            "SystemDiskSize",
            "InstancePublicIP",
            "InstancePassword",
            "SystemDiskCategory"
          ],
          "Label": {
            "default": "ECS"
          }
        }
      ],
      "TemplateTags": [
        "acs:example:云起实验室:基于Mappings自动化配置yum源"
      ]
    }
  },
  "Parameters": {
    "SystemDiskCategory": {
      "Type": "String",
      "Label": {
        "en": "System Disk Type",
        "zh-cn": "系统盘类型"
      },
      "Description": {
        "en": "<font color='blue'><b>Optional values:</b></font><br>[cloud_efficiency: <font color='green'>Efficient Cloud Disk</font>]<br>[cloud_ssd: <font color='green'>SSD Cloud Disk</font>]<br>[cloud_essd: <font color='green'>ESSD Cloud Disk</font>]<br>[cloud: <font color='green'>Cloud Disk</font>]<br>[ephemeral_ssd: <font color='green'>Local SSD Cloud Disk</font>]",
        "zh-cn": "<font color='blue'><b>可选值:</b></font><br>[cloud_efficiency: <font color='green'>高效云盘</font>]<br>[cloud_ssd: <font color='green'>SSD云盘</font>]<br>[cloud_essd: <font color='green'>ESSD云盘</font>]<br>[cloud: <font color='green'>普通云盘</font>]<br>[ephemeral_ssd: <font color='green'>本地SSD盘</font>]"
      },
      "AllowedValues": [
        "cloud_efficiency",
        "cloud_ssd",
        "cloud",
        "cloud_essd",
        "ephemeral_ssd"
      ],
      "Default": "cloud_ssd"
    },
    "InstanceImageId": {
      "Type": "String",
      "Default": "centos_7",
      "AllowedValues": [
        "centos_6",
        "centos_7",
        "centos_8"
      ],
      "Description": {
        "zh-cn": "镜像ID, 支持选择 [centos_6,centos_7,centos_8]",
        "en": "Image ID,support [centos_6,centos_7,centos_8]"
      },
      "Label": {
        "zh-cn": "镜像",
        "en": "Image"
      }
    },
    "InstanceType": {
      "Type": "String",
      "Description": {
        "zh-cn": "填写VSwitch可用区下可使用的规格;<br>通用规格:<font color='red'><b>ecs.c5.large</b></font><br>注:可用区可能不支持通用规格<br>规格详见:<a href='https://help.aliyun.com/document_detail/25378.html' target='_blank'><b><font color='blue'>实例规格族</font></a></b>",
        "en": "Fill in the specifications that can be used under the VSwitch availability zone;</b></font><br>general specifications:<font color='red'><b>ecs.c5.large</b></font><br>note: a few zones do not support general specifications<br>see detail: <a href='https://www.alibabacloud.com/help/en/doc-detail/25378.html' target='_blank'><b><font color='blue'>Instance Specification Family</font></a></b>"
      },
      "Label": {
        "zh-cn": "实例规格",
        "en": "Instance Type"
      },
      "AssociationProperty": "ALIYUN::ECS::Instance::InstanceType",
      "AssociationPropertyMetadata": {
        "ZoneId": "VSwitchZoneId"
      }
    },
    "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\\_\\-\\&:;'<>,=%`~!@#\\(\\)\\$\\^\\*\\+\\|\\{\\}\\[\\]\\.\\?\\/]+$",
      "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
    },
    "InstancePublicIP": {
      "Type": "Boolean",
      "Description": {
        "zh-cn": "是否分配公共IP。",
        "en": "Whether to assign a common IP."
      },
      "Label": {
        "zh-cn": "分配公网IP",
        "en": "Allocate Public IP"
      },
      "Default": false
    },
    "VSwitchZoneId": {
      "AssociationProperty": "ALIYUN::ECS::Instance:ZoneId",
      "Type": "String",
      "Description": {
        "zh-cn": "可用区ID。<br><b>注: <font color='blue'>选择前请确认该可用区是否支持创建ECS资源的规格,建议设置与其他交换机不同的可用区</font></b>",
        "en": "Availability Zone ID.<br><b>note:<font color='blue'>before selecting, please confirm that the Availability Zone supports the specification of creating ECS resources,which is recommended to be different from other VSwitch Availability Zone</font></b>"
      },
      "Label": {
        "zh-cn": "交换机可用区",
        "en": "VSwitch Availability Zone"
      }
    },
    "SystemDiskSize": {
      "Default": 40,
      "Type": "Number",
      "Description": {
        "zh-cn": "系统盘大小, 取值范围:40~500, 单位:GB。",
        "en": "System disk size, range of values: 40-500, units: GB."
      },
      "Label": {
        "zh-cn": "系统盘空间",
        "en": "System Disk Space"
      }
    }
  },
  "Mappings": {
    "YumMap": {
      "centos_6": {
        "YumSource": "http://mirrors.aliyun.com/repo/Centos-6.repo"
      },
      "centos_7": {
        "YumSource": "http://mirrors.aliyun.com/repo/Centos-7.repo"
      },
      "centos_8":{
        "YumSource": "http://mirrors.aliyun.com/repo/Centos-8.repo"
      }
    }
  },
  "Resources": {
    "RosConditionHandle": {
      "Type": "ALIYUN::ROS::WaitConditionHandle"
    },
    "RosWaitCondition": {
      "Type": "ALIYUN::ROS::WaitCondition",
      "DependsOn": "EcsInstance",
      "Properties": {
        "Timeout": 1800,
        "Count": 1,
        "Handle": {
          "Ref": "RosConditionHandle"
        }
      }
    },
    "EcsVSwitch": {
      "Type": "ALIYUN::ECS::VSwitch",
      "Properties": {
        "VpcId": {
          "Ref": "EcsVpc"
        },
        "ZoneId": {
          "Ref": "VSwitchZoneId"
        },
        "CidrBlock": "192.168.0.0/24"
      }
    },
    "EcsInstance": {
      "Type": "ALIYUN::ECS::Instance",
      "Properties": {
        "UserData": {
          "Fn::Replace": [
            {
              "ros-notify": {
                "Fn::GetAtt": [
                  "RosConditionHandle",
                  "CurlCli"
                ]
              }
            },
            {
              "Fn::Join": [
                "",
                [
                  "#!/bin/bash \n",
                  "yum_repo=",
                  {
                    "Fn::FindInMap": [
                      "YumMap",
                      {
                        "Ref": "InstanceImageId"
                      },
                      "YumSource"
                    ]
                  },
                  "\n",
                  "mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup\n",
                  "curl -o /etc/yum.repos.d/CentOS-Base.repo $yum_repo \n",
                  "yum clean all \n",
                  "yum makecache \n",
                  "ros-notify -d '{\"data\" : \"Install Centos success.\"}'\n"
                ]
              ]
            }
          ]
        },
        "IoOptimized": "optimized",
        "PrivateIpAddress": "192.168.0.1",
        "VpcId": {
          "Ref": "EcsVpc"
        },
        "SecurityGroupId": {
          "Ref": "EcsSecurityGroup"
        },
        "VSwitchId": {
          "Ref": "EcsVSwitch"
        },
        "ImageId": {
          "Ref": "InstanceImageId"
        },
        "AllocatePublicIP": {
          "Ref": "InstancePublicIP"
        },
        "InstanceType": {
          "Ref": "InstanceType"
        },
        "SystemDiskSize": {
          "Ref": "SystemDiskSize"
        },
        "SystemDiskCategory": {
          "Ref": "SystemDiskCategory"
        },
        "Password": {
          "Ref": "InstancePassword"
        }
      }
    },
    "EcsSecurityGroup": {
      "Type": "ALIYUN::ECS::SecurityGroup",
      "Properties": {
        "VpcId": {
          "Ref": "EcsVpc"
        },
        "SecurityGroupIngress": [
          {
            "PortRange": "-1/-1",
            "Priority": 1,
            "SourceCidrIp": "0.0.0.0/0",
            "IpProtocol": "all",
            "NicType": "intranet"
          }
        ],
        "SecurityGroupEgress": [
          {
            "PortRange": "-1/-1",
            "Priority": 1,
            "IpProtocol": "all",
            "DestCidrIp": "0.0.0.0/0",
            "NicType": "intranet"
          }
        ]
      }
    },
    "EcsVpc": {
      "Type": "ALIYUN::ECS::VPC",
      "Properties": {
        "CidrBlock": "192.168.0.0/16",
        "VpcName": {
          "Fn::Join": [
            "-",
            [
              "StackId",
              {
                "Ref": "ALIYUN::StackId"
              }
            ]
          ]
        }
      }
    }
  },
  "Outputs": {
    "EcsInstanceId": {
      "Value": {
        "Fn::GetAtt": [
          "EcsInstance",
          "InstanceId"
        ]
      }
    }
  }
}

2. 创建资源栈

以下操作需登录阿里云账号,在资源编排控制台完成以下操作流程。

访问资源编排控制台

1. 进入资源编排控制台

访问资源栈页面

2. 在资源编排控制台左侧导航栏中单机资源栈。

选择资源创建地域

3. 在页面左上角的地域下拉列表,选择资源栈的所在地域(例如:华北2:北京)。

创建资源栈

4. 在资源栈列表页面,单击创建资源栈,然后在下拉列表中选择使用新资源(标准)

输入模板

5. 在选择模板页面,选择已有模板:选择输入模板方式,然后将上述示例模板内容复制到模板内容输入框内。然后单击下一步

模板参数配置

6. 在配置模板参数页面,配置资源栈名称及其余参数,然后单击下一步

参数配置

参数

说明

交换机可用区

资源所属的可用区。

镜像

ECS实例的镜像ID。

默认值:centos_7。

更多信息,请参见镜像概述

实例规格

ECS实例规格。

请选用有效的实例规格。更多信息,请参见实例规格族

系统盘空间

ECS实例的系统盘空间。

取值范围:40~500。

单位:GB。

分配公网IP

是否为ECS实例分配公网地址。

  • 选中方框:分配公网IP地址。
  • 不选中方框:不分配公网IP地址。

实例密码

ECS实例登录密码。

系统盘类型

ECS实例的系统盘规格。取值:

  • cloud_efficiency:高效云盘。
  • cloud_ssd:SSD云盘。
  • cloud_essd:ESSD云盘。
  • cloud:普通云盘。
  • ephemeral_ssd:本地SSD盘。

更多信息,请参见云盘概述

资源栈信息配置

配置项

说明

资源栈策略

取值:

  • 无资源栈策略:不设置资源栈策略。
  • 输入资源栈策略:上传文件或在文本框手动输入资源栈策略。

关于资源栈策略的更多信息,请参见资源栈策略

失败时回滚

取值:

  • 已启用:创建资源栈失败时,启用回滚策略。
  • 已禁用:创建资源栈失败时,禁用回滚策略。

超时设置

如果所有资源的创建或更新没有在该时间内完成,系统将自动回滚到创建或更新之前的状态。

取值范围:10~1440。

单位:分钟。

删除保护

防止资源栈被意外删除。取值:

  • 已启用:启用删除保护。
  • 已禁用:禁用删除保护。

RAM角色

您可以创建可信实体为资源编排服务的RAM角色,然后根据ROS模板中资源所需最小权限为RAM角色授权。

标签

由一对键值对组成,方便您对资源栈进行分类。

您可以单击添加,然后在编辑标签绑定对话框设置标签键标签值,最后单击确定

资源组

您可以选择资源栈所在的资源组。如果不指定资源组,资源栈将加入默认资源组。

关于如何创建资源组,请参见创建资源组

创建资源栈

7. 在检查并确认页面,单击创建。

3. 查看资源栈

本步骤将指导您在完成创建资源栈操作后,如何查询资源栈详情。

1. 进入资源编排控制台

2. 在左侧导航栏单击资源栈

3. 在页面左上角的地域下拉列表,选择资源栈的所在地域。

4. 在资源栈列表页面,找到需要查看的资源栈,单击资源栈名称列的资源栈ID

5. 在资源栈管理页面,您可以执行以下操作:

单击资源栈信息页签,查看基本信息和资源栈策略。

查看资源栈事件

6. 单击事件页签,查看资源栈生命周期中发生的每一个事件。

查看资源栈资源

7. 单击资源页签,查看资源栈创建涉及到的资源。

说明:ECS属于付费云产品资源,请您及时释放。您可以点击资源列表下的EcsInstance栏中的ECS实例ID,即可跳转至ECS控制台查看本次创建的ECS资源信息。

4. 释放资源栈

本步骤将指导您如何释放通过资源编排控制台创建资源内容。

进入资源栈列表

1. 在模板页签,单击右上角的 图标。

选择待删除的资源栈

2. 在资源栈列表页面,找到您创建的资源栈,单击操作列下的删除。

选择资源栈删除方式并删除

3. 在删除资源栈对话框中,删除方式选择释放资源,单击确定。

实验链接:https://developer.aliyun.com/adc/scenario/880d8dde92e64242be60375073ce6e2a

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
62 3
|
2月前
OpenEuler配置本地yum源
本文档介绍了如何在服务器和虚拟机上挂载光盘镜像并配置本地Yum仓库,包括创建挂载点、编辑repo文件、实现挂载持久化以及通过FTP共享本地仓库的方法。适用于需要频繁安装软件包或管理多台机器的场景。
322 0
OpenEuler配置本地yum源
|
2月前
|
Linux 应用服务中间件 Shell
利用 ACME 实现SSL证书自动化配置更新
【10月更文挑战第11天】多项式承诺原理是密码学中的重要工具,允许证明者向验证者承诺一个多项式并证明其某些性质。Kate多项式承诺是一种知名方案,基于有限域上的多项式表示,通过生成和验证简洁的证明来确保多项式的正确性和隐私。其安全性基于离散对数假设。应用场景包括区块链中的零知识证明和可验证计算,以及多方计算和身份认证协议。在区块链中,Kate多项式承诺可用于保护隐私币和智能合约中的敏感信息。
|
2月前
|
Unix Linux Go
Linux 使用Yum安装Go和配置环境
Linux 使用Yum安装Go和配置环境
|
4月前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
|
4月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
88 1
|
4月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
79 0
|
4月前
|
Java Spring 开发者
解锁 Spring Boot 自动化配置的黑科技:带你走进一键配置的高效开发新时代,再也不怕繁琐设置!
【8月更文挑战第31天】Spring Boot 的自动化配置机制极大简化了开发流程,使开发者能专注业务逻辑。通过 `@SpringBootApplication` 注解组合,特别是 `@EnableAutoConfiguration`,Spring Boot 可自动激活所需配置。例如,添加 JPA 依赖后,只需在 `application.properties` 配置数据库信息,即可自动完成 JPA 和数据源设置。这一机制基于多种条件注解(如 `@ConditionalOnClass`)实现智能配置。深入理解该机制有助于提升开发效率并更好地解决问题。
73 0
|
4月前
|
运维 应用服务中间件 nginx
自动化运维的利剑:Ansible Role 打造标准化配置
【8月更文挑战第31天】在追求效率和稳定性的今天,自动化运维不再是奢侈品,而是必需品。Ansible Role,作为自动化配置管理的利器,它如何帮助我们实现标准化部署和维护?本文将通过一个简单示例,带你了解 Ansible Role 的魅力所在,并探讨其在现代 IT 架构中的应用价值。
|
4月前
|
Shell 网络安全 Python
网络工程师如何在ensp模拟器上玩python自动化配置交换机。
网络工程师如何在ensp模拟器上玩python自动化配置交换机。
215 0