このトピックでは、ROS (Resource Orchestration Service) テンプレートの作成プロセスについて説明します。 このトピックでは、スケーリンググループを使用して複数のECS (Elastic Compute Service) インスタンスを管理するために使用されるリソースを宣言するテンプレートが作成されます。
前提条件
ROSテンプレートの構文と構造に精通しています。 詳細については、「テンプレートの使用開始方法」をご参照ください。
シナリオ例
このシナリオでは、スケーリンググループが仮想プライベートクラウド (VPC) に作成され、スケーリングルールがグループに設定されます。 ECSインスタンスが作成され、スケーリンググループに追加されます。 これにより、システムはスケーリングルールに基づいてスケーリンググループ内のECSインスタンスをスケーリングします。
使用上の注意
上記のリソースのリソースタイプを表示して、各リソースプロパティの詳細を取得できます。 詳細については、「リソースタイプの表示」をご参照ください。
リソースタイプは、タイプ、必要かどうか、編集可能かどうかなど、リソースのプロパティを宣言します。 プロパティが必要な場合は、テンプレートの [リソース] セクションの [プロパティ] 部分でプロパティを宣言する必要があります。 プロパティがオプションの場合は、プロパティを空のままにすることができます。 プロパティが編集可能な場合は、スタックテンプレートのクラウドリソースにプロパティを指定した後で、新しいテンプレートのプロパティを変更できます。 次に、新しいテンプレートを使用してスタックとリソースを更新できます。 それ以外の場合は、プロパティを変更できません。
テンプレートの作成
リソースタイプのドキュメントを参照して、ニーズに最適なリソースタイプを見つけることができます。 詳細については、「サービス別のリソースタイプのリスト」をご参照ください。
サンプルシナリオでは、次のリソースタイプを使用してリソースを作成する必要があります。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 (スケーリンググループを有効化) を指定する必要があります。
リソースを定義し、テンプレート内のリソースを関連付ける
基本的なネットワークリソースの定義
テンプレートにVpc
、VSwitch
、EcsSecurityGroup
の基本ネットワークリソースを定義します。
Ref関数とALIYUN::StackName疑似パラメーターを使用してスタック名を取得します。 次に、プロパティをRef: ALIYUN::StackNameに設定して、プロパティ値をスタック名に関連付けます。 次のコードスニペットでは、
Vpc
のVpcName
の値とVSwitch
のVSwitchName
の値がスタック名に関連付けられています。 詳細については、「Ref」および「ALIYUN::StackName」をご参照ください。スタックが存在するリージョンの最初のゾーンIDを取得するには、ALIYUN::Region疑似パラメーターと共にFn::SelectおよびFn::GetAZs関数を使用します。 次のコードスニペットでは、
VSwitch
のZoneId
の値が取得されます。 詳細については、「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関数を使用して、テンプレート内のリソースの論理名を参照します。 次のコードスニペットでは、VpcId
のVpc
、SecurityGroupId
のEcsSecurityGroup
、VSwitchId
のVSwitch
が参照されています。 詳細については、「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
スケーリンググループのリソースの定義
テンプレートにEssInstanceScalingGroup
、EssInstanceScalingGroupEnable
、およびEssInstanceScalingConfiguration
のスケーリンググループリソースを定義します。
リソースのプロパティ値を返すには、Fn::GetAtt関数を使用します。 次のコードスニペットでは、
EssInstanceScalingGroupEnable
のInstanceIds
の値が返されます。 詳細については、「Fn::GetAtt」をご参照ください。Fn::Sub関数を使用して、入力文字列の変数を指定した値に置き換えます。 次のコードスニペットでは、
EssInstanceScalingConfiguration
のScalingConfigurationName
の値が代入されます。 詳細については、「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
テンプレートにパラメーターグループを追加およびフィルター条件に基づいてパラメーターのオプション値を表示
上記のサンプルテンプレートは、複数のリソースとその関連付けを宣言します。 EcsInstance
のInstanceType
とSystemDiskCategory
の値はリテラル値です。 異なるリージョンでスタックを作成するたびに、テンプレート構造を変更し、プロパティ値を変更する必要があります。
この場合、[パラメーター] セクションを追加して、テンプレートの柔軟性と再利用性を向上させることができます。
テンプレートへのパラメーターグループの追加
メタデータセクションをテンプレートに追加して、パラメーターセクションで定義されているパラメーターをグループ化し、各グループのラベルを定義できます。
テンプレートでリソースとパラメーターを定義した後、リソースまたはリソースパラメーターごとにパラメーターをグループ化できます。 次の表に、完全なサンプルテンプレートに基づいて追加されるパラメーターグループを示します。 この例では、パラメーターはリソース名またはリソースパラメーター名でグループ化されています。
パラメーターグループ | リソース名 | リソースパラメーター名 |
基本的なネットワーク設定 |
|
|
ECS設定 |
|
|
スケーリンググループの設定 |
|
|
フィルター条件に基づいたパラメーターのオプション値の表示
パラメーターのフィルター条件を指定し、パラメーター値を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設定