阿里云资源编排(ROS)Sample

35 篇文章 0 订阅

原来用过AWS cloudFormation 服务感觉用于帮客户搭建环境很好用。近期需要客户创建一个阿里云OSS 桶资源,并给一个对应用户mobile APP访问的RAM角色和一个用于server访问的子账号。 文档写了5小节,整个过程比较繁琐,如果需要客户手动操作可能会造成一些困扰。所以这里就看了下和AWS cloudFormation对应的阿里云 资源编排服务(ROS)。此文档记录一些Sample方便以后接着填这种坑。

阿里云的文档写的还是不错的:
模板的基本语法: https://help.aliyun.com/document_detail/28858.html?spm=a2c4g.11186623.6.580.161a3f76e6WOvq
资源索引:https://help.aliyun.com/document_detail/127039.html?spm=a2c4g.11186623.6.554.d1496897MYamIT

场景是需要创建OSS桶,并创建一个访问OSS桶的子账号,并创建一个签发STS服务访问OSS桶的角色。且子账号和角色权限不同。实质上这里就解决2个问题。
1 传入参数
2 如何让第一个资源作为第二个资源的输入,依赖执行

1 传入参数可以使用Parameters参数,如下:

 "Parameters": {
    "UserInputName": {
      "Type": "String",
      "Description": {
        "en": "user name",
        "zh-cn": "待创建阿里云子账号名称"
      },
      "AllowedPattern": "^[a-z0-9]{1}[a-z0-9\\-.]{1,62}[a-z0-9]{1}$",
      "Label": "User Name",
      "ConstraintDescription": "Must begin and be end with a lowercase letter or number. The length is within [3, 63]",
      "Default": "test"
    }
  }

即传入了一个参数UserInputName
而如何使用? 需要使用到函数参数

{
   "Ref": "UserInputName"
}

就可以在模板的中得到对应输入,并填到对应资源中进行创建。


2 如何让第一个资源作为第二个资源的输入,依赖执行。
如何读取到资源创建的输出呢,也是使用函数,执行后即为资源创建后的输出。

{"Fn::GetAtt": ["RamUser","UserId"]}

如何让第二个资源在第一个资源创建后才执行?
Resources字段中有dependsOn 字段。既可以实现一个资源依赖另一个资源。

下面提供一个创建子账号,并获取子账号AccessKeyID ,并创建一个可以用子账号扮演角色的模板代码。下次好直接抄。

{
  "Description": "test",
  "Parameters": {
    "UserInputName": {
      "Type": "String",
      "Description": {
        "en": "user name",
        "zh-cn": "待创建阿里云子账号名称"
      },
      "AllowedPattern": "^[a-z0-9]{1}[a-z0-9\\-.]{1,62}[a-z0-9]{1}$",
      "Label": "User Name",
      "ConstraintDescription": "Must begin and be end with a lowercase letter or number. The length is within [3, 63]",
      "Default": "test"
    }
  },
  "ROSTemplateFormatVersion": "2015-09-01",
  "Outputs": {
    "用户名": {
      "Value": {"Fn::GetAtt": ["RamUser","UserName"]}
    },
    "用户ID": {
      "Value": {"Fn::GetAtt": ["RamUser","UserId"]}
    },
    "用户ARN": {
      "Value":{
        "Fn::Sub": [
          "acs:ram::${Var1}:user/${Var2}",
          {
            "Var1": { "Ref":"ALIYUN::TenantId" },
            "Var2": {"Fn::GetAtt": ["RamUser","UserName"]}
          }
        ]
      }
    },
    "用户AccessKeyID": {
      "Value": {"Fn::GetAtt": ["RamAK", "AccessKeyId"]}
    },
    "用户AccessKeySecret": {
          "Value": {"Fn::GetAtt": ["RamAK","AccessKeySecret"]}
    }
  },
  "Resources": {
    "RamUser":{
      "Type": "ALIYUN::RAM::User",
      "Properties": {
        "UserName":  {
          "Ref": "UserInputName"
        },
        "DisplayName": "User"
      }
    },
    "RamAK": {
      "Type": "ALIYUN::RAM::AccessKey",
      "Properties": {
        "UserName":  {"Fn::GetAtt": ["RamUser","UserName"]}
      },
      "DependsOn":"RamUser"
    },
    "RamRole": {
      "Type": "ALIYUN::RAM::Role",
      "Properties": {
        "RoleName": "AppRole",
        "Description": "OSS RAM角色",
        "AssumeRolePolicyDocument" : {
          "Statement": [
            {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Principal": {
                  "RAM": [{ 
                    "Fn::Sub": [
                      "acs:ram::${Var1}:user/${Var2}",
                      {
                        "Var1": { "Ref":"ALIYUN::TenantId" },
                        "Var2": {"Fn::GetAtt": ["RamUser","UserName"]}
                      }
                    ]
                  }]
                }
            }
          ],
          "Version":"1"
        }
      },
      "DependsOn":"RamUser"
    }

  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值