Alibaba Cloud Resource Orchestration Service (ROS) を使用して、単一の YAML テンプレートから VPC ネットワーク、ECS インスタンスのグループ、および Auto Scaling (ESS) グループをプロビジョニングします。ECS インスタンスをスケーリンググループに追加することで、ビジネスの負荷に基づいて自動的にスケールアウトまたはスケールインできるようになります。このチュートリアルは、Web アプリケーションやマイクロサービスなど、サーバークラスターの弾力的な管理が必要なシナリオに適しています。
ソリューションの概要
ビジネスシナリオ
Alibaba Cloud Virtual Private Cloud (VPC) 内に ECS インスタンスをバッチ作成し、スケーリンググループに追加します。スケーリングルールを設定すると、スケーリンググループはビジネスの負荷に基づいて ECS インスタンスの数を増減させ、サーバークラスターの弾力的な管理を実現します。
作成されるリソース
No. | リソース名 | ROS リソースタイプ | 目的 |
1 | VPC |
| 分離されたネットワーク環境を提供します。 |
2 |
|
| サブネットの CIDR ブロックを割り当て、VPC 内のゾーンを指定します。 |
3 |
|
| ECS インスタンスのインバウンドおよびアウトバウンドのネットワークアクセスルールを制御します。 |
4 | ECS |
| 初期の ECS インスタンスをバッチ作成します。 |
5 |
|
| 弾力的なスケーリングポリシー (インスタンスの最小数と最大数) を管理します。 |
6 |
|
| スケールアウト時に使用される ECS の仕様テンプレートを定義します。 |
7 |
|
| スケーリンググループを有効にし、既存の ECS インスタンスを追加します。 |
デプロイ後の期待される結果
テンプレートが正常にデプロイされると、以下のものが作成されます:
VPC、VSwitch、セキュリティグループを含む完全な VPC ネットワーク環境。
ECS インスタンスのグループ。(数は
ECSInstanceGroupCountパラメーターで指定され、デフォルトは 3 です。)自動スケールアウト用のスケーリング設定を持つ、有効化されたスケーリンググループ。
すべての ECS インスタンスがスケーリンググループに追加されます。
アーキテクチャ図

前提条件
開始する前に、以下を確認してください:
アカウントと権限:ECS、ESS (Auto Scaling)、VPC のリソースを作成する権限を持つ Alibaba Cloud アカウント。
知識の準備:ROS テンプレートの構文と構造に関する基本的な知識。詳細については、「テンプレートのクイックスタート」をご参照ください。
テンプレート作成チュートリアル
このチュートリアルでは、テンプレートの作成プロセスを 2 つのフェーズで示します:
フェーズ 1 (基本バージョン):固定のパラメーター値を使用し、リソースの定義と依存関係の理解に焦点を当てます。
フェーズ 2 (高度なバージョン):すべての可変構成をパラメーター化し、動的なパラメーターフィルタリングとパラメーターグループ化を追加します。
フェーズ 1:基本テンプレート — リソースとその依存関係の定義
ステップ 1:基本ネットワークリソースの定義 (VPC + VSwitch + セキュリティグループ)
ネットワークリソースは他のすべてのリソースの基盤であり、最初に作成する必要があります。
Resources:
# ============================================================
# 基本ネットワークレイヤー:VPC → VSwitch → SecurityGroup
# ============================================================
Vpc:
Type: ALIYUN::ECS::VPC # VPC を作成
Properties:
CidrBlock: 192.168.0.0/16 # VPC CIDR ブロック。65,534 個のプライベート IP アドレスを提供
VpcName:
Ref: ALIYUN::StackName # 擬似パラメーター:スタック名を VPC 名として使用
VSwitch:
Type: ALIYUN::ECS::VSwitch # VPC 内に VSwitch (サブネット) を作成
Properties:
VSwitchName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc # Ref は Vpc の VpcId を返す (暗黙的な依存関係のため、ROS は最初に Vpc を作成)
ZoneId: cn-beijing-h # このシナリオでは、中国 (北京) リージョンのゾーン H を例として使用
CidrBlock: 192.168.0.0/24 # サブネット CIDR ブロック。VPC CIDR ブロックのサブセットである必要があります
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup # セキュリティグループを作成
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc # セキュリティグループを同じ VPC にバインド
# インバウンドルール:この例では、簡潔にするためにすべてのインバウンドトラフィックを許可します。本番環境では必要に応じてポートを制限してください。
SecurityGroupIngress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
SourceCidrIp: 0.0.0.0/0
NicType: intranetキーポイント:
VpcName、VSwitchName、SecurityGroupNameなどのカスタム設定は、擬似パラメーターで構成できます。これにより、デプロイ後に特定のスタックによってデプロイされたリソースをすばやく見つけることができます。SecurityGroupのアクセスルールは、ビジネス要件に基づいてカスタマイズできます。例:インターネットから Web サービスにアクセスするには、セキュリティグループでインバウンドポート HTTP 80 または 8080 を開きます。
SSH 経由でサーバーにログインするには、セキュリティグループでインバウンドポート 22 を開きます。
ステップ 2:ECS インスタンスグループリソースの定義
ALIYUN::ECS::InstanceGroup は、同じ構成の複数の ECS インスタンスを一度に作成するため、ALIYUN::ECS::Instance を複数回宣言するよりも効率的です。
Resources:
# ============================================================
# コンピュートレイヤー:ECS インスタンスをバッチ作成
# ============================================================
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup # ECS インスタンスをバッチ作成
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
ImageId: centos_7_9_x64_20G_alibase_20220727.vhd # CentOS 7.9 イメージ
AllocatePublicIP: false # パブリック IP アドレスを割り当てない
InstanceType: ecs.c5.large # インスタンスタイプ:2 vCPU、4 GiB
SystemDiskSize: 200 # 200 GiB システムディスク
SystemDiskCategory: cloud_essd # ESSD クラウドディスク
MaxAmount: 3 # 3 つの ECS インスタンスを作成
Password: <YourPassword> # デプロイ時に実際のパスワードに置き換えます (大文字、小文字、数字、特殊文字を含む必要があります)
InstanceName: # インスタンス名:スタック名とシーケンス番号 (例:mystack-0001)
Fn::Sub:
- ${StackName}-[1,4]
- StackName:
Ref: ALIYUN::StackNameキーポイント:
ALIYUN::ECS::InstanceGroupはMaxAmountプロパティを使用して、作成する ECS インスタンスの数を指定します。Fn::Sub関数は文字列を連結します。[1,4]は ROS 固有のシーケンス番号プレースホルダーです。これは、0001 や 0002 のように 1 からインクリメントする 4 桁の数値を示します。このリソースの出力属性
InstanceIdsは ECS インスタンス ID のリストであり、スケーリンググループから参照できます。
ステップ 3:スケーリンググループリソースの定義 (スケーリンググループ+スケーリング設定+スケーリング設定の有効化)
スケーリンググループは、ScalingGroup (スケーリングポリシーを定義)、ScalingConfiguration (スケールアウト時に使用する ECS テンプレートを定義)、ScalingGroupEnable (スケーリンググループを有効にし、既存のインスタンスを追加) の 3 つのリソースを通じて機能します。
Resources:
# ============================================================
# Auto Scaling レイヤー:スケーリンググループ + スケーリング設定 + スケーリンググループの有効化
# ============================================================
EssInstanceScalingGroup:
Type: ALIYUN::ESS::ScalingGroup # スケーリンググループを作成
Properties:
ScalingGroupName:
Ref: ALIYUN::StackName
RemovalPolicys:
- NewestInstance # スケールインポリシー:最後に作成されたインスタンスから削除
MinSize: 3 # スケーリンググループは少なくとも 3 つのインスタンスを維持
MaxSize: 50 # スケーリンググループは最大 50 インスタンスまでスケールアウト可能
VSwitchId:
Ref: VSwitch # スケーリンググループを VSwitch にバインド (スケールアウト時に追加されるインスタンスのネットワークロケーションを決定)
DefaultCooldown: 300 # 300 秒のクールダウン期間で頻繁なスケーリングを防止
EssInstanceScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration # スケーリング設定 (スケールアウト時に使用される ECS テンプレート)
Properties:
SecurityGroupId:
Ref: EcsSecurityGroup
ScalingGroupId:
Ref: EssInstanceScalingGroup # 上で定義したスケーリンググループに関連付け
ScalingConfigurationName:
Fn::Sub: sc-${ALIYUN::StackName} # Fn::Sub は擬似パラメーター変数を直接置換
InstanceType: ecs.c5.large # スケールアウト時に作成される ECS インスタンスタイプ (初期の ECS インスタンスと一致させる必要があります)
SystemDiskCategory: cloud_essd
SystemDiskSize: 200
ImageId: centos_7_9_x64_20G_alibase_20220727.vhd # スケールアウト時に使用されるイメージ (初期の ECS インスタンスと一致させる必要があります)
EssInstanceScalingGroupEnable:
Type: ALIYUN::ESS::ScalingGroupEnable # スケーリンググループを有効化
Properties:
ScalingRuleArisExecuteVersion: '1'
ScalingConfigurationId:
Ref: EssInstanceScalingConfiguration # 有効にするスケーリング設定を指定
InstanceIds:
# ステップ 2 で作成した ECS インスタンスをスケーリンググループに追加
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds # InstanceGroup のすべてのインスタンス ID のリストを取得
ScalingGroupId:
Ref: EssInstanceScalingGroupキーポイント:
スケーリンググループの
MinSizeを、グループが有効化された直後にスケールインがトリガーされるのを防ぐために、ECSInstanceGroupCount(最初に作成されたインスタンスの数) と同じ値に設定します。スケーリングルール (ALIYUN::ESS::ScalingRule) とアラームタスク (ALIYUN::ESS::AlarmTask) をスケーリンググループに追加して、CPU 使用率やメモリ使用量などのメトリックに基づいて自動スケーリングを実装できます。
RefとFn::GetAttの違い:Refは、VPC のVpcIdなど、リソースのプライマリ識別子を返します。Fn::GetAttは、EcsInstanceGroupのInstanceIdsなど、リソースの関連属性を返します。
基本バージョン — 完全なテンプレート
以下は、上記の 3 つのステップを組み合わせた、すぐに使用できる完全なテンプレートです:
ROSTemplateFormatVersion: '2015-09-01'
Description: VPC ネットワーク環境を作成し、ECS インスタンスをバッチデプロイしてスケーリンググループに追加し、弾力的なスケールアウト・スケールイン管理を実現します。
Resources:
# === 基本ネットワークレイヤー ===
Vpc:
Type: ALIYUN::ECS::VPC
Properties:
CidrBlock: 192.168.0.0/16
VpcName:
Ref: ALIYUN::StackName
VSwitch:
Type: ALIYUN::ECS::VSwitch
Properties:
VSwitchName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
ZoneId: cn-beijing-h
CidrBlock: 192.168.0.0/24
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
SecurityGroupIngress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
SourceCidrIp: 0.0.0.0/0
NicType: intranet
# === コンピュートレイヤー ===
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: EcsSecurityGroup
VSwitchId:
Ref: VSwitch
ImageId: centos_7_9_x64_20G_alibase_20220727.vhd
AllocatePublicIP: false
InstanceType: ecs.c5.large
SystemDiskSize: 200
SystemDiskCategory: cloud_essd
MaxAmount: 3
Password: <YourPassword>
InstanceName:
Fn::Sub:
- ${StackName}-[1,4]
- StackName:
Ref: ALIYUN::StackName
# === ESS レイヤー ===
EssInstanceScalingGroup:
Type: ALIYUN::ESS::ScalingGroup
Properties:
ScalingGroupName:
Ref: ALIYUN::StackName
RemovalPolicys:
- NewestInstance
MinSize: 3
MaxSize: 50
VSwitchId:
Ref: VSwitch
DefaultCooldown: 300
EssInstanceScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration
Properties:
SecurityGroupId:
Ref: EcsSecurityGroup
ScalingGroupId:
Ref: EssInstanceScalingGroup
ScalingConfigurationName:
Fn::Sub: sc-${ALIYUN::StackName}
InstanceType: ecs.c5.large
SystemDiskCategory: cloud_essd
SystemDiskSize: 200
ImageId: centos_7_9_x64_20G_alibase_20220727.vhd
EssInstanceScalingGroupEnable:
Type: ALIYUN::ESS::ScalingGroupEnable
Properties:
ScalingRuleArisExecuteVersion: '1'
ScalingConfigurationId:
Ref: EssInstanceScalingConfiguration
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
ScalingGroupId:
Ref: EssInstanceScalingGroup
Outputs:
ECSInstanceIds:
Label: ECS インスタンス ID リスト
Value:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIdsキーポイント:
テンプレートがリソースを作成した後、ECS インスタンス ID のリストなど、それらのリソースの内部属性をテンプレートの Outputs から直接クエリできます。
フェーズ 2:高度なテンプレート — パラメーター化と動的構成
基本テンプレートでは、ECS インスタンスの InstanceType、SystemDiskCategory、ImageId や、スケーリンググループの MaxSize などのプロパティは固定値を使用しています。テンプレートを別のリージョンや異なる仕様で再利用するには、テンプレートを繰り返し変更する必要があります。さらに、テンプレート内のパラメーターはしばしば相互に依存します。たとえば、ECS インスタンスタイプはゾーンによって制限され (ゾーンごとにインスタンスタイプの在庫が異なる)、システムディスクカテゴリはゾーンとインスタンスタイプの両方によって制限されます。これらのパラメーターを手動で指定すると、利用できない組み合わせを簡単に選択してしまい、デプロイが失敗する原因となります。
以下の最適化により、テンプレートの柔軟性と再利用性が大幅に向上します:
パラメーター化 (Parameters):可変構成をパラメーターとして抽出し、デプロイ時に動的に指定します。
動的パラメーターフィルタリング (AssociationProperty):ROS コンソールが、すでに選択されているパラメーターに基づいて利用可能なオプションを自動的にフィルタリングするようにします。
パラメーターグループ化 (Metadata):コンソールでパラメーターを論理的なグループに表示し、入力エクスペリエンスを向上させます。
パラメーター依存関係図
次の例では、ECS インスタンスタイプとシステムディスクカテゴリを使用して、パラメーター間の依存関係チェーンを示します:
VSwitchZoneId (ゾーン) ← 基本パラメーター、前提条件なし
├──→ ECSInstanceType (ECS インスタンスタイプ)
│ 依存:ZoneId
│
└──→ ECSDiskCategory (システムディスクカテゴリ)
依存:ZoneId + InstanceTypeコアロジック:最初にゾーンを選択し、次にそのゾーンで利用可能な ECS インスタンスタイプをフィルタリングし、最後に選択したゾーンとインスタンスタイプでサポートされているディスクカテゴリをフィルタリングします。各ステップでは、現在の条件下で有効なオプションのみが表示され、無効な組み合わせを防ぎます。
AssociationProperty の説明
1. VSwitchZoneId — ゾーン (基本パラメーター)
AssociationProperty を ALIYUN::ECS::ZoneId に設定して、現在のリージョンのすべてのゾーンをリストします。例:
VSwitchZoneId:
Type: String
Label:
zh-cn: 交换机可用区
en: VSwitch 可用性ゾーン
Description:
zh-cn: 选择交换机所在的可用区,ECS和伸缩组将部署在此可用区
en: VSwitch の可用性ゾーンを選択します。ECS とスケーリンググループはここにデプロイされます
AssociationProperty: ALIYUN::ECS::ZoneIdこのパラメーターは、後続のすべてのパラメーターのフィルタリングの基礎となります。ゾーンを選択すると、他のパラメーターのオプションリストがそれに応じて更新されます。
2. ECSInstanceType — ECS インスタンスタイプ
AssociationProperty を ALIYUN::ECS::Instance::InstanceType に設定して、利用可能な ECS インスタンスタイプをリストし、${VSwitchZoneId} を関連付けて、選択したゾーンで利用可能なインスタンスタイプをフィルタリングします。例:
ECSInstanceType:
Type: String
Label:
zh-cn: ECS インスタンスタイプ
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}インスタンスタイプの在庫はゾーンによって異なります。フィルタリングしないと、ゾーンで在庫切れのタイプを選択してしまい、作成が失敗する可能性があります。
3. ECSDiskCategory — システムディスクカテゴリ
AssociationProperty を ALIYUN::ECS::Disk::SystemDiskCategory に設定して、利用可能なシステムディスクカテゴリをリストし、${VSwitchZoneId} と ${ECSInstanceType} を関連付けて、選択したゾーンと ECS インスタンスタイプでサポートされているシステムディスクカテゴリをフィルタリングします。例:
ECSDiskCategory:
Type: String
Label:
zh-cn: 系统盘类型
en: システムディスクカテゴリ
Description:
zh-cn: 选择系统盘类型。可选值:cloud_essd(ESSD云盘)、cloud_ssd(SSD云盘)、cloud_efficiency(高效云盘)
en: "システムディスクタイプ。オプション:cloud_essd、cloud_ssd、cloud_efficiency"
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
InstanceType: ${ECSInstanceType}システムディスクカテゴリの可用性は、ゾーン (一部のゾーンは ESSD をサポートしない) とインスタンスタイプ (一部のタイプは特定のディスクカテゴリのみをサポート) の両方に依存します。
動的パラメーターフィルタリングの例
次の例は、AssociationProperty を構成して ECS インスタンスタイプとディスクカテゴリを動的に取得する効果を示しています:
Parameters:
VSwitchZoneId:
Type: String
Label:
zh-cn: 交换机可用区
en: VSwitch 可用性ゾーン
Description:
zh-cn: 选择交换机所在的可用区,ECS和伸缩组将部署在此可用区
en: VSwitch の可用性ゾーンを選択します。ECS とスケーリンググループはここにデプロイされます
AssociationProperty: ALIYUN::ECS::ZoneId
ECSInstanceType:
Type: String
Label:
zh-cn: ECS实例规格
en: ECS インスタンスタイプ
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
ECSDiskCategory:
Type: String
Label:
zh-cn: 系统盘类型
en: システムディスクカテゴリ
Description:
zh-cn: 选择系统盘类型。可选值:cloud_essd(ESSD云盘)、cloud_ssd(SSD云盘)、cloud_efficiency(高效云盘)
en: "システムディスクタイプ。オプション:cloud_essd、cloud_ssd、cloud_efficiency"
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
InstanceType: ${ECSInstanceType}AssociationProperty の仕組み
ROS コンソールでスタックを作成すると、パラメーターの選択がカスケードでトリガーされます:
ゾーン (
VSwitchZoneId) を選択します。ECS インスタンスタイプのドロップダウンリストが自動的に更新され、そのゾーンで在庫のあるインスタンスタイプのみが表示されます。
ECS インスタンスタイプを選択すると、システムディスクカテゴリのドロップダウンリストが自動的に更新され、そのゾーンとそのインスタンスタイプの両方でサポートされているディスクカテゴリのみが表示されます。
このようにして、各ステップでは現在の条件下で利用可能なオプションのみが表示され、無効なパラメーターの組み合わせによるデプロイの失敗を防ぎます。
メタデータパラメーターグループ
Metadata で ALIYUN::ROS::Interface を構成することで、パラメーターを論理的なグループに分割し、それぞれに見出しを付けることができます。コンソールではパラメーターがグループごとに表示され、入力エクスペリエンスが大幅に向上します。
メタデータ構文構造
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups: # パラメーターグループのリスト (必須)
- Parameters: # グループ内のパラメーター名のリスト (必須)
- Parameter1
- Parameter2
Label: # グループの見出し (必須)
default:
zh-cn: 中文标题
en: English Titleメタデータ構文ルール:
ParameterGroups、Parameters、Labelはすべて必須です。Parametersにリストされているパラメーター名は、テンプレートのParametersセクションで定義されているパラメーター名と完全に一致する必要があります。どのグループにも属さないパラメーターは、コンソールのグループ化されていないエリアに表示されます。
パラメーターグループの設計
このテンプレートでは、9 つのパラメーターをリソースタイプごとに 3 つのグループに分割します:
┌────────────────────────────────────────────────────┐
│ ネットワーク構成 │
│ ├── VSwitch ゾーン (VSwitchZoneId) │
│ ├── VPC CIDR ブロック (VpcCidrBlock) │
│ └── VSwitch CIDR ブロック (VSwitchCidrBlock) │
├────────────────────────────────────────────────────┤
│ ECS インスタンス構成 │
│ ├── ECS インスタンスタイプ (ECSInstanceType) │
│ ├── ECS イメージ ID (ECSImageId) │
│ ├── システムディスクカテゴリ (ECSDiskCategory) │
│ ├── ECS インスタンスパスワード (EcsInstancePassword) │
│ └── ECS インスタンス数 (ECSInstanceGroupCount) │
├────────────────────────────────────────────────────┤
│ ESS スケーリンググループ構成 │
│ └── 最大インスタンス数 (ESSGroupMaxSize) │
└────────────────────────────────────────────────────┘メタデータグループ化の例
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- VSwitchZoneId
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
zh-cn: 基础网络配置
en: ネットワーク構成
- Parameters:
- ECSInstanceType
- ECSDiskCategory
- ECSImageId
- EcsInstancePassword
- ECSInstanceGroupCount
Label:
default:
zh-cn: ECS实例配置
en: ECS インスタンス構成
- Parameters:
- ESSGroupMaxSize
Label:
default:
zh-cn: ESS伸缩组配置
en: スケーリンググループ構成高度なバージョン — 完全なテンプレート
ROSTemplateFormatVersion: '2015-09-01'
Description: >-
パラメーター化されたテンプレート:ECS インスタンスグループをバッチ作成し、ESS スケーリンググループで管理します。自動スケールアウト・スケールインをサポートします。
可用性ゾーン、インスタンスタイプ、ディスクカテゴリ、イメージの動的選択をサポートし、複数リージョンでの再利用に適しています。
Parameters:
# ─── 基本ネットワークパラメーター ───
VSwitchZoneId:
Type: String
Label:
zh-cn: 交换机可用区
en: VSwitch 可用性ゾーン
Description:
zh-cn: 选择交换机所在的可用区,ECS和伸缩组将部署在此可用区
en: VSwitch の可用性ゾーンを選択します。ECS とスケーリンググループはここにデプロイされます
AssociationProperty: ALIYUN::ECS::ZoneId
VpcCidrBlock:
Type: String
Label:
zh-cn: VPC网段
en: VPC CIDR ブロック
Description:
zh-cn: VPC的IP地址段范围。推荐使用 10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16
en: VPC の IP アドレス範囲。10.0.0.0/8、172.16.0.0/12、または 192.168.0.0/16 を推奨します
Default: 192.168.0.0/16
VSwitchCidrBlock:
Type: String
Label:
zh-cn: 交换机网段
en: VSwitch CIDR ブロック
Description:
zh-cn: 必须是VPC网段的子网段,且不能与同VPC下其他交换机网段重叠
en: VPC CIDR のサブネットである必要があり、他の VSwitch と重複してはなりません
Default: 192.168.0.0/24
# ─── ECS インスタンスパラメーター ───
ECSInstanceType:
Type: String
Label:
zh-cn: ECS实例规格
en: ECS インスタンスタイプ
Description:
zh-cn: 选择ECS实例规格。列表已根据可用区自动过滤可用规格。
en: ECS インスタンスタイプを選択します。リストは選択された可用性ゾーンによってフィルタリングされます。
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
ECSDiskCategory:
Type: String
Label:
zh-cn: 系统盘类型
en: システムディスクカテゴリ
Description:
zh-cn: 选择系统盘类型。可选值:cloud_essd(ESSD云盘)、cloud_ssd(SSD云盘)、cloud_efficiency(高效云盘)
en: "システムディスクタイプ。オプション:cloud_essd、cloud_ssd、cloud_efficiency"
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
InstanceType: ${ECSInstanceType}
ECSImageId:
Type: String
Label:
zh-cn: ECS镜像ID
en: イメージ ID
Description:
zh-cn: 选择ECS实例使用的操作系统镜像
en: ECS インスタンス用の OS イメージを選択します
AssociationProperty: ALIYUN::ECS::Image::ImageId
ECSInstanceGroupCount:
Type: Number
Label:
zh-cn: ECS初始实例数量
en: 初期インスタンス数
Description:
zh-cn: 初始创建的ECS实例数量,这些实例将加入伸缩组管理
en: 初期に作成する ECS インスタンスの数。これらはスケーリンググループに追加されます
Default: 3
EcsInstancePassword:
Type: String
NoEcho: true
Label:
zh-cn: ECS实例密码
en: ECS インスタンスパスワード
Description:
zh-cn: 长度8-30位,需包含大写字母、小写字母、数字、特殊字符中的至少三种
en: 長さ 8~30 文字で、大文字、小文字、数字、特殊文字のうち少なくとも 3 種類を含む必要があります
MinLength: 8
MaxLength: 30
AssociationProperty: ALIYUN::ECS::Instance::Password
# ─── スケーリンググループパラメーター ───
ESSGroupMaxSize:
Type: Number
Label:
zh-cn: 伸缩组最大实例数
en: スケーリンググループの最大サイズ
Description:
zh-cn: 伸缩组内ECS实例的最大数量,达到此上限后不再自动扩容
en: スケーリンググループ内の ECS インスタンスの最大数
Default: 50
Resources:
# === 基本ネットワークレイヤー ===
Vpc:
Type: ALIYUN::ECS::VPC
Properties:
CidrBlock:
Ref: VpcCidrBlock
VpcName:
Ref: ALIYUN::StackName
VSwitch:
Type: ALIYUN::ECS::VSwitch
Properties:
VSwitchName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
ZoneId:
Ref: VSwitchZoneId
CidrBlock:
Ref: VSwitchCidrBlock
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
SecurityGroupIngress:
- PortRange: 8080/8080
Priority: 1
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
NicType: internet
SecurityGroupEgress:
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: internet
- PortRange: '-1/-1'
Priority: 1
IpProtocol: all
DestCidrIp: 0.0.0.0/0
NicType: intranet
# === コンピュートレイヤー ===
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
InstanceName:
Fn::Sub:
- ${StackName}-[1,4]
- StackName:
Ref: ALIYUN::StackName
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
SecurityGroupId:
Ref: EcsSecurityGroup
SystemDiskCategory:
Ref: ECSDiskCategory
SystemDiskSize: 200
MaxAmount:
Ref: ECSInstanceGroupCount
ImageId:
Ref: ECSImageId
InstanceType:
Ref: ECSInstanceType
Password:
Ref: EcsInstancePassword
AllocatePublicIP: false
# === ESS レイヤー ===
EssInstanceScalingGroup:
Type: ALIYUN::ESS::ScalingGroup
Properties:
ScalingGroupName:
Ref: ALIYUN::StackName
RemovalPolicys:
- NewestInstance
MinSize:
Ref: ECSInstanceGroupCount
MaxSize:
Ref: ESSGroupMaxSize
VSwitchId:
Ref: VSwitch
DefaultCooldown: 300
EssInstanceScalingConfiguration:
Type: ALIYUN::ESS::ScalingConfiguration
Properties:
SecurityGroupId:
Ref: EcsSecurityGroup
ScalingGroupId:
Ref: EssInstanceScalingGroup
ScalingConfigurationName:
Fn::Sub: sc-${ALIYUN::StackName}
InstanceType:
Ref: ECSInstanceType
SystemDiskCategory:
Ref: ECSDiskCategory
SystemDiskSize: 200
ImageId:
Ref: ECSImageId
InstanceName:
Fn::Sub:
- ${StackName}-[index,1,4]
- StackName:
Ref: ALIYUN::StackName
EssInstanceScalingGroupEnable:
Type: ALIYUN::ESS::ScalingGroupEnable
Properties:
ScalingRuleArisExecuteVersion: '1'
ScalingConfigurationId:
Ref: EssInstanceScalingConfiguration
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
ScalingGroupId:
Ref: EssInstanceScalingGroup
Outputs:
ECSInstanceIds:
Label: ECS インスタンス ID リスト
Value:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
# === メタデータ ===
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- VSwitchZoneId
- VpcCidrBlock
- VSwitchCidrBlock
Label:
default:
zh-cn: 基础网络配置
en: ネットワーク構成
- Parameters:
- ECSInstanceType
- ECSDiskCategory
- ECSImageId
- EcsInstancePassword
- ECSInstanceGroupCount
Label:
default:
zh-cn: ECS实例配置
en: ECS インスタンス構成
- Parameters:
- ESSGroupMaxSize
Label:
default:
zh-cn: 伸缩组配置
en: スケーリンググループ構成このテンプレートで使用される ROS ビルトイン関数のクイックリファレンス
関数 | 構文例 | このテンプレートでの使用法 | 説明 |
|
| パラメーター値またはリソースのプライマリ識別子を参照します。 | パラメーターを参照するとその値が返され、リソースを参照するとそのプライマリ識別子が返されます。 |
|
| ECS インスタンスグループのインスタンス ID リストを取得します。 | 作成後のリソースの出力属性 (プライマリ識別子ではない) を取得します。 |
|
| スケーリング設定名を連結します。 | テンプレート文字列で |
デプロイ
デプロイパラメーター
必須パラメーター (デプロイ時に指定する必要があります)
パラメーター | 説明 | 制約 |
| ゾーン ID。 | コンソールで動的に選択されます。 |
| ECS インスタンスタイプ。 | 利用可能なインスタンスタイプはゾーンに基づいて自動的にフィルタリングされます。 |
| ECS システムディスクカテゴリ。 | ゾーンとインスタンスタイプに基づいて自動的にフィルタリングされます。 |
| ECS イメージ ID。 | コンソールで動的に選択されます。 |
オプションパラメーター (デフォルト値があり、空のままにできます)
パラメーター | デフォルト値 | 説明 |
| 192.168.0.0/16 | VPC の CIDR ブロック。 |
| 192.168.0.0/24 | VSwitch サブネットの CIDR ブロック。 |
| 3 | 初期に作成される ECS インスタンスの数。 |
| 50 | ESS スケーリンググループ内のインスタンスの最大数。 |
| なし | ECS インスタンスのログインパスワード。長さは 8~30 文字で、大文字、小文字、数字、特殊文字のうち少なくとも 3 種類を含む必要があります。 |
デプロイ方法
方法 1:ROS コンソール経由でのデプロイ
ROS コンソールにログインします。
左側のナビゲーションウィンドウで、[スタック] > [スタックの作成] を選択します。
[既存のテンプレートを選択] > [テンプレートコンテンツの入力] を選択し、完全なテンプレートをエディターに貼り付けます。
[次へ] をクリックし、グループごとにパラメーターを構成します。
構成を確認した後、[作成] をクリックし、スタックのステータスが
CREATE_COMPLETEに変わるのを待ちます。
方法 2:ROS IaC Code 経由でのデプロイ
IaC Code は、クラウドインフラストラクチャ向けの AI Infrastructure-as-Code アシスタントです。クラウドリソースのユーザーや O&M エンジニアが、ターミナルワークフローを通じてインフラストラクチャテンプレートを生成、デプロイ、管理するのに役立ちます。
# プロンプト
ECS インスタンスのグループをデプロイし、Auto Scaling グループで管理します。要件:
1. 新規作成した VPC と VSwitch を使用します。
2. 初期に 3 つの ECS インスタンスを作成し、スケーリンググループに追加します。
3. スケーリンググループの最大インスタンス数を 50、最小数を 3 に設定します。
4. スケールインポリシーを、最新のインスタンスを最初に削除するように設定します。
5. セキュリティグループでインバウンドポート 8080 を開きます。
6. VSwitchZoneId、ECSInstanceType、ECSDiskCategory、ECSImageId を AssociationProperty で構成し、コンソールで動的にフィルタリングされるようにします。よくある質問
Q1:デプロイが「指定された InstanceType はゾーンで利用できません」で失敗する
原因:選択された ECS インスタンスタイプが指定されたゾーンで在庫切れです。
解決策:
高度なテンプレートでは、
AssociationPropertyが利用可能なインスタンスタイプを自動的にフィルタリングするため、この問題は回避されます。基本テンプレートを使用する場合は、Elastic Compute Service (ECS) 料金 にアクセスして対象ゾーンのインスタンスタイプの在庫を確認するか、別のゾーンを選択してください。
Q2:スケーリンググループが有効化直後にスケールインをトリガーする
原因:MinSize の値が実際にグループに参加したインスタンスの数より大きいか、インスタンスの参加に失敗しました。
解決策:
ECSInstanceGroupCountの値がスケーリンググループのMinSize以上であることを確認してください。ECS インスタンスが実行中状態であることを確認してください。
インスタンスとスケーリンググループが同じ VPC または VSwitch 内にあることを確認してください。
Q3:スケールアウト中に新規作成された ECS インスタンスの構成が予期しないものになる
原因:ScalingConfiguration の InstanceType や ImageId などの構成が、初期の ECS インスタンスの構成と一致していません。
解決策:
高度なテンプレートでは、
ScalingConfigurationのInstanceTypeやImageIdなどのパラメーターは、すでにEcsInstanceGroupと同じパラメーターを参照しているため、スケールアウト構成の一貫性が保たれます。異なる構成でスケールアウトする必要がある場合は、複数の
ScalingConfigurationリソースを作成し、重みによってその比率を制御します。
Q4:CPU 使用率に基づいて自動スケーリングを実装するにはどうすればよいですか?
解決策:スケーリングルールとアラームタスクをテンプレートに追加します:
# スケールアウトルール:毎回 2 つのインスタンスを追加
ScaleOutRule:
Type: ALIYUN::ESS::ScalingRule
Properties:
ScalingGroupId:
Ref: EssInstanceScalingGroup
ScalingRuleName: scale-out-2
ScalingRuleType: SimpleScalingRule
AdjustmentType: QuantityChangeInCapacity # 数量で調整
AdjustmentValue: 2 # 毎回 2 つのインスタンスを追加
# アラームトリガー:CPU 使用率が 80% を超えるとスケールアウトをトリガー
CpuAlarm:
Type: ALIYUN::ESS::AlarmTask
Properties:
AlarmTaskName: cpu-high-alarm
ScalingGroupId:
Ref: EssInstanceScalingGroup
MetricName: CpuUtilization
Threshold: 80
ComparisonOperator: '>='
EvaluationCount: 3 # 3 回連続でサンプルがしきい値を超えた場合にのみトリガー
AlarmActions:
- Fn::GetAtt:
- ScaleOutRule
- ScalingRuleAriQ5:新規作成ではなく、既存の VPC を使用するにはどうすればよいですか?
解決策:Resources から VPC と VSwitch を削除し、Parameters を通じて渡します:
Parameters:
ExistingVpcId:
Type: String
Label:
en: 既存の VPC ID
AssociationProperty: ALIYUN::ECS::VPC::VPCId
ExistingVSwitchId:
Type: String
Label:
en: 既存の VSwitch ID
AssociationProperty: ALIYUN::VPC::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${ExistingVpcId}Q6:トラフィック分散のために SLB をスケーリンググループにアタッチするにはどうすればよいですか?
解決策:ScalingGroup の Properties に LoadBalancerIds を追加します:
EssInstanceScalingGroup:
Type: ALIYUN::ESS::ScalingGroup
Properties:
ScalingGroupName:
Ref: ALIYUN::StackName
RemovalPolicys:
- NewestInstance
MinSize:
Ref: ECSInstanceGroupCount
MaxSize:
Ref: ESSGroupMaxSize
VSwitchId:
Ref: VSwitch
DefaultCooldown: 300
LoadBalancerIds:
- Ref: MyLoadBalancer # 既存の SLB インスタンスを参照スケーリンググループがインスタンスを追加または削除すると、インスタンスは自動的に SLB バックエンドサーバーグループに追加または削除されます。
リソースのデプロイに関するその他の質問については、「よくある質問集」をご参照ください。