Resource Orchestration Service (ROS) のリソースインポートシナリオで、既存のリソースからテンプレートを生成し、バッチデプロイメント用に変更します。
ユースケース
Web アプリケーションをデプロイするには、関連するすべてのリソースに app:web のタグを付けて、リソースインポート時にフィルターできるようにします。テンプレートを生成したら、再利用できるようにパラメーターを追加し、スタックを作成して次のリソースを一括でデプロイします。
-
VPC × 1
-
vSwitch × 1
-
セキュリティグループ × 1
-
ECS インスタンス × 2
-
SLB インスタンス × 1

ステップ 1:リソースの作成とタグの追加
各コンソールで必要なリソースを作成し、タグ app:web (タグキー app、タグ値 web)を追加します。タグとは何ですか?
既存のリソースには、タグを追加するだけです。
-
VPC コンソールで VPC と vSwitch を作成し、それらにタグ
app:webを追加します。説明vSwitch にタグを追加する場合も、VPC と同様の手順です。対象の vSwitch の Tags 列で
アイコンをクリックします。 -
ECS コンソールで VPC 用のセキュリティグループを作成し、[Network] を 手順1 で作成した VPC に設定して、タグ
app:webを追加します。 -
ECS インスタンスを 2 つ作成し、タグ
app:webを追加します。 -
SLB コンソールで SLB インスタンス (この例では Application Load Balancer インスタンス)を作成し、タグ
app:webを追加します。
ステップ 2: リソースインポートシナリオの作成
リソースインポートシナリオを作成し、ステップ 1: リソースの作成とタグの追加で作成したリソースをフィルタリングします。
ROSコンソール にログインします。
左側のナビゲーションペインで、[シナリオ] をクリックします。
-
上部メニューのリージョンのドロップダウンリストから、リソースシナリオのリージョンを選択します。
[シナリオ] ページで、[シナリオの作成] をクリックします。
[シナリオの作成] ダイアログボックスで、[説明] パラメーターを指定し、[シナリオタイプの選択] で [リソース管理] を選択します。
-
リソースの範囲を定義します。
-
選択方法 セクションで、ソースラベル を選択します。
-
ソースラベル セクションで、ラベルキー を
appに、ラベル値 をwebに設定します。
[Description] フィールドに
web-appを入力します。[Generate Scenario] をクリックします。 -
-
リソースシナリオの リソース削除ポリシー を [保持] に設定します。
説明スタックを削除する際に既存のリソースを保持するには、[Retain] を選択します。
[作成] をクリックします。
リソースシナリオが作成されると、[シナリオ] ページの [ステータス] 列に [作成済み] と表示されます。
ステップ 3:テンプレートの生成
[シナリオ] ページで、リソースシナリオの ID をクリックします。
-
リソースシナリオ管理ページで、右上隅のテンプレートの生成をクリックします。
テンプレートは JSON 形式と YAML 形式をサポートしています。次の例では YAML を使用します。
ステップ 4:テンプレートの再利用
生成されたテンプレートでは、「ステップ 1:リソースの作成とタグの追加」 のリソースプロパティ値がハードコーディングされています。テンプレートを再利用可能にするには、アベイラビリティーゾーンやインスタンスタイプなどのハードコーディングされた値をパラメーターに置き換え、出力を追加します。
変更前
ROSTemplateFormatVersion: '2015-09-01' # テンプレート構文のバージョン。
Resources: {} # リソースのリスト。
変更後
ROSTemplateFormatVersion: '2015-09-01' # テンプレート構文のバージョン。
Description: {} # テンプレートのユースケースとアーキテクチャを記述します。
Parameters: {} # ハードコーディングされた値から抽出されたカスタマイズパラメーター。
Resources: {} # リソースのリスト。
Outputs: {} # リソースプロパティなどの情報を返します。コンソールから、または API を呼び出して、出力内容を取得できます。
「テンプレート構文」をご参照ください。
リソースプロパティとパラメーターのマッピング
|
リソース名 |
パラメーター化するプロパティ |
追加する出力 |
|
VPC: ECSVPC_001 |
VPC CIDR ブロック ( |
なし |
|
vSwitch: ECSVSwitch_001 |
アベイラビリティーゾーン ID ( |
なし |
|
vSwitch CIDR ブロック ( |
||
|
セキュリティグループ: ECSSecurityGroup_001 |
なし |
なし |
|
ECS インスタンス: ECSInstance_00X |
アベイラビリティーゾーン ID ( |
ECS インスタンス ID ( |
|
ECS インスタンスタイプ ( |
||
|
ECS システムディスクのカテゴリ ( |
||
|
SLB インスタンス: SLBLoadBalancer_001 |
プライマリアベイラビリティーゾーン ID ( |
SLB インスタンスの IP アドレス ( |
|
バックアップアベイラビリティーゾーン ID ( |
||
|
SLB インスタンス仕様 ( |
テンプレートの変更
再利用可能なテンプレート
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::ZoneId
Description: アベイラビリティーゾーンの ID。
Label: アベイラビリティーゾーン
SlaveZoneId:
Type: String
Description: バックアップアベイラビリティーゾーンの ID。
Label: SLB バックアップゾーン
VpcCidrBlock:
Type: String
Label: VPC IPv4 CIDR ブロック
Description: VPC の IPv4 アドレス範囲。
Default: 172.16.0.0/12
VSwitchCidrBlock:
Type: String
Label: vSwitch CIDR ブロック
Description: VPC のサブネットである必要があります。
Default: 172.16.0.0/24
ECSInstanceType:
Type: String
Description: ECS インスタンスのインスタンスタイプ。
Label: インスタンスタイプ
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ZoneId
SystemDiskCategory:
Type: String
Description: システムディスクのカテゴリ。
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ZoneId
InstanceType: ECSInstanceType
Label: システムディスクのカテゴリ
LoadBalancerSpec:
Type: String
AssociationProperty: ALIYUN::SLB::Instance::InstanceType
Description: SLB インスタンスの仕様。
Label: SLB 仕様
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-ecs001
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-ecs002
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。
Value:
Fn::GetAtt:
- ECSInstance_001
- InstanceId
ECSInstance_002:
Description: 作成された ECS インスタンスのインスタンス ID。
Value:
Fn::GetAtt:
- ECSInstance_002
- InstanceId
SLBListenerIpAddress:
Description: ロードバランサーの IP アドレス。
Value:
Fn::GetAtt:
- SLBLoadBalancer_001
- IpAddress
(オプション) ステップ 5: リソースの一括デプロイ
再利用可能なテンプレートを使用してスタックを作成し、リソースを一括デプロイします。
-
ROS コンソールで、ステップ 4: テンプレートを再利用可能にするで作成した、再利用可能なテンプレートを使用してスタックを作成します。[Configure Template Parameters] ページで、[Availability Zone] (例:中国 (杭州) ゾーン I)、[SLB Backup Zone]、[VPC IPv4 CIDR Block] (例:172.16.0.0/12)、[vSwitch CIDR Block] などのパラメーターを設定します。次に、[Instance Type] として、
ecs.c7.large(2 vCPU と 4 GiB のメモリを搭載した c7 コンピューティング最適化インスタンス) などを選択します。詳細については、「スタックの作成」をご参照ください。
-
「スタックの詳細」ページで、パラメーター タブをクリックすると、デプロイされたリソースの詳細を表示できます。
