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

Resource Orchestration Service:ECSインスタンスをApsaraDB RDSインスタンスに接続してデータを初期化する

最終更新日:Jan 16, 2025

このトピックでは、ROS (Resource Orchestration Service) テンプレートの作成方法について説明します。 この例では、データ初期化のためにElastic Compute Service (ECS) インスタンスをApsaraDB RDSインスタンスに接続するために使用されるリソースを宣言するテンプレートが作成されます。

前提条件

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

シナリオ例

仮想プライベートクラウド (VPC) にECSインスタンスとApsaraDB RDSインスタンスを作成し、ECSインスタンスからApsaraDB RDSデータベースに関する接続情報を取得してデータを初期化する場合。2023-04-21_10-40-06

使用上の注意

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

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

テンプレートの作成

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

この例では、次のリソースタイプが使用されています。ALIYUN::ECS::VPC(VPCを作成) 、ALIYUN::ECS:: インスタンス(ECSインスタンスを作成) 、ALIYUN::RDS::DBInstance(ApsaraDB RDSインスタンスを作成) 、ALIYUN::ECS::VSwitch(ECSインスタンスが接続されているvSwitchを作成します) 、ALIYUN::ECS::SecurityGroup(セキュリティグループを作成) 、およびALIYUN::ECS::RunCommand(データを初期化するコマンドを実行します) 。

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

リソースの指定とリソースの関連付け

基本ネットワークリソースの指定

テンプレートで、VpcVSwitch、およびEcsSecurityGroupの基本ネットワークリソースを指定します。 次の操作を実行します。

  • 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: イントラネット 

データベースリソースの指定

テンプレートでは、DBInstanceおよびDBAccountのデータベースリソースを指定できます。 次の操作を実行します。

リソースのプロパティ値を返すには、Fn::GetAtt関数を使用します。 次のサンプルテンプレートフラグメントでは、DBAccountDBInstanceIdの値が返されます。 詳細については、「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関数を使用して、入力文字列の変数を実行するコマンドに置き換えます。 次のサンプルテンプレートフラグメントでは、コマンドはInstanceRunCommandCommandContentの値で指定されています。 詳細については、「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' 

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

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

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

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

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

リソースまたはリソースパラメータごとにパラメータを分類できます。 次の表に、上記のサンプルテンプレートに基づいて追加されたパラメーターグループを示します。 この例では、パラメータは、リソース名またはリソースパラメータ名によって分類される。

パラメーターグループ

リソース名

リソースパラメーター名

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

VpcVSwitch、およびEcsSecurityGroup

VSwitchZoneIdVpcCidrBlock、およびVSwitchCidrBlock

データベースの構成

DBInstanceおよびDBAccount

DBInstanceClassDBInstanceStorageDBNameDBUsername、およびDBPassword

ECS設定

EcsInstanceおよびInstanceRunCommand

ECSInstanceTypeECSDiskSizeECSDiskCategoryEcsInstancePassword

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

パラメーターのフィルター条件を指定し、パラメーター値を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: データベース