【Alibaba Cloud】【Resource Orchestration Service】ROSを使用して、VPC、VSwitch、SG、ECSを作成する。
はじめに
Resource Orchestration Service(以下、ROS)とは中国のクラウドサービスであるAlibaba Cloudを監視するサービスです。
AWSでいうと CloudFormationと同様のサービスです。
一度、テンプレートを作成してしまえば、構築が簡単にできます。
また、リソース単位でを構成管理でき、うっかりしたインスタン立ち上げっぱなし、削除間違いを防げます。
今回はROSでの、ECS+VPC+VSwitch+SGのテンプレート作成方法を説明します。
ROSのコンソールの説明は公式サイトを参考にしてください。
ROSTemplate
--- ROSTemplateFormatVersion: '2015-09-01' Description: " A simple ECS instance includes a security group. You only need to designate an imageID." Parameters: prefix: Type: String AllowedPattern: "[a-zA-Z0-9]*" Description: Resource prefix(Alphabet/Number Only, No Space) Label: prefix InstanceType: Type: String Description: ECS Instance Type #インスタンスタイプ AllowedValues: - ecs.t5-lc1m1.small - ecs.n4.small - ecs.sn1.medium - ecs.sn1ne.large Default: ecs.t5-lc1m1.small Label: ECS Instance Type SourceCidrIp: Type: String AllowedPattern: "(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/32" Description: "Security Group Source ssh, Your Global Address (XXX.XXX.XXX.XXX/32)" Default: # グローバルアドレス Label: SourceCidrIp KeyPairName: Type: String Description: "KeyPairName" Default: # keypairName Label: KeyPairName # ROSでの成果物 Resources: vpc1: Type: ALIYUN::ECS::VPC Description: test_vpc Properties: CidrBlock: 10.0.0.0/8 # VPC IP VpcName: Fn::Join: - "-" - - Ref: prefix - VPC VSwitch1: Type: ALIYUN::ECS::VSwitch Properties: VpcId: Ref: vpc1 VSwitchName: Fn::Join: - "-" - - Ref: prefix - VSwitch Description: test_vswtich ZoneId: ap-northeast-1a # リージョンとゾーン CidrBlock: 10.1.0.0/24 # VSitch IP sg1: Type: ALIYUN::ECS::SecurityGroup Properties: VpcId: Ref: vpc1 SecurityGroupName: Fn::Join: - "-" - - Ref: prefix - sg Description: test_securitygrorup SecurityGroupIngress: # インバウンドの設定 - PortRange: 22/22 # ポートをレンジで設定 Priority: '1' # 優先度 IpProtocol: tcp # プロトコル all/tcp/udp/icmp SourceCidrIp: Ref: SourceCidrIp NicType: intranet SecurityGroupEgress: # アウトバウントの設定 - PortRange: "-1/-1" # allまたはicmpは-1/-1を指定 Priority: '1' IpProtocol: all # プロトコル all/tcp/udp/icmp DestCidrIp: 0.0.0.0/0 NicType: intranet ecs1: Type: ALIYUN::ECS::Instance Properties: InstanceName: Fn::Join: - "-" - - Ref: prefix - ECS HostName: Fn::Join: - "-" - - Ref: prefix - ECS Description: test ec2 PrivateIpAddress: 10.1.0.1 # プライベートアドレス ZoneId: ap-northeast-1a InstanceType: Ref: InstanceType InstanceChargeType: PostPaid # 従量課金 SpotStrategy: NoSpot # 通常の従量課金インスタンス ImageId: centos_7 # OSのイメージを設定 SystemDiskCategory: cloud_ssd # ディスクのタイプ SystemDiskSize: '40' # ディスクサイズ InternetMaxBandwidthIn: '5' # 最大トラフィック InternetChargeType: PayByTraffic # トラフィックで課金 KeyPairName: Ref: KeyPairName VpcId: Ref: vpc1 VSwitchId: Ref: VSwitch1 SecurityGroupId: Ref: sg1 # ROSのOutPuts(出力)に表記する値の設定 Outputs: vpc1_id: Value: Fn::GetAtt: - vpc1 - VpcId Description: test_vpc vswitch1_id: Value: Fn::GetAtt: - VSwitch1 - VSwitchId Description: test_VSwitch sg1_id: Value: Fn::GetAtt: - sg1 - SecurityGroupId Description: test_sg ecs1_id: Value: Fn::GetAtt: - ecs1 - InstanceId Description: test_ecs ecs1_PrivateIp: Value: Fn::GetAtt: - ecs1 - PrivateIp Description: test_ecs ecs1_PublicIp: Value: Fn::GetAtt: - ecs1 - PublicIp Description: test_ecs
上記をAlibaba CloudのROSコンソールより、アップロードすれば、スタックが作成されます。
Parameter
Parameters: prefix: Type: String AllowedPattern: "[a-zA-Z0-9]*" Description: Resource prefix(Alphabet/Number Only, No Space) Label: prefix InstanceType: Type: String Description: ECS Instance Type #インスタンスタイプ AllowedValues: - ecs.t5-lc1m1.small - ecs.n4.small - ecs.sn1.medium - ecs.sn1ne.large Default: ecs.t5-lc1m1.small Label: ECS Instance Type SourceCidrIp: Type: String AllowedPattern: "(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/32" Description: "Security Group Source ssh, Your Global Address (XXX.XXX.XXX.XXX/32)" Default: # グローバルアドレス Label: SourceCidrIp KeyPairName: Type: String Description: "KeyPairName" Default: # keypairName Label: KeyPairName
ROS内で使用するパラメータを設定します。各変数ごとに以下の設定します。
また、テンプレートパラメータの設定時に値を入力することができます。
項目 | 備考 |
---|---|
Type | 型を設定 |
AllowedPattern | テンプレートパラメータの設定時の入力規則 を設定 |
AllowedValues | ここに設定した値のみ、記入できる。テンプレートパラメータの設定時にドロップダウンメニューになる。 |
Default | テンプレートパラメータの設定時のデフォルト値を設定 |
Label | 任意のラベルを設定 |
Description | 説明を入力 |
SourceCidrIpでは入力規則により、グローバルアドレスのみの入力を許可しています。
Resources(VPC)
Resources: vpc1: Type: ALIYUN::ECS::VPC Description: test_vpc Properties: CidrBlock: 10.0.0.0/8 # VPC IP VpcName: Fn::Join: - "-" - - Ref: prefix - VPC
Type でVPCのタイプである。ALIYUN::ECS::VPC
を設定します。
PropertiesでVPCの細かい設定を記入しています。
Fn::Join: - "-" - - Ref: prefix - VPC
VpcNameではVPCの名前を設定しますが関数を使用して、Parametarで設定した変数prefixとVPCを結合させています。
VPC名が<prefixで設定した値>-ECS
になります。
Resources(VSwitch)
VSwitch1: Type: ALIYUN::ECS::VSwitch Properties: VpcId: Ref: vpc1 VSwitchName: Fn::Join: - "-" - - Ref: prefix - VSwitch Description: test_vswtich ZoneId: ap-northeast-1a # リージョンとゾーン CidrBlock: 10.1.0.0/24 # VSitch IP
基本的にVPCと一緒です。ZoneIdでap-northeast-1a
東京リージョンのZoneAをしています。
aを忘れないでください。
Resources(SecurityGroup)
sg1: Type: ALIYUN::ECS::SecurityGroup Properties: VpcId: Ref: vpc1 SecurityGroupName: Fn::Join: - "-" - - Ref: prefix - sg Description: test_securitygrorup SecurityGroupIngress: # インバウンドの設定 - PortRange: 22/22 # ポートをレンジで設定 Priority: '1' # 優先度 IpProtocol: tcp # プロトコル all/tcp/udp/icmp SourceCidrIp: Ref: SourceCidrIp NicType: intranet SecurityGroupEgress: # アウトバウントの設定 - PortRange: "-1/-1" # allまたはicmpは-1/-1を指定 Priority: '1' IpProtocol: all # プロトコル all/tcp/udp/icmp DestCidrIp: 0.0.0.0/0 NicType: intranet
SecurityGroupIngressはインバウンド側の設定です。
PortRange22/22、IpProtocol: tcpでsshをのみ許可しています。
また、SourceCidrIpでグローバルアドレスのみにし、セキュアにしています。
SecurityGroupEgressはアウンバウンド側の設定です。
全て許可しています。
Resources(ECS)
ecs1: Type: ALIYUN::ECS::Instance Properties: InstanceName: Fn::Join: - "-" - - Ref: prefix - ECS HostName: Fn::Join: - "-" - - Ref: prefix - ECS Description: test ec2 PrivateIpAddress: 10.1.0.1 # プライベートアドレス ZoneId: ap-northeast-1a InstanceType: Ref: InstanceType InstanceChargeType: PostPaid # 従量課金 SpotStrategy: NoSpot # 通常の従量課金インスタンス ImageId: centos_7 # OSのイメージを設定 SystemDiskCategory: cloud_ssd # ディスクのタイプ SystemDiskSize: '40' # ディスクサイズ InternetMaxBandwidthIn: '5' # 最大トラフィック InternetChargeType: PayByTraffic # トラフィックで課金 KeyPairName: Ref: KeyPairName VpcId: Ref: vpc1 VSwitchId: Ref: VSwitch1 SecurityGroupId: Ref: sg1
ECSの設置をします。
色々設定項目がありますが、以下の設定は絶対に間違えないでください。
‘InstanceChargeType: PostPaid‘ 従量課金
‘InternetChargeType: PayByTraffic‘ トラフィックで課金
細かい設定は参考文献を元に決定してください。
Outputs
Outputs: vpc1_id: Value: Fn::GetAtt: - vpc1 - VpcId Description: test_vpc vswitch1_id: Value: Fn::GetAtt: - VSwitch1 - VSwitchId Description: test_VSwitch sg1_id: Value: Fn::GetAtt: - sg1 - SecurityGroupId Description: test_sg ecs1_id: Value: Fn::GetAtt: - ecs1 - InstanceId Description: test_ecs ecs1_PrivateIp: Value: Fn::GetAtt: - ecs1 - PrivateIp Description: test_ecs ecs1_PublicIp: Value: Fn::GetAtt: - ecs1 - PublicIp Description: test_ecs
ROSのコンソール画面の出力タブに表示する項目を設定します。
OutPutsは設定しなくても動作しますが、よく使用する項目(IPアドレスとか)を設定しておくことで、構成管理がしやすくなります。
Value: Fn::GetAtt: - ecs1 - PrivateIp
上記は、ECSのIPアドレスを関数により呼び出しています。
ECSとIPがOutPuts画面からわかるので、いちいちECSのコンソール画面に飛ばなくてもよくなります。
さいごに
ROSはCloudFormationと作成方法が似ているので、意外と導入は容易なのではないかと思います。
また、日本語のドキュメントががあるので、そちらを参考に作成するのが良いと感じました。
参考文献
- リソース
https://jp.alibabacloud.com/help/doc-detail/28863.htm - ALIYUN::ECS::VPC
https://jp.alibabacloud.com/help/doc-detail/51194.htm - ALIYUN::ECS::VSwitch
https://jp.alibabacloud.com/help/doc-detail/51192.htm - ALIYUN::ECS::Instance
https://jp.alibabacloud.com/help/doc-detail/51198.htm - ALIYUN ECS SecurityGroup
https://jp.alibabacloud.com/help/doc-detail/51207.htm - 出力(Output)
https://jp.alibabacloud.com/help/doc-detail/28864.htm