ネストされたスタックを使用して他のスタック内にスタックを埋め込む - AWS CloudFormation

ネストされたスタックを使用して他のスタック内にスタックを埋め込む

ネストされたスタックは、他のスタックの一部として作成されたスタックです。ネストされたスタックは、AWS::CloudFormation::Stack リソースを使用して別のスタック内に作成します。

インフラストラクチャが大きくなるにつれ、複数のテンプレートで同じコンポーネントを宣言する共通パターンができてきます。これらの共通するコンポーネントを他と分類し、専用テンプレートを作成できます。次に、テンプレートのリソースを使用して他のテンプレートを参照し、ネストされたスタックを作成します。

たとえば、ほとんどのスタックに使用しているロードバランサー構成があると仮定します。テンプレートに同じ構成をコピーアンドペーストする代わりに、ロードバランサーを対象にした専用テンプレートを作成できます。その後は、 リソースを使用して他のテンプレート内からそのテンプレートを参照するだけです。

ネストされたスタックには他のネストされたスタックが含まれているため、次の図に示すようにスタックの階層になっています。ルートスタックは、ネストされたすべてのスタックが最終的に属する最上位スタックです。さらに、ネストされたスタックにはそれぞれ、直接の親スタックが存在します。第 1 レベルのネストされたスタックの場合は、ルートスタックにも親スタックが存在します。たとえば、以下の図をご覧ください。

  • スタック A は、階層内のネストされたその他すべてのスタックのルートスタックを表します。

  • スタック B から見ると、スタック A は親スタックであると同時にルートスタックでもあります。

  • スタック D から見るとスタック C が親スタック、スタック C から見るとスタック B が親スタックです。

別のスタックの一部として作成されているネストされたスタックには、直接の親スタックと最上位のルートスタックが存在します。

CloudFormation テンプレートの分割

この例では、単一の大規模な CloudFormation テンプレートを、ネストされたテンプレートを使用するより構造的で再利用可能な設計に再編成する方法を説明します。元の「ネスト前のスタック」テンプレートでは、1 つのファイルにすべてのリソースが定義されているのがわかります。このテンプレートは、リソースの数が増えるにつれて煩雑になり、管理しにくくなる可能性があります。「ネスト後のスタック」テンプレートは、リソースをより小規模な個別のテンプレートに分割しています。これらは、ネストされたスタックと呼ばれます。ネストされたスタックは、それぞれが関連するリソースの特定のセットを処理するため、構造全体がよりよく整理され、維持しやすくなります。

スタックをネストする前

スタックをネストした後

AWSTemplateFormatVersion: '2010-09-09' Parameters: InstanceType: Type: String Default: 't2.micro' Description: 'The EC2 instance type' Environment: Type: String Default: 'Production' Description: 'The deployment environment' Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-1234567890abcdef0 InstanceType: !Ref InstanceType MyS3Bucket: Type: 'AWS::S3::Bucket'
AWSTemplateFormatVersion: '2010-09-09' Resources: MyFirstNestedStack: Type: 'AWS::CloudFormation::Stack' Properties: TemplateURL: 'https://s3.amazonaws.com/amzn-s3-demo-bucket/first-nested-stack.yaml' Parameters: # Pass parameters to the nested stack if needed InstanceType: 't3.micro' MySecondNestedStack: Type: 'AWS::CloudFormation::Stack' Properties: TemplateURL: 'https://s3.amazonaws.com/amzn-s3-demo-bucket/second-nested-stack.yaml' Parameters: # Pass parameters to the nested stack if needed Environment: 'Testing' DependsOn: MyFirstNestedStack

ネストされたスタックでのスタックオペレーションの実行

ネストされたスタックを含むスタックがある場合は、特定のアクションを実行する際に、ネストされたスタックを慎重に正しく処理する必要があります。一部のスタックオペレーション (例: スタックの更新) では、ネストされたスタック自体から直接実行するのではなく、ルートスタックから起動する必要があります。さらに、ネストされたスタックの存在は、ルートスタックでのオペレーションの実行方法に影響する場合があります。

ルートスタックとネストされたスタックを検索するには、次の手順を実行します。

ネストされたスタックのルートスタックを表示するには
  1. AWS Management Console にサインインし、AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。

  2. [スタック] ページで、ルートスタックを表示するネストされたスタックの名前を選択します。

    ネストされたスタックについては、スタック名の上に [NESTED] と表示されます。

  3. [スタック情報] タブの [概要] セクションで、[ルートスタック] としてリストされているスタック名を選択します。

ルートスタックに属するネストされたスタックを表示するには
  1. ネストされたスタックを表示するルートスタックから、[リソース] タブを選択します。

  2. [タイプ] 列で、AWS::CloudFormation::Stack タイプのリソースを探します。