AlibabaCloudのロードバランサーを動かしてみる（ROS版）

# はじめに
[AlibabaCloudのロードバランサーを動かしてみる](https://qiita.com/wa-ta-ru/items/3bbcba1a2ea43f5d025f)

をROSで起動してみます。

[AlibabaCloudのECSを東京リージョンの最安値で起動してみる！(ROS版)](https://qiita.com/wa-ta-ru/items/9af5027860c730c328b5)

にSLB、ロードバランサーを一緒にしたものです。

# ROSテンプレート

```json
{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Description": "poc",
  "Metadata": {
    "RosGraphicElement-1": {
      "x": 21,
      "y": 87,
      "width": 361,
      "height": 320
    },
    "RosGraphicElement-2": {
      "x": 31,
      "y": 39
    },
    "RosGraphicElement-3": {
      "x": 29,
      "y": 131
    },
    "RosGraphicElement-4": {
      "x": 147,
      "y": 39
    },
    "RosGraphicElement-5": {
      "x": 278,
      "y": 39
    },
    "RosGraphicElement-6": {
      "x": 29,
      "y": 229
    },
    "RosGraphicElement-7": {
      "x": 549,
      "y": 126
    },
    "RosGraphicElement-8": {
      "x": 453,
      "y": 199
    },
    "RosGraphicElement-9": {
      "x": 677,
      "y": 199
    },
    "RosGraphicElement-10": {
      "x": 549,
      "y": 261
    },
    "RosGraphicElement-11": {
      "x": 549,
      "y": 355
    }
  },
  "Parameters": {
    "CidrBlock": {
      "Type": "String",
      "AllowedValues": [
        "192.168.0.0/16",
        "172.16.0.0/12",
        "10.0.0.0/8"
      ],
      "Default": "10.0.0.0/8"
    },
    "ImageId": {
      "Type": "String",
      "Description": "ECS Image",
      "Label": "ECS Image",
      "Default": "centos_7_04_64_20G_alibase_201701015.vhd"
    },
    "InstanceType": {
      "Type": "String",
      "Description": "ECS Instance Type",
      "AllowedValues": [
        "ecs.xn4.small"
      ],
      "Label": "ECS Instance Type",
      "Default": "ecs.xn4.small"
    },
    "KeyPair": {
      "Type": "String",
      "Description": "ECS Key Pair",
      "Label": "ECS Key Pair",
      "Default": "aliyun-ap-northeast-1"
    }
  },
  "Mappings": {},
  "Conditions": {},
  "Resources": {
    "VPC": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-1"
      },
      "Type": "ALIYUN::ECS::VPC",
      "Properties": {
        "VpcName": {
          "Ref": "ALIYUN::StackName"
        },
        "CidrBlock": "10.0.0.0/8"
      }
    },
    "VSwitch-ECS": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-2"
      },
      "Type": "ALIYUN::ECS::VSwitch",
      "Properties": {
        "VSwitchName": "ecs",
        "VpcId": {
          "Ref": "VPC"
        },
        "CidrBlock": "10.0.0.0/24",
        "Description": "ecs",
        "ZoneId": {
          "Fn::Select": [
            "0",
            {
              "Fn::GetAZs": {
                "Ref": "ALIYUN::Region"
              }
            }
          ]
        }
      }
    },
    "VSwitch-SLB": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-3"
      },
      "Type": "ALIYUN::ECS::VSwitch",
      "Properties": {
        "VSwitchName": "slb",
        "VpcId": {
          "Ref": "VPC"
        },
        "CidrBlock": "10.0.1.0/24",
        "Description": "slb",
        "ZoneId": {
          "Fn::Select": [
            "0",
            {
              "Fn::GetAZs": {
                "Ref": "ALIYUN::Region"
              }
            }
          ]
        }
      }
    },
    "ECS": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-4"
      },
      "Type": "ALIYUN::ECS::Instance",
      "Properties": {
        "SystemDiskCategory": "cloud_ssd",
        "IoOptimized": "optimized",
        "InternetChargeType": "PayByTraffic",
        "PrivateIpAddress": "10.0.0.2",
        "KeyPairName": {
          "Ref": "KeyPair"
        },
        "VpcId": {
          "Ref": "VPC"
        },
        "HostName": {
          "Ref": "ALIYUN::StackName"
        },
        "ImageId": {
          "Ref": "ImageId"
        },
        "InstanceChargeType": "Postpaid",
        "VSwitchId": {
          "Ref": "VSwitch-ECS"
        },
        "InstanceType": {
          "Ref": "InstanceType"
        },
        "InternetMaxBandwidthOut": 1,
        "InstanceName": {
          "Ref": "ALIYUN::StackName"
        },
        "InternetMaxBandwidthIn": 200,
        "SecurityGroupId": {
          "Ref": "SG"
        },
        "Period": 1,
        "AllocatePublicIP": "true"
      }
    },
    "SG": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-5"
      },
      "Type": "ALIYUN::ECS::SecurityGroup",
      "Properties": {
        "VpcId": {
          "Ref": "VPC"
        },
        "SecurityGroupName": {
          "Fn::Join": [
            "-",
            [
              {
                "Ref": "ALIYUN::StackName"
              },
              "ecs-sg"
            ]
          ]
        },
        "SecurityGroupEgress": [
          {
            "PortRange": "-1/-1",
            "Priority": 1,
            "IpProtocol": "all",
            "DestCidrIp": "0.0.0.0/0",
            "NicType": "intranet",
            "SecurityGroupId": "0"
          }
        ],
        "SecurityGroupIngress": [
          {
            "PortRange": "-1/-1",
            "Priority": 1,
            "SourceCidrIp": "0.0.0.0/0",
            "IpProtocol": "all",
            "NicType": "intranet",
            "SecurityGroupId": "0"
          }
        ]
      }
    },
    "VSwitch-RDS": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-6"
      },
      "Type": "ALIYUN::ECS::VSwitch",
      "Properties": {
        "VSwitchName": "rds",
        "VpcId": {
          "Ref": "VPC"
        },
        "CidrBlock": "10.0.2.0/24",
        "Description": "rds",
        "ZoneId": {
          "Fn::Select": [
            "0",
            {
              "Fn::GetAZs": {
                "Ref": "ALIYUN::Region"
              }
            }
          ]
        }
      }
    },
    "SLB": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-7"
      },
      "Type": "ALIYUN::SLB::LoadBalancer",
      "Properties": {
        "Bandwidth": 1,
        "AddressType": "internet",
        "LoadBalancerName": {
          "Ref": "ALIYUN::StackName"
        },
        "InternetChargeType": "paybytraffic"
      }
    },
    "SLB-Listener": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-8"
      },
      "Type": "ALIYUN::SLB::Listener",
      "Properties": {
        "Protocol": "http",
        "ListenerPort": 80,
        "Bandwidth": 1,
        "BackendServerPort": 80,
        "Scheduler": "wrr",
        "LoadBalancerId": {
          "Ref": "SLB"
        },
        "VServerGroupId": {
          "Ref": "SLB-VServerGroup"
        }
      }
    },
    "SLB-BackendServerAttachment": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-9"
      },
      "Type": "ALIYUN::SLB::BackendServerAttachment",
      "Properties": {
        "BackendServers": [
          {
            "ServerId": {
              "Ref": "ECS"
            },
            "Weight": "100"
          }
        ],
        "LoadBalancerId": {
          "Ref": "SLB"
        }
      }
    },
    "SLB-VServerGroup": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-10"
      },
      "Type": "ALIYUN::SLB::VServerGroup",
      "Properties": {
        "VServerGroupName": {
          "Ref": "ALIYUN::StackName"
        },
        "BackendServers": [
          {
            "ServerId": {
              "Ref": "ECS"
            },
            "Port": "80",
            "Weight": "100"
          }
        ],
        "LoadBalancerId": {
          "Ref": "SLB"
        }
      }
    },
    "SLB-BackendServerToVServerGroupAddition": {
      "Metadata": {
        "GraphicId": "RosGraphicElement-11"
      },
      "Type": "ALIYUN::SLB::BackendServerToVServerGroupAddition",
      "Properties": {
        "VServerGroupId": {
          "Ref": "SLB-VServerGroup"
        },
        "BackendServers": [
          {
            "ServerId": {
              "Ref": "ECS"
            },
            "Port": "80",
            "Weight": "100"
          }
        ]
      }
    }
  },
  "Outputs": {
    "VRouterId": {
      "Value": {
        "Fn::GetAtt": [
          "VPC",
          "VRouterId"
        ]
      }
    },
    "VSwitch-ECS": {
      "Value": {
        "Fn::GetAtt": [
          "VSwitch-ECS",
          "VSwitchId"
        ]
      }
    },
    "RouteTableId": {
      "Value": {
        "Fn::GetAtt": [
          "VPC",
          "RouteTableId"
        ]
      }
    },
    "VpcId": {
      "Value": {
        "Fn::GetAtt": [
          "VPC",
          "VpcId"
        ]
      }
    },
    "VSwitch-SLB": {
      "Value": {
        "Fn::GetAtt": [
          "VSwitch-ECS",
          "VSwitchId"
        ]
      }
    },
    "VSwitch-RDS": {
      "Value": {
        "Fn::GetAtt": [
          "VSwitch-RDS",
          "VSwitchId"
        ]
      }
    },
    "EcsZoneId": {
      "Description": "Ecs Zone id of created instance.",
      "Value": {
        "Fn::GetAtt": [
          "ECS",
          "ZoneId"
        ]
      }
    },
    "InstanceId": {
      "Description": "ECS Instance Id",
      "Value": {
        "Fn::GetAtt": [
          "ECS",
          "InstanceId"
        ]
      }
    },
    "PublicIp": {
      "Description": "Public IP address",
      "Value": {
        "Fn::GetAtt": [
          "ECS",
          "PublicIp"
        ]
      }
    },
    "PrivateIp": {
      "Description": "ECS Private IP address",
      "Value": {
        "Fn::GetAtt": [
          "ECS",
          "PrivateIp"
        ]
      }
    },
    "HostName": {
      "Description": "ECS Host Name",
      "Value": {
        "Fn::GetAtt": [
          "ECS",
          "HostName"
        ]
      }
    }
  }
}
```

ROSビジュアルデザイナーの画像

![ce05c406.png](https://qiita-image-store.s3.amazonaws.com/0/241104/8a356e94-01d2-f92a-904a-0c5db2a3c7ce.png)

このテンプレートで起動しますと、SLBとECS(VPC上)のリソースが作成されます。

# 起動後の仕上げ
ロードバランサーとサーバがつながってますが
80ポートのヘルスチェックに落ちてます。
ECSに入って、nginxかhttpdを起動します。

```shell
[root@poc ~]# yum -y install nginx
[root@poc ~]# /bin/systemctl start nginx.service
```

# さいごに

ロードバランサーのIPアドレスをブラウザで開く

![aa3c9951.png](https://qiita-image-store.s3.amazonaws.com/0/241104/0190519c-f7b3-d7dd-f9e8-7cfa6b991994.png)

となります。

**ROSなので、削除すると一回で消えます。**