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

Resource Orchestration Service:モジュールの使用

最終更新日:Jan 16, 2025

モジュールは、別のモジュールまたはテンプレートで使用できます。このトピックでは、モジュールの使用方法と、モジュールを使用する際の考慮事項について説明します。

前提条件

モジュールの構成を指定する

モジュールを使用するには、モジュールをリソースと見なし、以下の操作を実行する必要があります。

  • テンプレートまたはモジュールの Resources セクションにモジュールを含めます。

  • モジュールのバージョンを指定します。

  • モジュールに必要な構成を指定します。

モジュールのバージョンを指定する

Version を使用して、モジュールのバージョンを指定します。Version の有効な値:

  • カスタム値: v+数値 形式のモジュールのカスタムバージョン。例: v1 および v10

    パブリックモジュールを使用する場合は、バージョンにカスタム値を指定することをお勧めします。

  • default: モジュールのデフォルトバージョン。

    モジュールを削除しない限り、デフォルトバージョンは使用可能なままです。

    ROS API オペレーションを呼び出すか、ROS コンソールを使用して、カスタムモジュールのデフォルトバージョンを指定できます。詳細については、「SetResourceType」および「モジュールのデフォルトバージョンの変更」をご参照ください。

    カスタムモジュールを使用する場合は、バージョンを default に設定することをお勧めします。

  • latest: モジュールの最新バージョン。

    モジュールを削除しない限り、最新バージョンは使用可能なままです。

    モジュールの新しいバージョンを作成するか、モジュールから最新バージョンを削除すると、モジュールの最新バージョンが変更されます。

    モジュールを開発またはデバッグする場合は、バージョンを latest に設定することをお勧めします。

モジュールのプロパティを指定する

モジュールパラメータを使用すると、カスタム値を、それを含むテンプレートまたはモジュールからモジュールに渡すことができます。その後、モジュールは、その値を使用して、そのリソースまたは子モジュールのプロパティを構成できます。モジュールパラメータが指定されておらず、Default でデフォルト値が指定されている場合は、デフォルト値が使用されます。

テンプレートパラメータを使用してモジュールプロパティを指定する

テンプレートパラメータのカスタム値を指定し、テンプレートパラメータを使用してモジュールのプロパティを構成できます。このようにして、カスタム値がモジュールに渡されます。テンプレートパラメータの定義方法の詳細については、「パラメータ」をご参照ください。

テンプレートパラメーターからモジュールプロパティにカスタム値を渡すことができます。この例では、MODULE::My::VPC::SampleVpc リソースと VpcName テンプレートパラメーターを含むテンプレートが使用されます。VpcName テンプレートパラメーターは、モジュール内の VpcName プロパティを指定するために使用されます。

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  VpcName:
    Description: サンプル VPC の名前
    Type: String
Resources:
  MyVpc:
    Type: MODULE::My::VPC::SampleVpc
    Version: default
    Properties:
      VpcName:
        Ref: VpcName

親モジュールから子モジュールのプロパティを指定する

親モジュールとその子モジュールに同じパラメータが含まれている場合は、親モジュールから子モジュールのパラメータ値を指定できます。

この例では、MODULE::My::VPC::SampleVpcPrivate が子モジュールとして使用されます。モジュールでは、VpcName パラメータと CidrBlock パラメータが指定されており、ALIYUN::ECS::VPC リソースの VpcName プロパティと CidrBlock プロパティを構成します。次のサンプルコードは、子モジュールの例を示しています。

ROSTemplateFormatVersion: '2015-09-01'
Description: サンプル VPC。
Parameters:
  VpcName:
    Description: VPC の名前
    Type: String
  CidrBlock:
    Description: VPC の CIDR ブロック
    Type: String
Resources:
  Vpc:
    Type: ALIYUN::ECS::VPC
    Properties:
      VpcName:
        Ref: VpcName
      CidrBlock:
        Ref: CidrBlock

MODULE::My::VPC::SampleVpcPrivate モジュールは、MODULE::My::VPC::SampleVpc モジュールにネストされています。MODULE::My::VPC::SampleVpc 親モジュールでは、次の構成が追加され、子モジュールのパラメータを指定します。構成の下のサンプルコードは、親モジュールの例を示しています。

  • MODULE::My::VPC::SampleVpcPrivate 子モジュールの CidrBlock パラメータは 192.168.0.0/16 に設定されています。

  • VpcName パラメーターには、モジュールパラメーターが定義されています。この方法で、MODULE::My::VPC::SampleVpc モジュールを含むテンプレートまたはモジュールで VPC 名を指定できます。

ROSTemplateFormatVersion: '2015-09-01'
Description: サンプル VPC。
Parameters:
  VpcName:
    Description: VPC の名前
    Type: String
Resources:
  MyVpc:
    Type: MODULE::My::VPC::SampleVpcPrivate
    Version: default
    Properties:
      VpcName:
        Ref: VpcName
      CidrBlock: 192.168.0.0/16

モジュールパラメータの制約を指定する

モジュールパラメータは、制約の適用をサポートしていません。モジュールパラメータの制約を確認するには、制約で構成されたテンプレートパラメータを作成し、モジュールパラメータでテンプレートパラメータを参照する必要があります。

モジュールの条件を指定する

モジュール条件は、リソース条件と同じ方法で指定されます。モジュールの条件は、モジュール内のすべてのリソースと子モジュールに渡されます。条件の定義方法の詳細については、「条件」をご参照ください。

モジュールの依存関係を指定する

モジュールの依存関係は、リソースの依存関係と同じ方法で指定されます。モジュールの依存関係は、モジュール内のすべてのリソースと子モジュールに渡されます。依存関係の定義方法の詳細については、「DependsOn」をご参照ください。

モジュールの削除ポリシーを指定する

モジュールの削除ポリシーは、リソースの削除ポリシーと同じ方法で指定されます。モジュールの削除ポリシーは、モジュールに含まれていて、削除ポリシーが構成されていないすべてのリソースと子モジュールに渡されます。削除ポリシーの定義方法の詳細については、「DeletionPolicy」をご参照ください。

モジュールの構成を参照する

モジュール内のリソースを参照する

完全修飾論理名を使用して、モジュールに含まれるリソースを参照できます。モジュール内のリソースの完全修飾論理名は、次の要素と組み合わされます。

  • 要素 1: モジュールを含むテンプレートまたはモジュールでモジュールに指定された論理名。

  • 要素 2: モジュール内のリソースに指定された論理名。

完全修飾論理名の要素は、ピリオド(.) で区切ることができます。例: ModuleLogicalName.ResourceLogicalName および ParentModuleLogicalName.ChildModuleLogicalName.ResourceLogicalName

このようにして、Fn::GetAtt、Ref、および Fn::Sub 組み込み関数を使用して、モジュールの Resources セクション内のリソース、またはモジュールリソースのプロパティ値にアクセスできます。詳細については、「リソース」をご参照ください。

// Fn::GetAtt の例
GetAtt Example1:
  Fn::GetAtt:
    - ModuleLogicalName.ResourceLogicalName
    - AttributeName
GetAtt Example2:
  Fn::GetAtt:
    - ModuleLogicalName.ChildModuleLogicalName.ResourceLogicalName
    - AttributeName

// Ref の例
Ref Example1:
  Ref: ModuleLogicalName.ResourceLogicalName
Ref Example2:
  Ref: ModuleLogicalName.ChildModuleLogicalName.ResourceLogicalName

// Fn::Sub の例
Sub Example1:
  Fn::Sub: "${ModuleLogicalName.ResourceLogicalName}"
Sub Example2:
  Fn::Sub: "${ModuleLogicalName.ResourceLogicalName.AttributeName}"
Sub Example3:
  Fn::Sub: "${ModuleLogicalName.ChildModuleLogicalName.ResourceLogicalName}"
Sub Example4:
  Fn::Sub: "${ModuleLogicalName.ChildModuleLogicalName.ResourceLogicalName.AttributeName}"

この例では、次の構成が追加されています。

  • テンプレートは、モジュールリソースのプロパティを、テンプレート自体にあるリソースのプロパティとして参照します。

  • テンプレートは、モジュールリソースの出力を、テンプレート自体にある出力として参照します。

論理名が Vpc である ALIYUN::ECS::VPC リソースは、MODULE::My::VPC::SampleVpc モジュールに含まれています。Ref 組み込み関数を使用してリソース ID を参照し、Fn::GetAtt 組み込み関数を使用してリソース出力を参照するには、テンプレート内のモジュールの論理名とモジュール内のリソースの論理名を組み合わせて、リソースの完全修飾論理名を取得する必要があります。この例では、MyVpcVpc を組み合わせて、MyVpc.Vpc を取得します。

説明

モジュール内のリソースの論理名を取得するには、ROS コンソールでモジュールを表示します。詳細については、「カスタムモジュールの表示」および「パブリックモジュールの表示」をご参照ください。

Parameters:
  VpcName:
    Description: サンプル VPC の名前
    Type: String
Resources:
  MyVpc:
    Type: MODULE::My::VPC::SampleVpc
    Version: default
    Properties:
      VpcName:
        Ref: VpcName
  MyVsw:
    Type: ALIYUN::ECS::VSwitch
    Properties:
      VpcId:
        Ref: MyVpc.Vpc
      CidrBlock: 192.168.1.0/24
      ZoneId:
        Fn::Select:
          - '0'
          - Fn::GetAZs:
              Ref: ALIYUN::Region
      VSwitchName: sample_vsw
Outputs:
  VpcId:
    Value:
      Fn::GetAtt:
        - MyVpc.Vpc
        - VpcId

モジュール内の出力を参照する

モジュールをリソース、モジュール出力をリソースプロパティと見なし、Fn::GetAtt および Fn::Sub 組み込み関数を使用して、モジュールに含まれる出力にアクセスできます。詳細については、「出力」をご参照ください。

// Fn::GetAtt の例
GetAtt Example1:
  Fn::GetAtt:
    - ModuleLogicalName
    - OutputName
GetAtt Example2:
  Fn::GetAtt:
    - ModuleLogicalName.ChildModuleLogicalName
    - OutputName

// Fn::Sub の例
Sub Example1:
  Fn::Sub: "${ModuleLogicalName.OutputName}"
Sub Example2:
  Fn::Sub: "${ModuleLogicalName.ChildModuleLogicalName.OutputName}"

モジュール内の条件を参照する

モジュールを名前空間と見なしてモジュールの完全修飾名を取得し、Fn::IfFn::OrFn::And、および Fn::Not 組み込み関数を使用して、モジュールに含まれる条件にアクセスできます。詳細については、「条件」をご参照ください。

// Fn::If の例
If Example1:
  Fn::If:
    - ModuleLogicalName.ConditionName
    - true の値
    - false の値
If Example2:
  Fn::If:
    - ModuleLogicalName.ChildModuleLogicalName.ConditionName
    - true の値
    - false の値

// Fn::Or の例
Or Example:
  Fn::Or:
    - ModuleLogicalName.ConditionName
    - ModuleLogicalName.ChildModuleLogicalName.ConditionName

// Fn::And の例
And Example:
  Fn::And:
    - ModuleLogicalName.ConditionName
    - ModuleLogicalName.ChildModuleLogicalName.ConditionName

// Fn::Not の例
Not Example1:
  Fn::Not: ModuleLogicalName.ConditionName
Not Example2:
  Fn::Not: ModuleLogicalName.ChildModuleLogicalName.ConditionName

モジュール内のマッピングを参照する

モジュールを名前空間と見なしてモジュールの完全修飾名を取得し、Fn::FindInMap 組み込み関数を使用して、モジュールに含まれるマッピングにアクセスできます。詳細については、「マッピング」をご参照ください。

// Fn::FindInMap の例
FindInMap Example1:
  Fn::FindInMap:
    - ModuleLogicalName.MappingName
    - Key
    - SubKey
FindInMap Example2:
  Fn::FindInMap:
    - ModuleLogicalName.ChildModuleLogicalName.MappingName
    - Key
    - SubKey

モジュール内のリソースに依存する

モジュールに含まれるリソースに依存するには、リソースの完全修飾論理名を使用する必要があります。

Resource1:
  DependsOn: ModuleLogicalName.ResourceLogicalName
Resource2:
  DependsOn: ModuleLogicalName.ChildModuleLogicalName.ResourceLogicalName

モジュールに依存する

リソースがモジュールに依存している場合、またはモジュールが別のモジュールに依存している場合、依存モジュール内のすべてのリソースと依存モジュールの子モジュールは、リソースまたはモジュールの依存関係として機能します。モジュールに依存するには、モジュールの完全修飾論理名を使用する必要があります。

Resource1:
  DependsOn: ModuleLogicalName
Resource2:
  DependsOn: ModuleLogicalName.ChildModuleLogicalName

考慮事項

次のセクションでは、モジュールを使用する際の考慮事項について説明します。

  • モジュールは無料です。スタックに解決されるリソースに対してのみ課金されます。

  • テンプレートにモジュールが含まれている場合、テンプレートには次の制限が課せられます。

    • パラメータ名に、ピリオドとコロン (.:) の組み合わせを含めることはできません。

    • リソースの論理名にピリオド (.) を含めることはできません。

    • 出力の名前にピリオド (.) を含めることはできません。

    • 条件の名前にアンパサンド (&) を含めることはできません。

    • Transform セクションと Workspace セクションをテンプレートに追加することはできません。

    • Metadata セクションと Count セクションをモジュールに追加することはできません。

    • リソースとモジュールの完全修飾論理名、および条件とマッピングの完全修飾名は一意である必要があります。

  • スタックで許可されるリソースの最大数やテンプレートファイルの最大サイズなどの ROS クォータは、テンプレート内のリソースがモジュールから作成されたかどうかに関係なく、処理されたテンプレートに適用されます。詳細については、「制限」をご参照ください。

  • スタックに構成したタグとリソースグループは、モジュールから作成された各スタックリソースに伝達されます。

  • テンプレートが処理されると、モジュールの Metadata セクションと Rules セクションのデータは無視されます。

  • モジュールが処理されると、動的参照は解決されません。動的参照は、スタック操作中に単一のリソースが作成または更新されるときに解決されます。動的参照の詳細については、「手順 2: ROS テンプレートを作成する」をご参照ください。

  • モジュール内の出力は、テンプレート内の出力に伝達されません。テンプレート出力を作成し、モジュール出力でそれを参照できます。詳細については、「モジュール内の出力を参照する」をご参照ください。

  • モジュール内のパラメータは、テンプレート内のパラメータに伝達されません。テンプレートパラメータを作成し、モジュールパラメータでそれを参照できます。詳細については、「テンプレートパラメータを使用してモジュールプロパティを指定する」をご参照ください。

  • バージョンが default に設定されているモジュールのデフォルトバージョンを変更しても、スタックの更新操作は開始されません。

    ただし、次にモジュールを含むテンプレートを使用してスタック操作 (スタックの更新など) を実行すると、ROS は操作中に新しいデフォルトバージョンを使用します。

  • バージョンが latest に設定されているモジュールの新しいバージョンを作成するか、モジュールから最新バージョンを削除しても、スタックの更新操作は開始されません。

    ただし、次にモジュールを含むテンプレートを使用してスタック操作 (スタックの更新など) を実行すると、ROS は操作中に新しい最新バージョンを使用します。

  • スタック操作中に、ROS は現在のアカウントに登録されているモジュール (他のモジュールにネストされているモジュールを含む) を使用します。

    複数のアカウントにデプロイされている複数のバージョンを持つモジュールを使用する場合、同じテンプレートを使用しても、アカウントごとに異なる結果が返されます。

  • 一貫性を確保するために、スタックグループにモジュールを使用するためにスタックテンプレートにモジュールを含める場合は、スタックインスタンスをデプロイするすべてのアカウントで同じモジュールを使用する必要があります。これには、他のモジュールにネストされているモジュールも含まれます。詳細については、「スタックグループ」をご参照ください。

    説明

    スタックグループが属するアカウントでモジュールを展開する場合は、スタックグループを作成または更新するときに、ROS コンソールで [現在のアカウントでモジュールを展開するかどうか] を選択する必要があります。