AlibabaCloudのResource Orchestration Service(ROS)を触ってみる。

今回はAlibabaCloudの
Resource Orchestration Service
に触れてみます。

# Resource Orchestration Serviceとは

[ROS (Resource Orchestration Service、ROS) - Alibaba Cloud プロダクト](https://jp.alibabacloud.com/product/ros)

> Resource Orchestration Service (ROS) は Alibaba Cloud リソースの作成や管理を効率化するサービスです。ROS を利用することで開発者やシステム管理者の作業工数を大幅に削減することが可能です。ROS では、リソース、リソース間の依存関係、および設定の詳細をJSON形式のテキストファイルで定義できます。

AWSでいう、CloudFormationと同じものです。

# コンソール画面

![0.50hy26k7zjv.png](https://qiita-image-store.s3.amazonaws.com/0/241104/97acf92a-752c-4b28-12d9-e6f5b7e5e681.png)

# サンプルVPCを起動

![0.0w1gil4o7xi.png](https://qiita-image-store.s3.amazonaws.com/0/241104/076ebfda-3d8c-214f-1d74-b0f5c77ed75b.png)

サンプルを起動してもどなたでも可能ですから省略します。

# サンプルテンプレートのJSONを確認してみます

```
{
  "ROSTemplateFormatVersion" : "2015-09-01",
  "Description": "One VPC instance",
  "Parameters" : {
    "CidrBlock": {
      "Type": "String",
      "AllowedValues": ["192.168.0.0/16", "172.16.0.0/12", "10.0.0.0/8"],
      "Default": "192.168.0.0/16"
    },
    "VpcName": {
      "Type": "String",
      "Description": "The VPC name",
      "MinLength": 2,
      "MaxLength": 128,
      "ConstraintDescription": "[2, 128] English or Chinese letters"
    }
  },
  "Resources" : {
    "Vpc": {
      "Type": "ALIYUN::ECS::VPC",
      "Properties": {
        "CidrBlock": {"Ref": "CidrBlock"},
        "VpcName": {"Ref": "VpcName"}
      }
    }
  },
  "Outputs": {
    "VpcId": {
      "Value" : {"Fn::GetAtt": ["Vpc", "VpcId"]}
    },
    "VRouterId": {
      "Value" : {"Fn::GetAtt": ["Vpc", "VRouterId"]}
    },
    "RouteTableId": {
      "Value" : {"Fn::GetAtt": ["Vpc", "RouteTableId"]}
    }
  }
}
```

# サンプルテンプレートを参考にVPCのVSwitchを増やします。

サブネットは下記の表のようにしました。
仮想サーバ、ロードバランサー、データベースで分けました。

|VSwitch|サブネット|
|:---|:---|
|ECS|10.0.0.0/24|
|SLB|10.0.1.0/24|
|RDS|10.0.2.0/24|

[ALIYUN::ECS::VSwitch](https://www.alibabacloud.com/help/faq-detail/51192.htm)
をみて、下記のように変更しました。

```json
{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Description": "poc",
  "Parameters": {
    "CidrBlock": {
      "AllowedValues": [
        "192.168.0.0/16",
        "172.16.0.0/12",
        "10.0.0.0/8"
      ],
      "Default": "10.0.0.0/8",
      "Type": "String"
    },
    "VpcName": {
      "ConstraintDescription": "[2, 128] English or Chinese letters",
      "Default": "poc",
      "Description": "The VPC name",
      "MaxLength": 128,
      "MinLength": 2,
      "Type": "String"
    }
  },
  "Conditions": {},
  "Mappings": {},
  "Resources": {
    "VSwitch-ECS": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-2"
      },
      "Properties": {
        "CidrBlock": "10.0.0.0/24",
        "Description": "ecs",
        "VSwitchName": "ecs",
        "VpcId": {
          "Ref": "Vpc"
        },
        "ZoneId": "ap-northeast-1a"
      },
      "Type": "ALIYUN::ECS::VSwitch"
    },
    "VSwitch-RDS": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-4"
      },
      "Properties": {
        "CidrBlock": "10.0.2.0/24",
        "Description": "rds",
        "VSwitchName": "rds",
        "VpcId": {
          "Ref": "Vpc"
        },
        "ZoneId": "ap-northeast-1a"
      },
      "Type": "ALIYUN::ECS::VSwitch"
    },
    "VSwitch-SLB": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-3"
      },
      "Properties": {
        "CidrBlock": "10.0.1.0/24",
        "Description": "slb",
        "VSwitchName": "slb",
        "VpcId": {
          "Ref": "Vpc"
        },
        "ZoneId": "ap-northeast-1a"
      },
      "Type": "ALIYUN::ECS::VSwitch"
    },
    "Vpc": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-1"
      },
      "Properties": {
        "CidrBlock": "10.0.0.0/8",
        "VpcName": {
          "Ref": "VpcName"
        }
      },
      "Type": "ALIYUN::ECS::VPC"
    }
  },
  "Outputs": {
    "RouteTableId": {
      "Value": {
        "Fn::GetAtt": [
          "Vpc",
          "RouteTableId"
        ]
      }
    },
    "VRouterId": {
      "Value": {
        "Fn::GetAtt": [
          "Vpc",
          "VRouterId"
        ]
      }
    },
    "VSwitch-ECS": {
      "Value": {
        "Fn::GetAtt": [
          "VSwitch-ECS",
          "VSwitchId"
        ]
      }
    },
    "VSwitch-RDS": {
      "Value": {
        "Fn::GetAtt": [
          "VSwitch-RDS",
          "VSwitchId"
        ]
      }
    },
    "VSwitch-SLB": {
      "Value": {
        "Fn::GetAtt": [
          "VSwitch-ECS",
          "VSwitchId"
        ]
      }
    },
    "VpcId": {
      "Value": {
        "Fn::GetAtt": [
          "Vpc",
          "VpcId"
        ]
      }
    }
  }
}
```

# ROSのスタックを作るとできあがりです。

![0.96uoq0e04qk.png](https://qiita-image-store.s3.amazonaws.com/0/241104/93531e73-61f1-5e8c-c18c-d638657a5cdd.png)