はじめに
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