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

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

最終更新日:Jan 16, 2025

このトピックでは、ROS (Resource Orchestration Service) テンプレートの作成プロセスについて説明します。 このトピックでは、スケーリンググループを使用して複数のECS (Elastic Compute Service) インスタンスを管理するために使用されるリソースを宣言するテンプレートが作成されます。

前提条件

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

シナリオ例

このシナリオでは、スケーリンググループが仮想プライベートクラウド (VPC) に作成され、スケーリングルールがグループに設定されます。 ECSインスタンスが作成され、スケーリンググループに追加されます。 これにより、システムはスケーリングルールに基づいてスケーリンググループ内のECSインスタンスをスケーリングします。2023-05-08_10-52-53..png

使用上の注意

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

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

テンプレートの作成

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

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

リソースを定義し、テンプレート内のリソースを関連付ける

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

テンプレートにVpcVSwitchEcsSecurityGroupの基本ネットワークリソースを定義します。

  • Ref関数とALIYUN::StackName疑似パラメーターを使用してスタック名を取得します。 次に、プロパティをRef: ALIYUN::StackNameに設定して、プロパティ値をスタック名に関連付けます。 次のコードスニペットでは、VpcVpcNameの値とVSwitchVSwitchNameの値がスタック名に関連付けられています。 詳細については、「Ref」および「ALIYUN::StackName」をご参照ください。

  • スタックが存在するリージョンの最初のゾーンIDを取得するには、ALIYUN::Region疑似パラメーターと共にFn::SelectおよびFn::GetAZs関数を使用します。 次のコードスニペットでは、VSwitchZoneIdの値が取得されます。 詳細については、「Functions」および「ALIYUN::Region」をご参照ください。

リソース:
  Vpc:
    タイプ: ALIYUN::ECS::VPC
    プロパティ:
      CidrBlock: 192.168.0.0/16
      VpcName:
        参照: ALIYUN::StackName
  VSwitch:
    タイプ: ALIYUN::ECS::VSwitch
    プロパティ:
      VSwitchName:
        参照: ALIYUN::StackName
      VpcId:
        参照: Vpc
      ZoneId:
        Fn:: 選択:
          -'0'
          -Fn::GetAZs:
              参照: ALIYUN:: リージョン
      CidrBlock: 192.168.0.0/24
  EcsSecurityGroup:
    タイプ: ALIYUN::ECS::SecurityGroup
    プロパティ:
      SecurityGroupName:
        参照: ALIYUN::StackName
      VpcId:
        参照: Vpc
      SecurityGroupEgress:
        -PortRange: '-1/-1'
          優先度: 1
          IpProtocol: すべて
          DestCidrIp: 0.0.0.0/0
          NicType: イントラネット 

ECSリソースの定義

テンプレートにEcsInstanceGroupリソースを定義します。

Ref関数を使用して、テンプレート内のリソースの論理名を参照します。 次のコードスニペットでは、VpcIdVpcSecurityGroupIdEcsSecurityGroupVSwitchIdVSwitchが参照されています。 詳細については、「Ref」をご参照ください。

リソース:
EcsInstance:
    タイプ: ALIYUN::ECS::Instance
    プロパティ:
      VpcId:
        参照: Vpc
      SecurityGroupId:
        参照: EcsSecurityGroup
      VSwitchId:
        参照: VSwitch
      ImageId: centos_7
      AllocatePublicIP: false
      InstanceType: ecs.c5.large
      SystemDiskSize: 40
      SystemDiskCategory: cloud_essd
      Password:
        参照: EcsInstancePassword 

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

テンプレートにEssInstanceScalingGroupEssInstanceScalingGroupEnable、およびEssInstanceScalingConfigurationのスケーリンググループリソースを定義します。

  • リソースのプロパティ値を返すには、Fn::GetAtt関数を使用します。 次のコードスニペットでは、EssInstanceScalingGroupEnableInstanceIdsの値が返されます。 詳細については、「Fn::GetAtt」をご参照ください。

  • Fn::Sub関数を使用して、入力文字列の変数を指定した値に置き換えます。 次のコードスニペットでは、EssInstanceScalingConfigurationScalingConfigurationNameの値が代入されます。 詳細については、「Fn::Sub」をご参照ください。

リソース:
EssInstanceScalingGroup:
    タイプ: ALIYUN::ESS::ScalingGroup
    プロパティ:
      ScalingGroupName:
        参照: ALIYUN::StackName
      RemovalPolicys:
        -NewestInstance
      MinSize: 3
      MaxSize: 50
      VSwitchId:
        参照: VSwitch
      DefaultCooldown: 300
  EssInstanceScalingConfiguration:
    タイプ: ALIYUN::ESS::ScalingConfiguration
    プロパティ:
      SecurityGroupId:
        参照: EcsSecurityGroup
      ScalingGroupId:
        参照: 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:: 参加:
          - '-'
          -参照: ALIYUN::StackName
            -'[1,4]'
  EssInstanceScalingGroupEnable:
    タイプ: ALIYUN::ESS::ScalingGroupEnable
    プロパティ:
      ScalingRuleArisExecuteVersion: '1'
      ScalingConfigurationId:
        参照: EssInstanceScalingConfiguration
      InstanceIds:
        Fn::GetAtt:
          -EcsInstanceGroup
          -InstanceIds
      ScalingGroupId:
        参照: EssInstanceScalingGroup 

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

ROSTemplateFormatVersion: '2015-09-01'
説明: { }
パラメータ:
  EcsInstancePassword:
    NoEcho: true
    データ型:Strig
    説明:
      en: サーバーのログインパスワード、長さ8〜30、3つ (大文字、小文字、数字、()'~!@#$%^& *_+ =|{}[]:;' <>,?/ Special symbol in) を含める必要があります。
       
    AllowedPattern: '[0-9A-Za-z \_\-\&:; ''<>,=% ~!@#\(\)\$\^\ * \\|{\\}\ [\]\.\?\/]+$'
    ラベル:
      en: インスタンスパスワード
       
    ConstraintDescription:
      en: 長さ8〜30、3つを含む必要があります (大文字、小文字、数字、()'~!@#$%^& *-+ =|{}[]:;' <>,.?/ Special symbol in) 。
       
    MinLength: 8
    MaxLength: 30
リソース:
  Vpc:
    タイプ: ALIYUN::ECS::VPC
    プロパティ:
      CidrBlock: 192.168.0.0/16
      VpcName:
        参照: ALIYUN::StackName
  VSwitch:
    タイプ: ALIYUN::ECS::VSwitch
    プロパティ:
      VSwitchName:
        参照: ALIYUN::StackName
      VpcId:
        参照: Vpc
      ZoneId:
        Fn:: 選択:
          -'0'
          -Fn::GetAZs:
              参照: ALIYUN:: リージョン
      CidrBlock: 192.168.0.0/24
  EcsSecurityGroup:
    タイプ: ALIYUN::ECS::SecurityGroup
    プロパティ:
      SecurityGroupName:
        参照: ALIYUN::StackName
      VpcId:
        参照: Vpc
      SecurityGroupEgress:
        -PortRange: '-1/-1'
          優先度: 1
          IpProtocol: すべて
          DestCidrIp: 0.0.0.0/0
          NicType: イントラネット
  EcsInstance:
    タイプ: ALIYUN::ECS::Instance
    プロパティ:
      VpcId:
        参照: Vpc
      SecurityGroupId:
        参照: EcsSecurityGroup
      VSwitchId:
        参照: VSwitch
      ImageId: centos_7
      AllocatePublicIP: false
      InstanceType: ecs.c5.large
      SystemDiskSize: 40
      SystemDiskCategory: cloud_essd
      Password:
        参照: EcsInstancePassword
  EssInstanceScalingGroup:
    タイプ: ALIYUN::ESS::ScalingGroup
    プロパティ:
      ScalingGroupName:
        参照: ALIYUN::StackName
      RemovalPolicys:
        -NewestInstance
      MinSize: 3
      MaxSize: 50
      VSwitchId:
        参照: VSwitchId
      DefaultCooldown: 300
  EssInstanceScalingConfiguration:
    タイプ: ALIYUN::ESS::ScalingConfiguration
    プロパティ:
      SecurityGroupId:
        参照: EcsSecurityGroup
      ScalingGroupId:
        参照: 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:: 参加:
          - '-'
          -参照: ALIYUN::StackName
            -'[1,4]'
  EssInstanceScalingGroupEnable:
    タイプ: ALIYUN::ESS::ScalingGroupEnable
    プロパティ:
      ScalingRuleArisExecuteVersion: '1'
      ScalingConfigurationId:
        参照: EssInstanceScalingConfiguration
      InstanceIds:
        Fn::GetAtt:
          -EcsInstanceGroup
          -InstanceIds 

テンプレートにパラメーターグループを追加およびフィルター条件に基づいてパラメーターのオプション値を表示

上記のサンプルテンプレートは、複数のリソースとその関連付けを宣言します。 EcsInstanceInstanceTypeSystemDiskCategoryの値はリテラル値です。 異なるリージョンでスタックを作成するたびに、テンプレート構造を変更し、プロパティ値を変更する必要があります。

この場合、[パラメーター] セクションを追加して、テンプレートの柔軟性と再利用性を向上させることができます。

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

メタデータセクションをテンプレートに追加して、パラメーターセクションで定義されているパラメーターをグループ化し、各グループのラベルを定義できます。

テンプレートでリソースとパラメーターを定義した後、リソースまたはリソースパラメーターごとにパラメーターをグループ化できます。 次の表に、完全なサンプルテンプレートに基づいて追加されるパラメーターグループを示します。 この例では、パラメーターはリソース名またはリソースパラメーター名でグループ化されています。

パラメーターグループ

リソース名

リソースパラメーター名

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

VpcVSwitch、およびEcsSecurityGroup

VSwitchZoneIdVpcCidrBlock、およびVSwitchCidrBlock

ECS設定

EcsInstance

ECSInstanceTypeECSInstanceGroupCountECSImageIdECSDiskCategory、およびEcsInstancePassword

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

EssInstanceScalingGroupEssInstanceScalingGroupEnable、およびEssInstanceScalingConfiguration

ESSGroupMaxSize

フィルター条件に基づいたパラメーターのオプション値の表示

パラメーターのフィルター条件を指定し、パラメーター値をROSコンソールで選択したフィルター条件に関連付ける場合は、テンプレートでAssociationPropertyとAssociationPropertyMetadataを指定できます。 この例では、ECSInstanceTypeパラメーターのオプションの値は、ZoneIdの値に基づいて表示されます。 ECSInstanceTypeでAssociationPropertyとAssociationPropertyMetadataを指定するには、ALIYUN::ECS::Instanceを使用して、ROSの公式ドキュメントでECSInstanceTypeでサポートされているAssociationPropertyの値を照会します。 次の値が照会されます: ALIYUN::ECS::Instance::InstanceType。 次に、AssociationPropertyがALIYUN::ECS::Instance::InstanceTypeに設定され、ZoneIdがフィルター条件として使用されている場合、AssociationPropertyMetadataの値を照会します。 公式ドキュメントの詳細については、「AssociationPropertyおよびAssociationPropertyMetadata」をご参照ください。

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

ROSTemplateFormatVersion: '2015-09-01'
説明:
  en: scaling-ecs。
   
パラメーター:
  VSwitchZoneId:
    データ型:Strig
    アソシエーションプロパティ: ALIYUN::ECS::Instance::ZoneId
    説明:
      en: 既存のスイッチの可用性ID。
       
    ラベル:
      en: VSwitchゾーンID
       
  VpcCidrBlock:
    デフォルト: 192.168.0.0/16
    ラベル:
       
      en: VPC CIDRブロック
    データ型:Strig
    説明:
       
      en: 新しい独自のネットワークIPアドレスセグメント範囲、<br><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:
    デフォルト: 192.168.0.0/24
    データ型:Strig
    説明:
       
      en: 独自ネットワークのサブネットワークセグメントである必要があり、他のVSwitchによって占有されていません。
    ラベル:
       
      en: VSwitch CIDRブロック
  ECSInstanceType:
    データ型:Strig
    ラベル:
      en: インスタンスタイプ
       
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${VSwitchZoneId}
      InstanceChargeType: ${InstanceChargeType}
  ECSDiskCategory:
    データ型:Strig
    説明:
      en: '<font color='blue''><b> オプションの値:</b></font><br>[cloud_efficiency: <font color='green''>Efficientクラウドディスク </font>]<br>[cloud_ssd: <font color=''green''>> SSDクラウドディスク </font>]<br> <font color='green''>ESSDクラウドディスク </font>]<br>[Cloud: <font color='green''> クラウドディスク </font>]<br>[ephemeral_ssd: <font color=''green''> ローカルSSDクラウドディスク </font>]' 。
       
    アソシエーションプロパティ: ALIYUN::ECS::Disk::SystemDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${VSwitchZoneId}
      InstanceType: ${ECSInstanceType}
    ラベル:
      en: システムディスクタイプ
       
  ECSImageId:
    アソシエーションプロパティ: ALIYUN::ECS::Image::ImageId
    ラベル:
       
      en: イメージID
    説明:
       
      en: Image IDは、1つのECSインスタンスを起動するイメージリソースを表します。<font><a href='https:// www.alibabacloud.com/help/doc-detail/112977.html' target='_blank'><b> イメージリソースの表示 </b></font color='blue'></a>
    データ型:Strig
  EcsInstancePassword:
    NoEcho: true
    データ型:Strig
    説明:
      en: サーバーのログインパスワード、長さ8〜30、3つ (大文字、小文字、数字、()'~!@#$%^& *_+ =|{}[]:;' <>,?/ Special symbol in) を含める必要があります。
       
    AllowedPattern: '[0-9A-Za-z \_\-\&:; ''<>,=% ~!@#\(\)\$\^\ * \\|{\\}\ [\]\.\?\/]+$'
    ラベル:
      en: インスタンスパスワード
       
    ConstraintDescription:
      en: 長さ8〜30、3つを含む必要があります (大文字、小文字、数字、()'~!@#$%^& *-+ =|{}[]:;' <>,.?/ Special symbol in) 。
       
    MinLength: 8
    MaxLength: 30
    AssociationProperty: ALIYUN::ECS::Instance::Password
  ECSInstanceGroupCount:
    タイプ: 数
    説明:
      en: ECSインスタンス数
       
    ラベル:
      en: インスタンス数
       
    デフォルト: 3
  ESSGroupMaxSize:
    タイプ: 数
    ラベル:
      en: ESS内のECSインスタンスの最大数。
       
    デフォルト: 50
リソース:
  Vpc:
    タイプ: ALIYUN::ECS::VPC
    プロパティ:
      CidrBlock:
        参照: VpcCidrBlock
      VpcName:
        参照: ALIYUN::StackName
  VSwitch:
    タイプ: ALIYUN::ECS::VSwitch
    プロパティ:
      VSwitchName:
        参照: ALIYUN::StackName
      VpcId:
        参照: Vpc
      ZoneId:
        参照: VSwitchZoneId
      CidrBlock:
        参照: VSwitchCidrBlock
  EcsSecurityGroup:
    タイプ: ALIYUN::ECS::SecurityGroup
    プロパティ:
      SecurityGroupName:
        参照: ALIYUN::StackName
      VpcId:
        参照: Vpc
      SecurityGroupIngress:
        -PortRange: 8080/8080
          優先度: 1
          SourceCidrIp: 0.0.0.0/0
          IpProtocol: tcp
          NicType: インターネット
      SecurityGroupEgress:
        -PortRange: '-1/-1'
          優先度: 1
          IpProtocol: すべて
          DestCidrIp: 0.0.0.0/0
          NicType: インターネット
        -PortRange: '-1/-1'
          優先度: 1
          IpProtocol: すべて
          DestCidrIp: 0.0.0.0/0
          NicType: イントラネット
  EcsInstanceGroup:
    タイプ: ALIYUN::ECS::InstanceGroup
    プロパティ:
      InstanceName:
        Fn:: 参加:
          - '-'
          -参照: ALIYUN::StackName
            -'[1,4]'
      VpcId:
        参照: Vpc
      VSwitchId:
        参照: VSwitch
      SecurityGroupId:
        参照: EcsSecurityGroup
      SystemDiskCategory:
        参照: ECSDiskCategory
      SystemDiskSize: 200
      MaxAmount:
        参照: ECSInstanceGroupCount
      ImageId:
        参照: ECSImageId
      InstanceType:
        参照: ECSInstanceType
      Password:
        参照: EcsInstancePassword
      AllocatePublicIP: false
  EssInstanceScalingGroupEnable:
    タイプ: ALIYUN::ESS::ScalingGroupEnable
    プロパティ:
      ScalingRuleArisExecuteVersion: '1'
      ScalingConfigurationId:
        参照: EssInstanceScalingConfiguration
      InstanceIds:
        Fn::GetAtt:
          -EcsInstanceGroup
          -InstanceIds
      ScalingGroupId:
        参照: EssInstanceScalingGroup
  EssInstanceScalingConfiguration:
    タイプ: ALIYUN::ESS::ScalingConfiguration
    プロパティ:
      SecurityGroupId:
        参照: EcsSecurityGroup
      ScalingGroupId:
        参照: EssInstanceScalingGroup
      ScalingConfigurationName:
        Fn::Sub: sc-${ALIYUN::StackName}
      InstanceType:
        参照: ECSInstanceType
      SystemDiskCategory:
        参照: ECSDiskCategory
      SystemDiskSize: 200
      ImageId:
        参照: ECSImageId
      InstanceName:
        Fn:: 参加:
          - '-'
          -参照: ALIYUN::StackName
            -'[1,4]'
  EssInstanceScalingGroup:
    タイプ: ALIYUN::ESS::ScalingGroup
    プロパティ:
      ScalingGroupName:
        参照: ALIYUN::StackName
      RemovalPolicys:
        -NewestInstance
      MinSize:
        参照: ECSInstanceGroupCount
      MaxSize: 50
      VSwitchId:
        参照: VSwitch
      DefaultCooldown: 300
メタデータ:
  ALIYUN::ROS:: インターフェース:
    ParameterGroups:
      -パラメータ:
          -VSwitchZoneId
          -VpcCidrBlock
          -VSwitchCidrBlock
        ラベル:
          default:
             
            en: 基本的なネットワーク構成
      -パラメータ:
          -ECSInstanceType
          -ECSDiskCategory
          -ECSImageId
          -EcsInstancePassword
          -ECSInstanceGroupCount
        ラベル:
          default:
            en: インスタンス
             
      -パラメータ:
          -ESSGroupMaxSize
        ラベル:
          default:
             
            en: ESS設定