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

Resource Orchestration Service:ECSインスタンスグループを作成し、インスタンスグループをCLBインスタンスにアタッチする

最終更新日:Jan 16, 2025

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

前提条件

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

サンプルシナリオ

このシナリオでは、ECSインスタンスグループが仮想プライベートクラウド (VPC) に作成され、Nginxサービスがインスタンスグループにデプロイされ、インスタンスグループがCLBインスタンスにアタッチされます。

2023-05-29_11-50-58..png

使用上の注意

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

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

テンプレートの作成

シナリオに適したリソースタイプを見つけるには、リソースタイプのドキュメントを参照してください。 詳細については、「サービス別のリソースタイプのリスト」をご参照ください。

サンプルシナリオでは、次のリソースタイプを使用してリソースを作成する必要があります。ALIYUN::ECS::VPC(VPCを作成) 、ALIYUN::ECS::InstanceGroup(ECSインスタンスグループを作成) 、ALIYUN::SLB::LoadBalancer(CLBインスタンスを作成) 、ALIYUN::SLB:: リスナー(CLBインスタンスにリスナーを追加) 、ALIYUN::VPC::EIP(elastic IPアドレスから省略されるEIPを作成します) 、ALIYUN::ECS::VSwitch(ECSインスタンスグループが接続されているvSwitchを作成します) 、およびALIYUN::ECS::InstanceGroup(セキュリティグループを作成します) 。 ALIYUN::ECS::InstanceGroupリソースタイプを使用してECSインスタンスグループを作成する場合、リソースタイプのUserDataプロパティを使用してデータ初期化用のスクリプトを実行する必要があります。 また、ECSインスタンスグループの実行プロセスを制御するには、ALIYUN::ROS::WaitCondition (シグナルを待機) およびALIYUN::ROS::WaitConditionHandle (シグナルを受信) リソースタイプを使用する必要があります。

上記のリソースタイプは、テンプレートの [リソース] セクションで指定できます。

テンプレートでのリソースの定義と関連付け

Vpc、VSwitch、およびEcsSecurityGroupの定義

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

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

  • Ref関数を使用して、指定したパラメーターの値を返します。 次のコードスニペットでは、VSwitchでRef: Vpcが指定され、VPCからVpcIdの値として解析されたVpc IDが返されます。 ほとんどの場合、RefはリソースIDを返します。 詳細については、「Functions」をご参照ください。

リソース:
  Vpc:
    タイプ: ALIYUN::ECS::VPC
    プロパティ:
      CidrBlock: 192.168.0.0/16
      VpcName:
        参照: ALIYUN::StackName
  VSwitch:
    タイプ: ALIYUN::ECS::VSwitch
    プロパティ:
      VSwitchName:
        参照: ALIYUN::StackName
      VpcId:
        参照: Vpc
      ZoneId:
        参照: ZoneId
      CidrBlock: 192.168.0.0/24
  EcsSecurityGroup:
    タイプ: ALIYUN::ECS::SecurityGroup
    プロパティ:
      SecurityGroupName:
        参照: ALIYUN::StackName
      VpcId:
        参照: Vpc
      SecurityGroupIngress:
        -PortRange: 80/80
          優先度: 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: イントラネット 

Slb、SlbListener、およびEipSlbAddressの定義

Slb (CLBインスタンスを指定) 、SlbListener (リスナーを指定) 、EipSlbAddress (EIPを指定) のリソースをテンプレートに定義します。

Fn::Sub関数とALIYUN::StackName疑似パラメーターを使用して、入力文字列の変数を取得したスタック名に置き換えます。 次に、新しい文字列をプロパティの値として使用します。 詳細については、「ALIYUN::StackName」をご参照ください。

リソース:
  Slb:
    タイプ: ALIYUN::SLB::LoadBalancer
    プロパティ:
      VpcId:
        参照: Vpc
      VSwitchId:
        参照: VSwitch
      LoadBalancerName:
        Fn::Sub: slb-${ALIYUN::StackName}
      PayType:
        参照: PayType
      PricingCycle:
        参照: PayPeriodUnit
      期間:
        参照: PayPeriod
      AddressType: イントラネット
      LoadBalancerSpec:
        参照: LoadBalancerSpec
      オートペイ: true
  SlbListener:
    依存:
      -Slb
    タイプ: ALIYUN::SLB:: リスナー
    プロパティ:
      永続性:
        CookieTimeout: 60
        StickySession: 'on'
        PersistenceTimeout: 180
        XForwardedFor: 'off'
        StickySessionType: 挿入
      ListenerPort: 80
      帯域幅: -1
      ヘルスチェック:
        HttpCode: http_2xx、http_3xx、http_4xx、http_5xx
        HealthCheckType: tcp
        UnhealthyThreshold: 3
        タイムアウト: 5
        HealthyThreshold: 3
        ポート: 80
        URI: /
        インターバル: 2
      LoadBalancerId:
        参照: Slb
      BackendServerPort: 80
      プロトコル: tcp
  EipSlbAddress:
    タイプ: ALIYUN::VPC::EIP
    プロパティ:
      名前:
        参照: ALIYUN::StackName
      InternetChargeType: PayByTraffic
      帯域幅:
        参照: 帯域幅 

EcsInstanceGroup、WaitCondition、およびWaitConditionHandleの定義

EcsInstanceGroup (ECSインスタンスグループを指定) 、WaitCondition (シグナルを待機) 、WaitConditionHandle (シグナルを受信) のリソースをテンプレートに定義します。

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

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

  • ALIYUN::ROS::WaitConditionとALIYUN::ROS::WaitConditionHandleを使用して、EcsInstanceGroupのデータ初期化を制御します。

    1. シグナルを待機するために使用されるALIYUN::ROS::WaitConditionリソースを作成します。

    2. シグナルの受信に使用するALIYUN::ROS::WaitConditionHandleリソースを作成します。

    3. EcsInstanceGroupのUserDataで指定したスクリプトを実行し、実行プロセスのシグナルを送信します。 次のコードスニペットでは、データ初期化のスクリプトがEcsInstanceGroupのUserDataで指定され、実行されます。 スクリプトの実行が成功すると、ROSはWaitConditionHandleをコールバックし、WaitConditionに失敗します。

リソース:
  WaitCondition:
    タイプ: ALIYUN::ROS::WaitCondition
    プロパティ:
      カウント: 1
      ハンドル:
        参照: WaitConditionHandle
      タイムアウト: 300
  WaitConditionHandle:
    タイプ: ALIYUN::ROS::WaitConditionHandle
  EcsInstanceGroup:
    タイプ: ALIYUN::ECS::InstanceGroup
    プロパティ:
      InstanceChargeType:
        参照: PayType
      PeriodUnit:
        参照: PayPeriodUnit
      期間:
        参照: PayPeriod
      IoOptimized: 最適化
      SystemDiskCategory:
        参照: SystemDiskCategory
      SystemDiskSize:
        参照: SystemDiskSize
      DiskMappings:
        -カテゴリ:
            参照: DataDiskCategory
          サイズ:
            参照: DataDiskSize
      VpcId:
        参照: Vpc
      SecurityGroupId:
        参照: EcsSecurityGroup
      VSwitchId:
        参照: VSwitch
      MaxAmount: 2
      ImageId: centos_7
      InstanceType:
        参照: EcsInstanceType
      Password:
        参照: InstancePassword
      AllocatePublicIP: false
      UserData:
        Fn:: サブ:
          - |
            #!/bin/bash
            # ディスクを /disk1ディレクトリにアタッチします。
            cat >> /root/InitDataDisk.sh << EOF
            #!/bin/bash
            エコー "p
            n
            p
            w
            "| fdisk -u /dev/vdb
            EOF
            /bin/bash /root/InitDataDisk.sh
            rm -f /root/InitDataDisk.sh
            rm -f InitDataDisk.sh
            mkfs -t ext4 /dev/vdb1
            cp /etc/fstab /etc/fstab.bak
            mkdir /disk1
            echo 'blkid /dev/vdb1 | awk '{print $2}' | sed 's/\\\ "// g'' /disk1 ext4デフォルト0 >> /etc/fstab
            mount -a
            # インストールスクリプトを設定します。
            yum install -y nginx
            # スタートアップスクリプトを設定します。
            systemctlがnginx.serviceを開始
            # スクリプトの実行が成功すると、ROSはWaitConditionHandleをコールバックし、WaitConditionに失敗します。 
            ${CurlCli} -d "{\" Data\" : \" Success\", \" status\" : \" SUCCESS\"}"
          -CurlCli:
              Fn::GetAtt:
                -WaitConditionHandle
                -CurlCli
    

EcsInstanceGroup、Slb、およびSlbBackendServerAttachmentの定義

EcsInstanceGroupSlb、およびSlbBackendServerAttachmentのリソースをテンプレートに定義します。

  • SlbBackendServerAttachmentを使用して、ECSインスタンスグループをCLBインスタンスにアタッチします。 詳細については、「ALIYUN::SLB::BackendServerAttachment」をご参照ください。

    ALIYUN::SLB::BackendServerAttachmentリソースタイプには、次のルールが適用されます。BackendServerWeightListを空のままにすると、BackendServerListで指定されたインスタンス (バックエンドサーバー) に含まれる各ECSインスタンスの重み値が100されます。 BackendServerWeightListで指定された重み値の数がBackendServerListで指定されたインスタンスの数より少ない場合、過剰なECSインスタンスには最後の重み値が割り当てられます。

  • DependsOnプロパティを使用して、依存リソースが作成された後にのみリソースが作成されるように指定します。 リソースにDependsOnプロパティを追加する場合、リソースはDependsOnプロパティで指定されたリソースが作成された後にのみ作成されます。 詳細については、「DependsOn」をご参照ください。

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

リソース:
  EcsInstanceGroup:
    タイプ: ALIYUN::ECS::InstanceGroup
    プロパティ:
      InstanceChargeType:
        参照: PayType
      PeriodUnit:
        参照: PayPeriodUnit
      期間:
        参照: PayPeriod
      IoOptimized: 最適化
      SystemDiskCategory:
        参照: SystemDiskCategory
      SystemDiskSize:
        参照: SystemDiskSize
      DiskMappings:
        -カテゴリ:
            参照: DataDiskCategory
          サイズ:
            参照: DataDiskSize
      VpcId:
        参照: Vpc
      SecurityGroupId:
        参照: EcsSecurityGroup
      VSwitchId:
        参照: VSwitch
      MaxAmount: 2
      ImageId: centos_7
      InstanceType:
        参照: EcsInstanceType
      Password:
        参照: InstancePassword
      AllocatePublicIP: false
  Slb:
    タイプ: ALIYUN::SLB::LoadBalancer
    プロパティ:
      VpcId:
        参照: Vpc
      VSwitchId:
        参照: VSwitch
      LoadBalancerName:
        Fn::Sub: slb-${ALIYUN::StackName}
      PayType:
        参照: PayType
      PricingCycle:
        参照: PayPeriodUnit
      期間:
        参照: PayPeriod
      AddressType: イントラネット
      LoadBalancerSpec:
        参照: LoadBalancerSpec
      オートペイ: true
  SlbBackendServerAttachment:
    依存:
      -EcsInstanceGroup
      -Slb
    タイプ: ALIYUN::SLB::BackendServerAttachment
    プロパティ:
      BackendServerList:
        Fn::GetAtt:
          -EcsInstanceGroup
          -InstanceIds
      LoadBalancerId:
        参照: Slb
      BackendServerWeightList:
        -100
        -50 

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

ROSTemplateFormatVersion: '2015-09-01'
説明:
  en: 新しいVPCとvSWitchを作成し、1つのCLBと2つのECSインスタンスを作成し、すべてのECSインスタンスをCLBにバインドします。 
パラメーター:
  ZoneId:
    データ型:Strig
    アソシエーションプロパティ: ALIYUN::ECS::Instance::ZoneId
    ラベル:
      en: vSwitch可用性ゾーン     
  VpcCidrBlock:
    デフォルト: 192.168.0.0/16
    ラベル:   
      en: VPC CIDRブロック
    データ型:Strig
    説明:  
      en: 新しい独自のネットワークIPアドレスセグメント範囲、次のIPアドレスセグメントの使用を推奨 <br><font color='green'>[10.0.0.0/8]</font><br><font color='green'>[172.16.0.0/12]</font><br><font color='green'>>[192.168.0.0/16]</font>
  VSwitchCidrBlock:
    デフォルト: 192.168.0.0/24
    データ型:Strig
    説明: 
      en: 独自ネットワークのサブネットワークセグメントである必要があり、他のvSwitchによって占有されていません。
    ラベル: 
      en: vSwitch CIDRブロック
  EcsInstanceType:
    データ型:Strig
    ラベル:
      en: インスタンスタイプ
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceChargeType: ${InstanceChargeType}
  SystemDiskCategory:
    データ型: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: ${ZoneId}
      InstanceType: ${EcsInstanceType}
    ラベル:
      en: システムディスクタイプ  
  SystemDiskSize:
    デフォルト: 40
    タイプ: 数
    ラベル:
      en: システムディスク容量
  DataDiskCategory:
    アソシエーションプロパティ: ALIYUN::ECS::Disk::DataDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceType: ${EcsInstanceType}
    データ型: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>]'
    ラベル: 
      en: データディスクタイプ
  DataDiskSize:
    デフォルト: 100
    MaxValue: 32768
    MinValue: 20
    ラベル: 
      en: データディスク容量
    タイプ: 数
  InstancePassword:
    NoEcho: true
    データ型:Strig
       
       
    AllowedPattern: '[0-9A-Za-z \_\-\&:; ''<>,=% ~!@#\(\)\$\^\ * \\|{\\}\ [\]\.\?\/]+$'
    ラベル:
      en: インスタンスパスワード
       
    ConstraintDescription:
      en: 長さ8〜30、3つを含む必要があります (大文字、小文字、数字、()'~!@#$%^& *-+ =|{}[]:;' <>,.?/ Special symbol in) 。
       
    MinLength: 8
    MaxLength: 30
    AssociationProperty: ALIYUN::ECS::Instance::Password
  PayType:
    データ型:Strig
    ラベル:
      en: ECSインスタンスの料金タイプ
       
    デフォルト: PostPaid
    AllowedValues:
      -PostPaid
      -前払い
    AssociationProperty: ChargeType
    AssociationPropertyMetadata:
      LocaleKey: InstanceChargeType
  PayPeriodUnit:
    データ型:Strig
    説明:
      en: リソースを購入する長いサイクル。 <br> 週は週、月は月です。 <br> デフォルト値は月です。<br><b><font color='red'> ECSインスタンスタイプがPrePaidで有効な場合。</b></font>
        </b></font>
    ラベル:
      en: 支払い期間単位
       
    デフォルト: 月
    AllowedValues:
      -月
      -年
    AssociationProperty: PayPeriodUnit
    AssociationPropertyMetadata:
      表示:
        条件:
          Fn::Not:
            Fn:: 等しい:
              - ${PayType}
              -PostPaid
  PayPeriod:
    タイプ: 数
    ラベル:
      en: Period
       
    デフォルト: 1
    AllowedValues:
      -1
      -2
      -3
      -4
      -5
      -6
      -7
      -8
      -9
    AssociationProperty: PayPeriod
    AssociationPropertyMetadata:
      表示:
        条件:
          Fn::Not:
            Fn:: 等しい:
              - ${PayType}
              -PostPaid
  LoadBalancerSpec:
    データ型:Strig
    アソシエーションプロパティ: ALIYUN::SLB::Instance::InstanceType
    ラベル:
      en: LoadBalancer仕様
       
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
  帯域幅:
    説明:
       
      en: 'Value range: [0, 1000], Unit: Mbps.'
    デフォルト: 10
    MaxValue: 1000
    ラベル:
       
      en: CLB Elastic IP帯域幅
    MinValue: 1
    タイプ: 数
リソース:
  Vpc:
    タイプ: ALIYUN::ECS::VPC
    プロパティ:
      CidrBlock:
        参照: VpcCidrBlock
      VpcName:
        参照: ALIYUN::StackName
  VSwitch:
    タイプ: ALIYUN::ECS::VSwitch
    プロパティ:
      VSwitchName:
        参照: ALIYUN::StackName
      VpcId:
        参照: Vpc
      ZoneId:
        参照: ZoneId
      CidrBlock:
        参照: VSwitchCidrBlock
  EcsSecurityGroup:
    タイプ: ALIYUN::ECS::SecurityGroup
    プロパティ:
      SecurityGroupName:
        参照: ALIYUN::StackName
      VpcId:
        参照: Vpc
      SecurityGroupIngress:
        -PortRange: 80/80
          優先度: 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: イントラネット
  WaitCondition:
    タイプ: ALIYUN::ROS::WaitCondition
    プロパティ:
      カウント: 1
      ハンドル:
        参照: WaitConditionHandle
      タイムアウト: 300
  WaitConditionHandle:
    タイプ: ALIYUN::ROS::WaitConditionHandle
  EcsInstanceGroup:
    タイプ: ALIYUN::ECS::InstanceGroup
    プロパティ:
      InstanceChargeType:
        参照: PayType
      PeriodUnit:
        参照: PayPeriodUnit
      期間:
        参照: PayPeriod
      IoOptimized: 最適化
      SystemDiskCategory:
        参照: SystemDiskCategory
      SystemDiskSize:
        参照: SystemDiskSize
      DiskMappings:
        -カテゴリ:
            参照: DataDiskCategory
          サイズ:
            参照: DataDiskSize
      VpcId:
        参照: Vpc
      SecurityGroupId:
        参照: EcsSecurityGroup
      VSwitchId:
        参照: VSwitch
      MaxAmount: 2
      ImageId: centos_7
      InstanceType:
        参照: EcsInstanceType
      Password:
        参照: InstancePassword
      AllocatePublicIP: false
      UserData:
        Fn:: サブ:
          - |
            #!/bin/bash
            # ディスクを /disk1ディレクトリにアタッチします。
            cat >> /root/InitDataDisk.sh << EOF
            #!/bin/bash
            エコー "p
            n
            p
            w
            "| fdisk -u /dev/vdb
            EOF
            /bin/bash /root/InitDataDisk.sh
            rm -f /root/InitDataDisk.sh
            rm -f InitDataDisk.sh
            mkfs -t ext4 /dev/vdb1
            cp /etc/fstab /etc/fstab.bak
            mkdir /disk1
            echo 'blkid /dev/vdb1 | awk '{print $2}' | sed 's/\\\ "// g'' /disk1 ext4デフォルト0 >> /etc/fstab
            mount -a
            # インストールスクリプトを設定します。
            yum install -y nginx
            # スタートアップスクリプトを設定します。
            systemctlがnginx.serviceを開始
            # スクリプトの実行が成功すると、ROSはWaitConditionHandleをコールバックし、WaitConditionに失敗します。 
            ${CurlCli} -d "{\" Data\" : \" Success\", \" status\" : \" SUCCESS\"}"
          -CurlCli:
              Fn::GetAtt:
                -WaitConditionHandle
                -CurlCli
  Slb:
    タイプ: ALIYUN::SLB::LoadBalancer
    プロパティ:
      VpcId:
        参照: Vpc
      VSwitchId:
        参照: VSwitch
      LoadBalancerName:
        Fn::Sub: slb-${ALIYUN::StackName}
      PayType:
        参照: PayType
      PricingCycle:
        参照: PayPeriodUnit
      期間:
        参照: PayPeriod
      AddressType: イントラネット
      LoadBalancerSpec:
        参照: LoadBalancerSpec
      オートペイ: true
  EipSlbAddress:
    タイプ: ALIYUN::VPC::EIP
    プロパティ:
      名前:
        参照: ALIYUN::StackName
      InternetChargeType: PayByTraffic
      帯域幅:
        参照: 帯域幅
  EipSlbAddressAssociation:
    タイプ: ALIYUN::VPC::EIPAssociation
    プロパティ:
      InstanceId:
        参照: Slb
      AllocationId:
        参照: EipSlbAddress
  SlbBackendServerAttachment:
    依存:
      -EcsInstanceGroup
    タイプ: ALIYUN::SLB::BackendServerAttachment
    プロパティ:
      BackendServerList:
        Fn::GetAtt:
          -EcsInstanceGroup
          -InstanceIds
      LoadBalancerId:
        参照: Slb
      BackendServerWeightList:
        -100
        -100
  SlbListener:
    依存:
      -Slb
    タイプ: ALIYUN::SLB:: リスナー
    プロパティ:
      永続性:
        CookieTimeout: 60
        StickySession: 'on'
        PersistenceTimeout: 180
        XForwardedFor: 'off'
        StickySessionType: 挿入
      ListenerPort: 80
      帯域幅: -1
      ヘルスチェック:
        HttpCode: http_2xx、http_3xx、http_4xx、http_5xx
        HealthCheckType: tcp
        UnhealthyThreshold: 3
        タイムアウト: 5
        HealthyThreshold: 3
        ポート: 80
        URI: /
        インターバル: 2
      LoadBalancerId:
        参照: Slb
      BackendServerPort: 80
      プロトコル: tcp
出力:
  エンドポイント:
    説明:
       
      en: パブリックIPアドレス。
    値:
      Fn:: サブ:
        -http://${ServerAddress}
        -ServerAddress:
            Fn::GetAtt:
              -EipSlbAddress
              -EipAddress 

テンプレートにパラメーターグループを追加し、フィルター条件に基づいてパラメーターの有効な値を表示します

上記のテンプレートでは、複数のリソースが定義され、関連付けられています。 SlbリソースのLoadBalancerSpecプロパティの値と、EcsInstanceGroupリソースのInstanceTypeおよびSystemDiskCategoryプロパティの値は、特定のパラメーターの値を参照します。 異なるリージョンでスタックを作成するたびに、テンプレート構造を変更し、プロパティ値を変更する必要があります。

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

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

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

テンプレートでリソースとパラメーターを定義した後、リソースまたはリソースパラメーターごとにパラメーターをグループ化できます。

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

パラメーターグループ

リソース名

リソースパラメーター名

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

VpcVSwitch、およびEcsSecurityGroup

ZoneId, VpcCidrBlock, VSwitchCidrBlock

CLB設定

SlbおよびEipSlbAddress

LoadBalancerSpec帯域幅

ECS設定

EcsInstanceGroup

PayTypePayPeriodUnitPayPeriodECSInstanceTypeECSDiskSizeECSDiskCategoryEcsInstancePassword

フィルター条件に基づいてパラメーターの有効な値を表示する

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

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

ROSTemplateFormatVersion: '2015-09-01'
説明:
  en: 新しいVPCとvSWitchを作成し、1つのCLBと2つのECSインスタンスを作成し、すべてのECSインスタンスをCLBにバインドします。
   
パラメーター:
  ZoneId:
    データ型:Strig
    アソシエーションプロパティ: ALIYUN::ECS::Instance::ZoneId
    ラベル:
      en: vSwitch可用性ゾーン
       
  VpcCidrBlock:
    デフォルト: 192.168.0.0/16
    ラベル:
       
      en: VPC CIDRブロック
    データ型:Strig
    説明:
       
      en: 新しい独自のネットワークIPアドレスセグメント範囲、次のIPアドレスセグメントの使用を推奨 <br><font color='green'>[10.0.0.0/8]</font><br><font color='green'>[172.16.0.0/12]</font><br><font color='green'>>[192.168.0.0/16]</font>
  VSwitchCidrBlock:
    デフォルト: 192.168.0.0/24
    データ型:Strig
    説明:
       
      en: 独自ネットワークのサブネットワークセグメントである必要があり、他のvSwitchによって占有されていません。
    ラベル:
       
      en: vSwitch CIDRブロック
  EcsInstanceType:
    データ型:Strig
    ラベル:
      en: インスタンスタイプ
       
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceChargeType: ${InstanceChargeType}
  SystemDiskCategory:
    データ型: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: ${ZoneId}
      InstanceType: ${EcsInstanceType}
    ラベル:
      en: システムディスクタイプ
       
  SystemDiskSize:
    デフォルト: 40
    タイプ: 数
    説明:
       
      en: 'システムディスクサイズ、値の範囲: 40-500、単位: GB。'
    ラベル:
       
      en: システムディスク容量
  DataDiskCategory:
    アソシエーションプロパティ: ALIYUN::ECS::Disk::DataDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceType: ${EcsInstanceType}
    データ型: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>]'
    ラベル:
       
      en: データディスクタイプ
  DataDiskSize:
    説明:
        
      en: 'ECSインスタンスのディスクサイズ、値の範囲: 20〜32768、単位: GB。'
    デフォルト: 100
    MaxValue: 32768
    MinValue: 20
    ラベル:
       
      en: データディスク容量
    タイプ: 数
  InstancePassword:
    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
  PayType:
    データ型:Strig
    ラベル:
      en: ECSインスタンスの料金タイプ
       
    デフォルト: PostPaid
    AllowedValues:
      -PostPaid
      -前払い
    AssociationProperty: ChargeType
    AssociationPropertyMetadata:
      LocaleKey: InstanceChargeType
  PayPeriodUnit:
    データ型:Strig
    説明:
      en: リソースを購入する長いサイクル。 <br> 週は週、月は月です。 <br> デフォルト値は月です。<br><b><font color='red'> ECSインスタンスタイプがPrePaidで有効な場合。</b></font>
        </b></font>
    ラベル:
      en: 支払い期間単位
       
    デフォルト: 月
    AllowedValues:
      -月
      -年
    AssociationProperty: PayPeriodUnit
    AssociationPropertyMetadata:
      表示:
        条件:
          Fn::Not:
            Fn:: 等しい:
              - ${PayType}
              -PostPaid
  PayPeriod:
    タイプ: 数
    ラベル:
      en: Period
       
    デフォルト: 1
    AllowedValues:
      -1
      -2
      -3
      -4
      -5
      -6
      -7
      -8
      -9
    AssociationProperty: PayPeriod
    AssociationPropertyMetadata:
      表示:
        条件:
          Fn::Not:
            Fn:: 等しい:
              - ${PayType}
              -PostPaid
  LoadBalancerSpec:
    データ型:Strig
    アソシエーションプロパティ: ALIYUN::SLB::Instance::InstanceType
    ラベル:
      en: LoadBalancer仕様
       
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
  帯域幅:
    説明:
       
      en: 'Value range: [0, 1000], Unit: Mbps.'
    デフォルト: 10
    MaxValue: 1000
    ラベル:
       
      en: CLB Elastic IP帯域幅
    MinValue: 1
    タイプ: 数
リソース:
  Vpc:
    タイプ: ALIYUN::ECS::VPC
    プロパティ:
      CidrBlock:
        参照: VpcCidrBlock
      VpcName:
        参照: ALIYUN::StackName
  VSwitch:
    タイプ: ALIYUN::ECS::VSwitch
    プロパティ:
      VSwitchName:
        参照: ALIYUN::StackName
      VpcId:
        参照: Vpc
      ZoneId:
        参照: ZoneId
      CidrBlock:
        参照: VSwitchCidrBlock
  EcsSecurityGroup:
    タイプ: ALIYUN::ECS::SecurityGroup
    プロパティ:
      SecurityGroupName:
        参照: ALIYUN::StackName
      VpcId:
        参照: Vpc
      SecurityGroupIngress:
        -PortRange: 80/80
          優先度: 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: イントラネット
  WaitCondition:
    タイプ: ALIYUN::ROS::WaitCondition
    プロパティ:
      カウント: 1
      ハンドル:
        参照: WaitConditionHandle
      タイムアウト: 300
  WaitConditionHandle:
    タイプ: ALIYUN::ROS::WaitConditionHandle
  EcsInstanceGroup:
    タイプ: ALIYUN::ECS::InstanceGroup
    プロパティ:
      InstanceChargeType:
        参照: PayType
      PeriodUnit:
        参照: PayPeriodUnit
      期間:
        参照: PayPeriod
      IoOptimized: 最適化
      SystemDiskCategory:
        参照: SystemDiskCategory
      SystemDiskSize:
        参照: SystemDiskSize
      DiskMappings:
        -カテゴリ:
            参照: DataDiskCategory
          サイズ:
            参照: DataDiskSize
      VpcId:
        参照: Vpc
      SecurityGroupId:
        参照: EcsSecurityGroup
      VSwitchId:
        参照: VSwitch
      MaxAmount: 2
      ImageId: centos_7
      InstanceType:
        参照: EcsInstanceType
      Password:
        参照: InstancePassword
      AllocatePublicIP: false
      UserData:
        Fn:: サブ:
          - |
            #!/bin/bash
            # ディスクを /disk1ディレクトリにアタッチします。
            cat >> /root/InitDataDisk.sh << EOF
            #!/bin/bash
            エコー "p
            n
            p
            w
            "| fdisk -u /dev/vdb
            EOF
            /bin/bash /root/InitDataDisk.sh
            rm -f /root/InitDataDisk.sh
            rm -f InitDataDisk.sh
            mkfs -t ext4 /dev/vdb1
            cp /etc/fstab /etc/fstab.bak
            mkdir /disk1
            echo 'blkid /dev/vdb1 | awk '{print $2}' | sed 's/\\\ "// g'' /disk1 ext4デフォルト0 >> /etc/fstab
            mount -a
            # インストールスクリプトを設定します。
            yum install -y nginx
            # スタートアップスクリプトを設定します。
            systemctlがnginx.serviceを開始
            # スクリプトの実行が成功すると、ROSはWaitConditionHandleをコールバックし、WaitConditionに失敗します。 
            ${CurlCli} -d "{\" Data\" : \" Success\", \" status\" : \" SUCCESS\"}"
          -CurlCli:
              Fn::GetAtt:
                -WaitConditionHandle
                -CurlCli
  Slb:
    タイプ: ALIYUN::SLB::LoadBalancer
    プロパティ:
      VpcId:
        参照: Vpc
      VSwitchId:
        参照: VSwitch
      LoadBalancerName:
        Fn::Sub: slb-${ALIYUN::StackName}
      PayType:
        参照: PayType
      PricingCycle:
        参照: PayPeriodUnit
      期間:
        参照: PayPeriod
      AddressType: イントラネット
      LoadBalancerSpec:
        参照: LoadBalancerSpec
      オートペイ: true
  EipSlbAddress:
    タイプ: ALIYUN::VPC::EIP
    プロパティ:
      名前:
        参照: ALIYUN::StackName
      InternetChargeType: PayByTraffic
      帯域幅:
        参照: 帯域幅
  EipSlbAddressAssociation:
    タイプ: ALIYUN::VPC::EIPAssociation
    プロパティ:
      InstanceId:
        参照: Slb
      AllocationId:
        参照: EipSlbAddress
  SlbBackendServerAttachment:
    依存:
      -EcsInstanceGroup
    タイプ: ALIYUN::SLB::BackendServerAttachment
    プロパティ:
      BackendServerList:
        Fn::GetAtt:
          -EcsInstanceGroup
          -InstanceIds
      LoadBalancerId:
        参照: Slb
      BackendServerWeightList:
        -100
        -50
  SlbListener:
    依存:
      -Slb
    タイプ: ALIYUN::SLB:: リスナー
    プロパティ:
      永続性:
        CookieTimeout: 60
        StickySession: 'on'
        PersistenceTimeout: 180
        XForwardedFor: 'off'
        StickySessionType: 挿入
      ListenerPort: 80
      帯域幅: -1
      ヘルスチェック:
        HttpCode: http_2xx、http_3xx、http_4xx、http_5xx
        HealthCheckType: tcp
        UnhealthyThreshold: 3
        タイムアウト: 5
        HealthyThreshold: 3
        ポート: 80
        URI: /
        インターバル: 2
      LoadBalancerId:
        参照: Slb
      BackendServerPort: 80
      プロトコル: tcp
出力:
  エンドポイント:
    説明:
       
      en: パブリックIPアドレス
    値:
      Fn:: サブ:
        -http://${ServerAddress}
        -ServerAddress:
            Fn::GetAtt:
              -EipSlbAddress
              -EipAddress
メタデータ:
  ALIYUN::ROS:: インターフェース:
    ParameterGroups:
      -パラメータ:
          -ZoneId
          -VpcCidrBlock
          -VSwitchCidrBlock
        ラベル:
          default:
             
            en: 基本的なネットワーク構成
      -パラメータ:
          -PayType
          -PayPeriodUnit
          -PayPeriod
        ラベル:
          default:
            en: PayType設定
             
      -パラメータ:
          -EcsInstanceType
          -SystemDiskCategory
          -SystemDiskSize
          -DataDiskCategory
          -DataDiskSize
          -InstancePassword
        ラベル:
          default:
            en: インスタンスの設定
             
      -パラメータ:
          -LoadBalancerSpec
          -帯域幅
        ラベル:
          default:
            en: CLB設定