Resource Orchestration Service (ROS) を使用して、リソース管理シナリオ内の既存リソースのコレクションに基づいてテンプレートを生成できます。テンプレートが生成された後、ビジネス要件に基づいてテンプレートを変更し、変更したテンプレートを共通テンプレートとして使用して、一度に複数リソースをデプロイできます。
ユースケース
Web アプリケーションをデプロイするためのリソースを作成する場合、リソースに app:web タグを追加できます。このようにして、リソース管理シナリオを作成するときに、タグで必要なリソースをフィルタリングできます。[テンプレートの作成] をクリックして、リソースシナリオに基づいてテンプレートを生成します。テンプレートが生成された後、テンプレートの柔軟性と再利用性を向上させるために、[パラメーター] セクションをテンプレートに追加できます。その後、変更したテンプレートを共通テンプレートとして使用して、スタックを作成し、一度に複数リソースをデプロイできます。この例では、次のリソースがデプロイされます。
仮想プライベートクラウド (VPC) 1 つ
vSwitch 1 つ
セキュリティグループ 1 つ
Elastic Compute Service (ECS) インスタンス 2 つ
Server Load Balancer (SLB) インスタンス 1 つ
手順 1: リソースを作成し、リソースにタグを追加する
関連コンソールで前述のリソースを作成し、リソースに app:web タグを追加します。タグキーは app で、タグ値は web です。タグの詳細については、「タグとは」をご参照ください。
リソースがすでに存在する場合は、リソースにタグを追加するだけで済みます。
VPC コンソールで、VPC と vSwitch を作成し、
app:webタグを追加します。詳細については、「VPC を作成する」および「インスタンスにタグを追加する」をご参照ください。
説明vSwitch にタグを追加するには、vSwitch を見つけて、
[タグ] 列の アイコンをクリックします。同様の操作を実行して、VPC にタグを追加できます。ECS コンソールで、VPC タイプのセキュリティグループを作成し、
app:webタグをセキュリティグループに追加します。1 で作成した VPC を、セキュリティグループの作成時に [ネットワーク] ドロップダウンリストから選択します。詳細については、「セキュリティグループを作成する」および「セキュリティグループのタグを変更する」をご参照ください。
2 つの ECS インスタンスを作成し、インスタンスに
app:webタグを追加します。1 で作成した VPC と vSwitch を選択します。
2 で作成したセキュリティグループを選択します。
ECS インスタンスの関連パラメーターを設定します。
パラメーターの詳細については、「[カスタム起動] タブでインスタンスを作成する」をご参照ください。
インスタンスに
app:webタグを追加します。詳細については、「タグを作成または追加する」をご参照ください。
SLB コンソールで、SLB インスタンスを作成し、インスタンスに
app:webタグを追加します。この例では、Application Load Balancer (ALB) インスタンスが作成されます。1 で作成した VPC を選択して、ALB インスタンスを作成します。
バックエンドサーバーグループを作成し、3 で作成した ECS インスタンスをグループに追加します。
ビジネス要件に基づいて、リスナーとドメイン名解決を設定します。
ALB インスタンスに
app:webタグを追加します。
詳細については、「ALB インスタンスを使用して IPv4 サービスの負荷を分散する」および「タグを管理する」をご参照ください。
手順 2: リソース管理シナリオを作成する
リソース管理シナリオを作成し、手順 1: リソースを作成し、タグをバインドするで作成したリソースをフィルタリングします。
ROS コンソールにログオンします。
左側のナビゲーションペインで、[シナリオ] をクリックします。
上部のナビゲーションバーで、リージョンドロップダウンリストからリソースシナリオを作成するリージョンを選択します。
[シナリオ] ページで、[シナリオの作成] をクリックします。
[シナリオの作成] ダイアログボックスで、[説明] パラメーターを指定し、[シナリオタイプの選択] として [リソース管理] を選択します。
リソース範囲セクションのパラメーターを構成します。
[メソッド] を [ソースタグ] に設定します。
[ソースタグ] セクションで、[タグキー] を
appに、[タグ値] をwebに設定します。

[リソースの削除] を [いいえ] に設定します。
説明この例では、スタックが削除された場合、スタック内のリソースは保持されます。
[作成] をクリックします。
リソースシナリオが作成されると、[作成済み] が シナリオ ページの [ステータス] 列に表示されます。
手順 3: リソースシナリオに基づいてテンプレートを生成する
[シナリオ] ページで、リソースシナリオの ID をクリックします。
リソースシナリオ管理ページの右上隅にある [テンプレートの作成] をクリックして、テンプレートを生成します。
生成されたテンプレートは JSON 形式と YAML 形式です。この例では、JSON テンプレートを使用します。次のセクションでは、テンプレートの本文と構造について説明します。
手順 4: 生成されたテンプレートを変更する
生成されたテンプレートでは、リソースプロパティ値は、手順 1: リソースを作成し、リソースにタグを追加するの関連コンソールでリソースを作成したときに選択したパラメーターから解析されたリテラル値です。[パラメーター] セクションと [出力] セクションを追加して、生成されたテンプレートを変更できます。このようにして、さまざまなビジネスケースでテンプレートを共通テンプレートとして使用できます。[パラメーター] セクションでは、ゾーンやインスタンスタイプなどの関連プロパティのリテラル値を上書きするパラメーターの値を指定できます。
変更前
ROSTemplateFormatVersion: '2015-09-01' // テンプレートの構文バージョン。
Resources: {} // リソースの詳細。変更後
ROSTemplateFormatVersion: '2015-09-01' // テンプレートの構文バージョン。
Description: {} // テンプレートの説明 (テンプレートのユースケースとアーキテクチャを含む)。
Parameters: {} // 関連リソースプロパティのリテラル値を上書きするために値を指定できるパラメーター。
Resources: {} // リソースの詳細。
Outputs: {} // テンプレートの出力 (リソースプロパティの戻り値など)。出力をクエリするには、GetStack オペレーションを呼び出すか、ROS コンソールの [出力] タブに移動します。パラメーターの詳細については、「テンプレート構文」をご参照ください。
リソース、パラメーター、出力間のマッピング
リソース名 | パラメーター | 出力 |
ECSVPC_001 |
| なし。 |
ECSvSwitch_001 |
| なし。 |
| ||
ECSSecurityGroup_001 | なし。 | なし。 |
ECSInstance_00X |
|
|
| ||
| ||
SLBLoadBalancer_001 |
|
|
| ||
|
手順
共通テンプレートを完成させる
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance:ZoneId
Description: ゾーン ID // the ID of the zone
Label: ゾーン // Zone
SlaveZoneId:
Type: String
Description: セカンダリゾーン ID // the ID of the secondary zone
Label: SLB セカンダリゾーン // SLB Secondary Zone
VpcCidrBlock:
Type: String
Label: VPC IPv4 CIDR ブロック // VPC IPv4 CIDR Block
Description: VPC の CIDR ブロック // the CIDR Block of the VPC
Default: 172.16.0.0/12
VSwitchCidrBlock:
Type: String
Label: VSwitch CIDR ブロック // VSwitch CIDR Block
Description: vSwitch の CIDR ブロックは、VPC の CIDR ブロックに属している必要があります // the CIDR block of the vSwitch must belong to the CIDR block of the VPC
Default: 172.16.0.0/24
ECSInstanceType:
Type: String
Description: ECS インスタンスタイプ // the ECS instance type
Label: ECS インスタンスタイプ // ECS Instance Type
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ZoneId
SystemDiskCategory:
Type: String
Description: システムディスクのカテゴリ // the category of the system disk
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ZoneId
InstanceType: ECSInstanceType
Label: システムディスクカテゴリ // System Disk Category
LoadBalancerSpec:
Type: String
AssociationProperty: ALIYUN::SLB::Instance::InstanceType
Description: インスタンスの仕様 // the specification of the instance
Label: SLB 仕様 // SLB Specification
AssociationPropertyMetadata:
ZoneId: ZoneId
Default: slb.s1.small
Resources:
ECSVPC_001:
Type: ALIYUN::ECS::VPC
Properties:
CidrBlock:
Ref: VpcCidrBlock
VpcName: web-vpc
EnableIpv6: false
Description: web-vpc
Tags:
- Value: web
Key: app
ECSVSwitch_001:
Type: ALIYUN::ECS::VSwitch
Properties:
VSwitchName: web-vsw
VpcId:
Ref: ECSVPC_001
Description: web-vsw
Tags:
- Value: web
Key: app
ZoneId:
Ref: ZoneId
CidrBlock:
Ref: VSwitchCidrBlock
DependsOn:
- ECSVPC_001
ECSSecurityGroup_001:
Type: ALIYUN::ECS::SecurityGroup
Properties:
VpcId:
Ref: ECSVPC_001
Description: web-sg
SecurityGroupName: web-sg
Tags:
- Value: web
Key: app
SecurityGroupIngress:
- PortRange: 80/80
NicType: intranet
Priority: 1
SourceCidrIp: 0.0.0.0/0
Policy: accept
IpProtocol: tcp
- PortRange: 443/443
NicType: intranet
Priority: 1
SourceCidrIp: 0.0.0.0/0
Policy: accept
IpProtocol: tcp
- PortRange: 22/22
NicType: intranet
Priority: 1
SourceCidrIp: 0.0.0.0/0
Policy: accept
IpProtocol: tcp
SecurityGroupType: normal
DependsOn:
- ECSVPC_001
ECSInstance_001:
Type: ALIYUN::ECS::Instance
Properties:
DeletionProtection: true
SystemDiskCategory:
Ref: SystemDiskCategory
VpcId:
Ref: ECSVPC_001
Description: web-ecs
Tags:
- Value: web
Key: app
VSwitchId:
Ref: ECSVSwitch_001
SystemDiskSize: 40
ImageId: centos_7_9_x64_20G_alibase_2022****.vhd
SpotStrategy: NoSpot
AllocatePublicIP: false
InstanceChargeType: PostPaid
IoOptimized: optimized
SecurityGroupIds:
- Ref: ECSSecurityGroup_001
InternetChargeType: PayByTraffic
ZoneId:
Ref: ZoneId
InstanceName: web-ecs002
InstanceType:
Ref: ECSInstanceType
SystemDiskPerformanceLevel: PL0
DependsOn:
- ECSSecurityGroup_001
- ECSVSwitch_001
- ECSVPC_001
ECSInstance_002:
Type: ALIYUN::ECS::Instance
Properties:
DeletionProtection: true
SystemDiskCategory:
Ref: SystemDiskCategory
VpcId:
Ref: ECSVPC_001
Description: web-ecs
Tags:
- Value: web
Key: app
VSwitchId:
Ref: ECSVSwitch_001
SystemDiskSize: 40
ImageId: centos_7_9_x64_20G_alibase_2022****.vhd
SpotStrategy: NoSpot
AllocatePublicIP: false
InstanceChargeType: PostPaid
IoOptimized: optimized
SecurityGroupIds:
- Ref: ECSSecurityGroup_001
InternetChargeType: PayByTraffic
ZoneId:
Ref: ZoneId
InstanceName: web-ecs001
InstanceType:
Ref: ECSInstanceType
SystemDiskPerformanceLevel: PL0
DependsOn:
- ECSSecurityGroup_001
- ECSVSwitch_001
- ECSVPC_001
SLBListener_001:
Type: ALIYUN::SLB::Listener
Properties:
AclStatus: 'off'
Protocol: tcp
Description: tcp_80
HealthCheck:
Interval: 2
HealthyThreshold: 3
Switch: 'on'
UnhealthyThreshold: 3
HealthCheckType: tcp
LoadBalancerId:
Ref: SLBLoadBalancer_001
ListenerPort: 80
Bandwidth: -1
BackendServerPort: 80
Scheduler: tch
StartListener: true
Persistence:
PersistenceTimeout: 0
DependsOn:
- SLBLoadBalancer_001
SLBLoadBalancer_001:
Type: ALIYUN::SLB::LoadBalancer
Properties:
DeletionProtection: false
VpcId:
Ref: ECSVPC_001
AddressIPVersion: ipv4
Tags:
- Value: web
Key: app
SupportPrivateLink: true
PayType: PayOnDemand
AddressType: intranet
VSwitchId:
Ref: ECSVSwitch_001
LoadBalancerName: web-slb
InternetChargeType: paybytraffic
LoadBalancerSpec:
Ref: LoadBalancerSpec
MasterZoneId:
Ref: ZoneId
SlaveZoneId:
Ref: SlaveZoneId
DependsOn:
- ECSVPC_001
- ECSVSwitch_001
SLBBackendServerAttachment_001:
Type: ALIYUN::SLB::BackendServerAttachment
Properties:
BackendServers:
- ServerId:
Ref: ECSInstance_001
Type: ecs
Weight: 100
- ServerId:
Ref: ECSInstance_002
Type: ecs
Weight: 100
LoadBalancerId:
Ref: SLBLoadBalancer_001
DependsOn:
- SLBLoadBalancer_001
- ECSInstance_001
- ECSInstance_002
Outputs:
ECSInstance_001:
Description: 作成された ECS インスタンスのインスタンス ID // TheinstanceIDofcreatedecsinstance
Value:
Fn::GetAtt:
- ECSInstance_001
- InstanceId
ECSInstance_002:
Description: 作成された ECS インスタンスのインスタンス ID // TheinstanceIDofcreatedecsinstance
Value:
Fn::GetAtt:
- ECSInstance_002
- InstanceId
SLBListenerIpAddress:
Description: ロードバランサーの IP アドレス // TheIPaddressoftheloadbalancer.
Value:
Fn::GetAtt:
- SLBLoadBalancer_001
- IpAddressステップ 5: (オプション) 複数リソースの一括デプロイ
共通テンプレートを使用して、スタックを作成し、複数リソースを一度にデプロイできます。
ROSコンソールで、ステップ 4: 生成されたテンプレートの変更 で作成した共通テンプレートを使用して、スタックを作成し、複数リソースを一度にデプロイします。
詳細については、「スタックの作成」をご参照ください。
スタックの詳細ページで、[パラメーター] タブをクリックして、デプロイされたリソースの詳細を表示します。
