すべてのプロダクト
Search
ドキュメントセンター

Resource Orchestration Service:スケーリンググループを使用した複数の ECS インスタンスの管理

最終更新日:Jun 19, 2026

本書では、Resource Orchestration Service (ROS) テンプレートを編集して、スケーリンググループを使用して複数の Elastic Compute Service (ECS) インスタンスを管理する方法について、簡単な設定からより複雑な設定へと段階的に説明します。

前提条件

ROSテンプレートの構文と構造に精通しています。 詳細については、「テンプレートの使用開始方法」をご参照ください。

シナリオ例

Alibaba Cloud の virtual private cloud (VPC) にスケーリングルールを持つスケーリンググループを作成し、そのグループに ECS インスタンスを追加し、設定されたルールに基づいてインスタンスをスケールアウトまたはスケールインします。2023-03-29_10-36-10

注意事項

上記のリソースのリソースタイプを表示して、各リソースプロパティの詳細を取得できます。 詳細については、「リソースタイプの表示」をご参照ください。

リソースタイプは、タイプ、必要かどうか、編集可能かどうかなど、リソースのプロパティを宣言します。 プロパティが必要な場合は、テンプレートの [リソース] セクションの [プロパティ] 部分でプロパティを宣言する必要があります。 プロパティがオプションの場合は、プロパティを空のままにすることができます。 プロパティが編集可能な場合は、スタックテンプレートのクラウドリソースにプロパティを指定した後で、新しいテンプレートのプロパティを変更できます。 次に、新しいテンプレートを使用してスタックとリソースを更新できます。 それ以外の場合は、プロパティを変更できません。

テンプレートの編集

リソースタイプのドキュメントを参照して、ニーズに最適なリソースタイプを見つけることができます。 詳細については、「サービス別のリソースタイプのリスト」をご参照ください。

このシナリオでは、VPC (ALIYUN::ECS::VPC)、ECS インスタンス (ALIYUN::ECS::Instance)、およびスケーリンググループ (ALIYUN::ESS::ScalingGroup) を作成する必要があります。 また、ECS インスタンス用の vSwitch (ALIYUN::ECS::VSwitch) とセキュリティグループ (ALIYUN::ECS::SecurityGroup)、スケーリンググループ用のスケーリング設定 (ALIYUN::ESS::ScalingConfiguration)、およびスケーリンググループを有効化するリソース (ALIYUN::ESS::ScalingGroupEnable) も必要です。

テンプレートリソースとその依存関係の定義

基本的なネットワークリソースの定義

テンプレートで基本的なネットワークリソースである VpcvSwitchEcsSecurityGroup を定義します。

  • Ref 組み込み関数と ALIYUN::StackName 疑似パラメーターを使用してスタック名を取得し、VpcVpcNamevSwitchVSwitchName などのリソースプロパティの値として使用します。 詳細については、「Ref」および「ALIYUN::StackName」をご参照ください。

  • Fn::Select および Fn::GetAZs 組み込み関数を ALIYUN::Region 疑似パラメーターと共に使用して、スタックが作成されるリージョン内の最初のゾーンの ID を取得します (例:vSwitchZoneId プロパティ)。 詳細については、「関数」および「ALIYUN::Region」をご参照ください。

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:
        Fn::Select:
          - '0'
          - Fn::GetAZs:
              Ref: ALIYUN::Region
      CidrBlock: 192.168.0.0/24
  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      SecurityGroupEgress:
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          DestCidrIp: 0.0.0.0/0
          NicType: intranet

ECS リソースの定義

テンプレートで ECS リソース EcsInstance を定義します。

Ref 組み込み関数を使用して、テンプレート内の他のリソースの論理名 (例:Vpc リソースの VpcIdEcsSecurityGroup リソースの SecurityGroupIdvSwitch リソースの VSwitchId) を参照します。 詳細については、「Ref」をご参照ください。

Resources:
	EcsInstance:
    Type: ALIYUN::ECS::Instance
    Properties:
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      ImageId: centos_7
      AllocatePublicIP: false
      InstanceType: ecs.c5.large
      SystemDiskSize: 40
      SystemDiskCategory: cloud_essd
      Password:
        Ref: EcsInstancePassword

スケーリンググループリソースの定義

テンプレートでスケーリンググループリソース EssInstanceScalingGroupEssInstanceScalingGroupEnableEssInstanceScalingConfiguration を定義します。

  • Fn::GetAtt 組み込み関数を使用して、リソース属性の値 (例:EssInstanceScalingGroupEnableInstanceIds) を取得します。 詳細については、「Fn::GetAtt」をご参照ください。

  • Fn::Sub 組み込み関数を使用して、入力文字列内の変数を指定された値に置き換えます。 たとえば、EssInstanceScalingConfigurationScalingConfigurationName プロパティにこの関数を使用できます。 詳細については、「Fn::Sub」をご参照ください。

Resources:
	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
      InstanceName:
        Fn::Join:
          - '-'
          - - Ref: ALIYUN::StackName
            - '[1,4]'
  EssInstanceScalingGroupEnable:
    Type: ALIYUN::ESS::ScalingGroupEnable
    Properties:
      ScalingRuleArisExecuteVersion: '1'
      ScalingConfigurationId:
        Ref: EssInstanceScalingConfiguration
      InstanceIds:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      ScalingGroupId:
        Ref: EssInstanceScalingGroup

完全なサンプルテンプレート

ROSTemplateFormatVersion: '2015-09-01'
Description: { }
Parameters:
  EcsInstancePassword:
    NoEcho: true
    Type: String
    Description: インスタンスのログオンパスワード。 長さが 8~30 文字で、大文字、小文字、数字、特殊文字の 4 種類のうち、少なくとも 3 種類を含める必要があります。 特殊文字には、()`~!@#$%^&*_-+=|{}[]:;'<>,.?/. が含まれます。
    AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
    Label: インスタンスのパスワード
    ConstraintDescription: パスワードは長さが 8~30 文字で、大文字、小文字、数字、特殊文字の 4 種類のうち、少なくとも 3 種類を含める必要があります。 特殊文字には、()`~!@#$%^&*_-+=|{}[]:;'<>,.?/. が含まれます。
    MinLength: 8
    MaxLength: 30
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:
        Fn::Select:
          - '0'
          - Fn::GetAZs:
              Ref: ALIYUN::Region
      CidrBlock: 192.168.0.0/24
  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      SecurityGroupEgress:
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          DestCidrIp: 0.0.0.0/0
          NicType: intranet
  EcsInstance:
    Type: ALIYUN::ECS::Instance
    Properties:
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      ImageId: centos_7
      AllocatePublicIP: false
      InstanceType: ecs.c5.large
      SystemDiskSize: 40
      SystemDiskCategory: cloud_essd
      Password:
        Ref: EcsInstancePassword
  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
      InstanceName:
        Fn::Join:
          - '-'
          - - Ref: ALIYUN::StackName
            - '[1,4]'
  EssInstanceScalingGroupEnable:
    Type: ALIYUN::ESS::ScalingGroupEnable
    Properties:
      ScalingRuleArisExecuteVersion: '1'
      ScalingConfigurationId:
        Ref: EssInstanceScalingConfiguration
      InstanceIds:
        Fn::GetAtt:
          - EcsInstance
          - InstanceIds
      ScalingGroupId:
        Ref: EssInstanceScalingGroup

テンプレートパラメーターグループの追加とパラメーター設定の動的取得

前のセクションのテンプレートは基本的なリソースを定義していますが、インスタンスタイプなどのプロパティ値はハードコーディングされています。このセクションでは、テンプレートを拡張して柔軟性と再利用性を向上させます。主な変更点は、単一のインスタンス (ALIYUN::ECS::Instance) をインスタンスグループ (ALIYUN::ECS::InstanceGroup) に置き換えて複数のインスタンスを管理し、Parameters セクションを導入してスタック作成時に設定を動的に指定できるようにすることです。

テンプレートパラメーターグループの追加

テンプレートの Metadata セクションを使用して、パラメーターをグループ化し、グループラベルを定義します。

テンプレートのリソースとパラメーターを定義した後、次のように対応するリソースごとにパラメーターをグループ化します。

リソースパラメーターの分類

リソース名

パラメーター名

基本的なネットワーク設定

VpcVSwitchEcsSecurityGroup

VSwitchZoneIdVpcCidrBlockVSwitchCidrBlock

ECS 設定

EcsInstanceGroup

ECSInstanceTypeECSInstanceGroupCountECSImageIdECSDiskCategoryEcsInstancePassword

スケーリンググループリソースの設定

EssInstanceScalingGroupEssInstanceScalingGroupEnableEssInstanceScalingConfiguration

ESSGroupMaxSize

パラメーター設定の動的取得

ECSInstanceType を例にとります。 コンソールでフィルター条件を設定し、パラメーター値を動的に選択するには、パラメーターでサポートされている AssociationProperty の値を見つけます。 値 ALIYUN::ECS::Instance::InstanceType は、ALIYUN::ECS::Instance リソースタイプの AssociationProperty および AssociationPropertyMetadata セクションに記載されており、ZoneId がフィルター条件となります。 詳細については、「AssociationProperty および AssociationPropertyMetadata」をご参照ください。

完全なサンプルテンプレート

ROSTemplateFormatVersion: '2015-09-01'
Description: オートスケーリングをサポートする ECS デプロイメント。
Parameters:
  VSwitchZoneId:
    Type: String
    AssociationProperty: ALIYUN::ECS::Instance::ZoneId
    Description: vSwitch のゾーン ID。
    Label: vSwitch ゾーン ID
  VpcCidrBlock:
    Default: 192.168.0.0/16
    Label: VPC CIDR ブロック
    Type: String
    Description: 新しい VPC の CIDR ブロック。 次のいずれかの CIDR ブロックを使用することを推奨します。<font color='green'>[10.0.XX.XX/8]</font><br><font color='green'>[172.16.XX.XX/12]</font><br><font color='green'>[192.168.XX.XX/16]</font>
  VSwitchCidrBlock:
    Default: 192.168.0.0/24
    Type: String
    Description: CIDR ブロックは VPC のサブネットである必要があり、別の vSwitch で使用されていない必要があります。
    Label: vSwitch CIDR ブロック
  ECSInstanceType:
    Type: String
    Label: インスタンスタイプ
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${VSwitchZoneId}
      InstanceChargeType: ${InstanceChargeType}
  ECSDiskCategory:
    Type: String
    Description: '<font color=''blue''><b>有効な値:</font>[cloud_efficiency: <font color=''green''>ウルトラディスク</font>]<br>[cloud_ssd: <font color=''green''>標準 SSD</font>]<br>[cloud_essd: <font color=''green''>エンタープライズ SSD</font>]<br>[cloud: <font color=''green''>ベーシックディスク</font>]<br>[ephemeral_ssd: <font color=''green''>ローカル SSD</font>]'
    AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${VSwitchZoneId}
      InstanceType: ${ECSInstanceType}
    Label: システムディスクタイプ
  ECSImageId:
    AssociationProperty: ALIYUN::ECS::Image::ImageId
    Label: イメージ ID
    Description: ECS インスタンスの作成に使用されるイメージの ID。 <font><a href='https://www.alibabacloud.com/help/doc-detail/112977.html' target='_blank'><b>イメージリソースの表示</font color='blue'></a>
    Type: String
  EcsInstancePassword:
    NoEcho: true
    Type: String
    Description: インスタンスのログオンパスワード。 パスワードは長さが 8~30 文字で、大文字、小文字、数字、特殊文字 (()`~!@#$%^&*_-+=|{}[]:;'<>,.?./) のうち、少なくとも 3 つのカテゴリの文字を含める必要があります。
    AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
    Label: インスタンスのパスワード
    ConstraintDescription: パスワードは長さが 8~30 文字で、大文字、小文字、数字、特殊文字 (()`~!@#$%^&*_-+=|{}[]:;'<>,.?./) のうち、少なくとも 3 つのカテゴリの文字を含める必要があります。
    MinLength: 8
    MaxLength: 30
    AssociationProperty: ALIYUN::ECS::Instance::Password
  ECSInstanceGroupCount:
    Type: Number
    Description: ECS インスタンスの数。
    Label: インスタンス数
    Default: 3
  ESSGroupMaxSize:
    Type: Number
    Label: スケーリンググループ内の 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::Join:
          - '-'
          - - Ref: ALIYUN::StackName
            - '[1,4]'
      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
  EssInstanceScalingGroupEnable:
    Type: ALIYUN::ESS::ScalingGroupEnable
    Properties:
      ScalingRuleArisExecuteVersion: '1'
      ScalingConfigurationId:
        Ref: EssInstanceScalingConfiguration
      InstanceIds:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      ScalingGroupId:
        Ref: EssInstanceScalingGroup
  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::Join:
          - '-'
          - - Ref: ALIYUN::StackName
            - '[1,4]'
  EssInstanceScalingGroup:
    Type: ALIYUN::ESS::ScalingGroup
    Properties:
      ScalingGroupName:
        Ref: ALIYUN::StackName
      RemovalPolicys:
        - NewestInstance
      MinSize:
        Ref: ECSInstanceGroupCount
      MaxSize: 50
      VSwitchId:
        Ref: VSwitch
      DefaultCooldown: 300
Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:
      - Parameters:
          - VSwitchZoneId
          - VpcCidrBlock
          - VSwitchCidrBlock
        Label:
          default: 基本的なネットワーク設定
      - Parameters:
          - ECSInstanceType
          - ECSDiskCategory
          - ECSImageId
          - EcsInstancePassword
          - ECSInstanceGroupCount
        Label:
          default: ECS インスタンス設定
      - Parameters:
          - ESSGroupMaxSize
        Label:
          default: スケーリンググループ設定