このトピックでは、ROS (Resource Orchestration Service) テンプレートの作成プロセスについて説明します。 このトピックでは、Elastic Compute Service (ECS) インスタンスグループを作成し、インスタンスグループをClassic Load Balancer (CLB) インスタンスに接続するために使用されるリソースを宣言するテンプレートが作成されます。
前提条件
ROSテンプレートの構文と構造に精通しています。 詳細については、「テンプレートの使用開始方法」をご参照ください。
サンプルシナリオ
このシナリオでは、ECSインスタンスグループが仮想プライベートクラウド (VPC) に作成され、Nginxサービスがインスタンスグループにデプロイされ、インスタンスグループがCLBインスタンスにアタッチされます。

使用上の注意
上記のリソースのリソースタイプを表示して、各リソースプロパティの詳細を取得できます。 詳細については、「リソースタイプの表示」をご参照ください。
リソースタイプは、タイプ、必要かどうか、編集可能かどうかなど、リソースのプロパティを宣言します。 プロパティが必要な場合は、テンプレートの [リソース] セクションの [プロパティ] 部分でプロパティを宣言する必要があります。 プロパティがオプションの場合は、プロパティを空のままにすることができます。 プロパティが編集可能な場合は、スタックテンプレートのクラウドリソースにプロパティを指定した後で、新しいテンプレートのプロパティを変更できます。 次に、新しいテンプレートを使用してスタックとリソースを更新できます。 それ以外の場合は、プロパティを変更できません。
テンプレートの作成
シナリオに適したリソースタイプを見つけるには、リソースタイプのドキュメントを参照してください。 詳細については、「サービス別のリソースタイプのリスト」をご参照ください。
サンプルシナリオでは、次のリソースタイプを使用してリソースを作成する必要があります。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の定義
テンプレートにVpc、VSwitch、EcsSecurityGroupの基本ネットワークリソースを定義します。
Ref関数とALIYUN::StackName疑似パラメーターを使用してスタック名を取得します。 次に、プロパティをRef: ALIYUN::StackNameに設定して、プロパティ値をスタック名に関連付けます。 次のコードスニペットでは、
VpcのVpcNameの値とVSwitchのVSwitchNameの値がスタック名に関連付けられています。 詳細については、「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関数を使用します。 次のコードスニペットでは、
WaitConditionHandleのCurlCliの値が返されます。 詳細については、「Functions」をご参照ください。Fn::Sub関数を使用して、入力文字列の変数を指定した値に置き換えます。 次のコードスニペットでは、
EcsInstanceGroupのUserDataの ${CurlCli} がCurlCliに置き換えられています。 詳細については、「Functions」をご参照ください。ALIYUN::ROS::WaitConditionとALIYUN::ROS::WaitConditionHandleを使用して、EcsInstanceGroupのデータ初期化を制御します。
シグナルを待機するために使用されるALIYUN::ROS::WaitConditionリソースを作成します。
シグナルの受信に使用するALIYUN::ROS::WaitConditionHandleリソースを作成します。
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の定義
EcsInstanceGroup、Slb、およびSlbBackendServerAttachmentのリソースをテンプレートに定義します。
SlbBackendServerAttachmentを使用して、ECSインスタンスグループをCLBインスタンスにアタッチします。 詳細については、「ALIYUN::SLB::BackendServerAttachment」をご参照ください。ALIYUN::SLB::BackendServerAttachmentリソースタイプには、次のルールが適用されます。
BackendServerWeightListを空のままにすると、BackendServerListで指定されたインスタンス (バックエンドサーバー) に含まれる各ECSインスタンスの重み値が100されます。BackendServerWeightListで指定された重み値の数がBackendServerListで指定されたインスタンスの数より少ない場合、過剰なECSインスタンスには最後の重み値が割り当てられます。DependsOnプロパティを使用して、依存リソースが作成された後にのみリソースが作成されるように指定します。 リソースにDependsOnプロパティを追加する場合、リソースはDependsOnプロパティで指定されたリソースが作成された後にのみ作成されます。 詳細については、「DependsOn」をご参照ください。
リソースのプロパティ値を返すには、Fn::GetAtt関数を使用します。 次のコードスニペットでは、
EcsInstanceGroupのInstanceIdsの値が返されます。 詳細については、「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プロパティの値は、特定のパラメーターの値を参照します。 異なるリージョンでスタックを作成するたびに、テンプレート構造を変更し、プロパティ値を変更する必要があります。
この場合、[パラメーター] セクションを追加して、テンプレートの柔軟性と再利用性を向上させることができます。
テンプレートへのパラメーターグループの追加
メタデータセクションをテンプレートに追加して、パラメーターセクションで定義されているパラメーターをグループ化し、各グループのラベルを定義できます。
テンプレートでリソースとパラメーターを定義した後、リソースまたはリソースパラメーターごとにパラメーターをグループ化できます。
次の表に、完全なサンプルテンプレートに基づいて追加されるパラメーターグループを示します。 この例では、パラメーターはリソース名またはリソースパラメーター名でグループ化されています。
パラメーターグループ | リソース名 | リソースパラメーター名 |
基本的なネットワーク設定 |
|
|
CLB設定 |
|
|
ECS設定 |
|
|
フィルター条件に基づいてパラメーターの有効な値を表示する
パラメーターのフィルター条件を指定し、パラメーター値を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設定