このトピックでは、ROS (Resource Orchestration Service) テンプレートの作成方法について説明します。 この例では、データ初期化のためにElastic Compute Service (ECS) インスタンスをApsaraDB RDSインスタンスに接続するために使用されるリソースを宣言するテンプレートが作成されます。
前提条件
ROSテンプレートの構文と構造に精通しています。 詳細については、「テンプレートの使用開始方法」をご参照ください。
シナリオ例
仮想プライベートクラウド (VPC) にECSインスタンスとApsaraDB RDSインスタンスを作成し、ECSインスタンスからApsaraDB RDSデータベースに関する接続情報を取得してデータを初期化する場合。
使用上の注意
上記のリソースのリソースタイプを表示して、各リソースプロパティの詳細を取得できます。 詳細については、「リソースタイプの表示」をご参照ください。
リソースタイプは、タイプ、必要かどうか、編集可能かどうかなど、リソースのプロパティを宣言します。 プロパティが必要な場合は、テンプレートの [リソース] セクションの [プロパティ] 部分でプロパティを宣言する必要があります。 プロパティがオプションの場合は、プロパティを空のままにすることができます。 プロパティが編集可能な場合は、スタックテンプレートのクラウドリソースにプロパティを指定した後で、新しいテンプレートのプロパティを変更できます。 次に、新しいテンプレートを使用してスタックとリソースを更新できます。 それ以外の場合は、プロパティを変更できません。
テンプレートの作成
リソースタイプのドキュメントを参照して、ニーズに最適なリソースタイプを見つけることができます。 詳細については、「サービス別のリソースタイプのリスト」をご参照ください。
この例では、次のリソースタイプが使用されています。ALIYUN::ECS::VPC(VPCを作成) 、ALIYUN::ECS:: インスタンス(ECSインスタンスを作成) 、ALIYUN::RDS::DBInstance(ApsaraDB RDSインスタンスを作成) 、ALIYUN::ECS::VSwitch(ECSインスタンスが接続されているvSwitchを作成します) 、ALIYUN::ECS::SecurityGroup(セキュリティグループを作成) 、およびALIYUN::ECS::RunCommand(データを初期化するコマンドを実行します) 。
作成するテンプレートの [リソース] セクションで、上記のリソースタイプを指定できます。
リソースの指定とリソースの関連付け
基本ネットワークリソースの指定
テンプレートで、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: イントラネット
データベースリソースの指定
テンプレートでは、DBInstance
およびDBAccount
のデータベースリソースを指定できます。 次の操作を実行します。
リソースのプロパティ値を返すには、Fn::GetAtt関数を使用します。 次のサンプルテンプレートフラグメントでは、DBAccount
のDBInstanceId
の値が返されます。 詳細については、「Fn::GetAtt」をご参照ください。
リソース:
DBInstance:
タイプ: ALIYUN::RDS::DBInstance
プロパティ:
ZoneId:
Fn:: 選択:
-'0'
-Fn::GetAZs:
参照: ALIYUN:: リージョン
VpcId:
参照: Vpc
VSwitchId:
参照: VSwitch
エンジン: MySQL
エンジニアバージョン: '8.0'
DBInstanceClass: mysql.n4.medium.2c
DBInstanceStorage: 10
マルチAZ: true
DBInstanceNetType: イントラネット
DBMappings:
-CharacterSetName: utf8
DBName: 従業員
SecurityIPList: 0.0.0.0/0
DBAccount:
タイプ: ALIYUN::RDS:: アカウント
依存:
-DBInstance
プロパティ:
DBInstanceId:
Fn::GetAtt:
-DBInstance
-DBInstanceId
AccountPassword:
参照: DBPassword
AccountType: スーパー
AccountName: rdsuser
ECSリソースの指定
テンプレートでは、EcsInstance
およびInstanceRunCommand
のECSリソースを指定できます。 次の操作を実行します。
Fn::Sub関数を使用して、入力文字列の変数を実行するコマンドに置き換えます。 次のサンプルテンプレートフラグメントでは、コマンドはInstanceRunCommand
のCommandContent
の値で指定されています。 詳細については、「Fn::Sub」をご参照ください。
サンプルテンプレートフラグメント内の初期化されたデータは、MySQLによって提供されるテストデータである。 テストデータのダウンロード時にネットワークの安定性を確保するため、操作を実行する前にデータをObject Storage Service (OSS) バケットに保存することを推奨します。
リソース:
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
InstanceRunCommand:
タイプ: ALIYUN::ECS::RunCommand
プロパティ:
CommandContent:
Fn:: サブ:
- |
#!/bin/bash
yum -y install holland-mysqldump.noarch unzip
wget -P /tmp https://ros-userdata-resources.oss-cn-beijing.aliyuncs.com/MySQL/test_db-master.zip
解凍 /tmp/test_db-master.zip -d /tmp /
mysql -h${DBConnectString} -p3306 -urdsuser -p${DBPassword} < /tmp/test_db-master /従業員. sql
-DBConnectString:
Fn::GetAtt:
-DBInstance
-InnerConnectionString
DBPassword:
参照: DBPassword
タイプ: RunShellScript
InstanceIds:
-Fn::GetAtt:
-EcsInstance
-InstanceId
タイムアウト: '300'
完全なサンプルテンプレート
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
DBPassword:
NoEcho: true
データ型:Strig
ラベル:
en: DBパスワード
リソース:
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: イントラネット
DBInstance:
タイプ: ALIYUN::RDS::DBInstance
プロパティ:
ZoneId:
Fn:: 選択:
-'0'
-Fn::GetAZs:
参照: ALIYUN:: リージョン
VpcId:
参照: Vpc
VSwitchId:
参照: VSwitch
エンジン: MySQL
エンジニアバージョン: '8.0'
DBInstanceClass: mysql.n4.medium.2c
DBInstanceStorage: 10
マルチAZ: true
DBInstanceNetType: イントラネット
DBMappings:
-CharacterSetName: utf8
DBName: 従業員
SecurityIPList: 0.0.0.0/0
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
アカウント:
タイプ: ALIYUN::RDS:: アカウント
依存:
-DBInstance
プロパティ:
DBInstanceId:
Fn::GetAtt:
-DBInstance
-DBInstanceId
AccountPassword:
参照: DBPassword
AccountType: スーパー
AccountName: rdsuser
InstanceRunCommand:
タイプ: ALIYUN::ECS::RunCommand
依存:
-アカウント
プロパティ:
CommandContent:
Fn:: サブ:
- |
#!/bin/bash
yum -y install holland-mysqldump.noarch unzip
wget -P /tmp https://ros-userdata-resources.oss-cn-beijing.aliyuncs.com/MySQL/test_db-master.zip
解凍 /tmp/test_db-master.zip -d /tmp /
mysql -h${DBConnectString} -p3306 -urdsuser -p${DBPassword} < /tmp/test_db-master /従業員. sql
-DBConnectString:
Fn::GetAtt:
-DBInstance
-InnerConnectionString
DBPassword:
参照: DBPassword
タイプ: RunShellScript
InstanceIds:
-Fn::GetAtt:
-EcsInstance
-InstanceId
タイムアウト: '300'
テンプレートにパラメーターグループを追加し、フィルター条件に基づいてパラメーターのオプション値を表示します
上記のサンプルテンプレートは、複数のリソースとその関連付けを宣言します。 EcsInstance
のInstanceType
とSystemDiskCategory
の値、およびDBInstanceのDBInstanceClass
の値はリテラル値です。 異なるリージョンでスタックを作成するたびに、テンプレート構造を変更し、プロパティ値を変更する必要があります。
この場合、[パラメーター] セクションを追加して、テンプレートの柔軟性と再利用性を向上させることができます。
テンプレートへのパラメーターグループの追加
メタデータセクションをテンプレートに追加して、パラメーターセクションで定義されているパラメーターをグループ化し、各グループのラベルを定義できます。
リソースまたはリソースパラメータごとにパラメータを分類できます。 次の表に、上記のサンプルテンプレートに基づいて追加されたパラメーターグループを示します。 この例では、パラメータは、リソース名またはリソースパラメータ名によって分類される。
パラメーターグループ | リソース名 | リソースパラメーター名 |
基本的なネットワーク設定 |
|
|
データベースの構成 |
|
|
ECS設定 |
|
|
フィルター条件に基づいたパラメーターのオプション値の表示
パラメーターのフィルター条件を指定し、パラメーター値をROSコンソールで選択したフィルター条件に関連付ける場合は、テンプレートでAssociationPropertyとAssociationPropertyMetadataを指定できます。 この例では、ZoneIdの値に基づいてECSInstanceTypeパラメーターのオプションの値が表示されます。 ECSInstanceTypeでAssociationPropertyとAssociationPropertyMetadataを指定するには、次の操作を実行します。ROSの公式ドキュメントで、ALIYUN::ECS::Instanceを使用して、ECSInstanceTypeでサポートされているAssociationPropertyの値を照会します。 次の値が照会されます: ALIYUN::ECS::Instance::InstanceType。 次に、AssociationPropertyがALIYUN::ECS::Instance::InstanceTypeに設定され、ZoneIdがフィルタ条件として使用されている場合に、AssociationPropertyMetadataの値を照会します。 公式ドキュメントの詳細については、「AssociationPropertyおよびAssociationPropertyMetadata」をご参照ください。
完全なサンプルテンプレート
ROSTemplateFormatVersion: '2015-09-01'
説明: { }
パラメータ:
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: <font color='blue'><b>1. モデルを選択する前に、モデルの下で現在利用可能なゾーンが在庫にあることを確認してください。一部のモデルは事前に報告する必要があります </b></font> <br><font color='blue'><b>2. オプションモデルのリスト </font>]<br></font>[ecs.c5.large <font color='green'>2vCPU 4GiB Intranet bandwidth1Gbps in-receplingpackstingpacks <PPfts </Pfont]></b>[ecs.c5.xlarge <font color='green'>4vCPU 8GiBイントラネット帯域幅1.5Gbpsグリッド送信および受信パッケージ50MillionPPS</font>]<br></b>[ecs.c5.2xlarge <font color='green'>8vCPU 16GiBイントラネット帯域幅帯域幅2.5Gbps] </グリッド送信 /受信用
ラベル:
en: インスタンスタイプ
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${VSwitchZoneId}
ECSDiskSize:
タイプ: 数
説明:
en: 'インスタンスシステムディスクのサイズ (GiB単位) 。 値の範囲: 40〜500'
ラベル:
en: システムディスク容量
MinValue: 40
MaxValue: 500
デフォルト: 40
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: システムディスクタイプ
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
DBInstanceClass:
ラベル:
en: DBインスタンスクラス
AssociationProperty: ALIYUN::RDS::Instance::InstanceType
AssociationPropertyMetadata:
エンジン: MySQL
ZoneId: ${VSwitchZoneId}
データ型:Strig
説明:
en: 'データベースエンジンのタイプと利用可能なエリアサポートに基づいてインスタンス仕様を選択します。<br> 詳細: <a href='https:// www.alibabacloud.com/help/doc-detail/26312.html'' target=''_blank''><b><font color=''blue''> インスタンス仕様シート </font></b></a>'
DBInstanceStorage:
ラベル:
en: ストレージ
タイプ: 数
説明:
en: RDSインスタンスのサイズ範囲は20〜2000で、5単位で増分します。
MinValue: 20
MaxValue: 2000
ConstraintDescription:
en: RDSインスタンスのサイズ範囲は20〜2000で、5単位で増分します。
デフォルト: 200
DBName:
データ型:Strig
ラベル:
en: DB名
ConstraintDescription:
en: 文字で始まり、英数字のみを含める必要があります。
MinLength: 1
MaxLength: 64
デフォルト: 従業員
DBUsername:
データ型:Strig
説明:
en: データベースインスタンスのプライマリアカウント名。
ConstraintDescription:
en: 2〜16文字の小文字で構成され、下線が引かれます。 文字で始まり、英数字で終わる必要があります
ラベル:
en: DBユーザー名
デフォルト: rdsuser
MaxLength: 16
MinLength: 2
DBPassword:
NoEcho: true
データ型:Strig
ラベル:
en: DBパスワード
リソース:
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: '-1/-1'
優先度: 1
IpProtocol: すべて
NicType: イントラネット
SourceCidrIp: '0.0.0.0/0'
DBInstance:
タイプ: ALIYUN::RDS::DBInstance
プロパティ:
VpcId:
参照: Vpc
VSwitchId:
参照: VSwitch
エンジン: MySQL
エンジニアバージョン: '8.0'
DBInstanceClass:
参照: DBInstanceClass
DBInstanceStorage:
参照: DBInstanceStorage
DBInstanceNetType: イントラネット
DBMappings:
-CharacterSetName: utf8
DBName:
参照: DBName
SecurityIPList: 0.0.0.0/0
DBAccount:
タイプ: ALIYUN::RDS:: アカウント
依存:
-DBInstance
プロパティ:
DBInstanceId:
Fn::GetAtt:
-DBInstance
-DBInstanceId
AccountPassword:
参照: DBPassword
AccountType: スーパー
AccountName:
参照: DBUsername
EcsInstance:
タイプ: ALIYUN::ECS::Instance
プロパティ:
VpcId:
参照: Vpc
SecurityGroupId:
参照: EcsSecurityGroup
VSwitchId:
参照: VSwitch
ImageId: centos_7
AllocatePublicIP: true
InstanceType:
参照: ECSInstanceType
SystemDiskSize:
参照: ECSDiskSize
SystemDiskCategory:
参照: ECSDiskCategory
Password:
参照: EcsInstancePassword
InstanceRunCommand:
タイプ: ALIYUN::ECS::RunCommand
依存:
-DBAccount
プロパティ:
CommandContent:
Fn:: サブ:
- |
#!/bin/bash
yum -y install holland-mysqldump.noarch unzip
wget -P /tmp https://ros-userdata-resources.oss-cn-beijing.aliyuncs.com/MySQL/test_db-master.zip
解凍 /tmp/test_db-master.zip -d /tmp /
mysql -h${DBConnectString} -p3306 -u${DBUsername} -p${DBPassword} < /tmp/test_db-master /従業員. sql
-DBConnectString:
Fn::GetAtt:
-DBInstance
-InnerConnectionString
DBUsername:
参照: DBUsername
DBPassword:
参照: DBPassword
タイプ: RunShellScript
InstanceIds:
-Fn::GetAtt:
-EcsInstance
-InstanceId
タイムアウト: '500'
メタデータ:
ALIYUN::ROS:: インターフェース:
ParameterGroups:
-パラメータ:
-VSwitchZoneId
-VpcCidrBlock
-VSwitchCidrBlock
ラベル:
default:
en: 基本的なネットワーク構成
-パラメータ:
-ECSInstanceType
-ECSDiskSize
-ECSDiskCategory
-EcsInstancePassword
ラベル:
default:
en: インスタンス
-パラメータ:
-DBInstanceClass
-DBInstanceStorage
-DBName
-DBUsername
-DBPassword
ラベル:
default:
en: データベース