Help us understand the problem. What is going on with this article?

CloudFormationの nested stack が使いづらい件

一言で言うと 子スタックのチェンジセットが一切見えない ので使いづらい。
いろいろ検索してみたけど日本語の結果が出てこなかったので検索用メモとして。
(こういうときにつけるタグってなんだろう。。。)

nested stack1

ネストされたスタックは、他のスタックの一部として作成されたスタックです。

複数のスタックを連携させる方法としては出力値を用いたクロススタック参照2などもあるが、それよりももっと直接にスタックの親子関係を構築する仕組み。

以下のような複数のテンプレートがあるときに、

  • parent.yaml に対して aws cloudformation package を実行する
  • package処理結果のyamlに対して aws cloudformation deploy を実行する

という手順を踏むことで、子テンプレートの内容を含めてまとめて parent.yaml のスタックでリソース管理できる。

parent.yaml
AWSTemplateFormatVersion: 2010-09-09
Description: parent template

# 他のスタックをリソースとして定義
Resources:
  ChildStack1:
    Type: "AWS::CloudFormation::Stack"
    Properties:
      TemplateURL: ./child1.yaml

Outputs:
  Child1Policy:
    Description: child 1 policy
    Value: !GetAtt ChildStack1.Outputs.Policy # 子スタックの出力値を参照できる
    Export:
      Name: child1-policy
child1.yaml
AWSTemplateFormatVersion: 2010-09-09
Description: child 1 stack

# サンプルとしてIAMポリシーを定義
Resources:
  SamplePolicy:
    Type: "AWS::IAM::ManagedPolicy"
    Properties:
      Description: SamplePolicy
      Path: /
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Action: lambda:InvokeFunction
            Resource: "*"

Outputs:
  Policy:
    Description: child 1 policy
    Value: !Ref SamplePolicy
実行手順
# 関連リソースをパッケージング
# -- child1.yaml が関連リソースとしてS3へアップロードされる
# -- アップ先のバケットは先に用意しておくこと
$ aws cloudformation package --template-file parent.yaml \
      --s3-bucket sample-bucket-1234567890 \
      --output-template-file packaged-parent.yaml

# スタックにチェンジセットを作成(まだリソース作成は行わない)
$ aws cloudformation deploy --no-execute-changeset \
      --template-file packaged-parent.yaml \
      --stack-name sample-stack

これを実行すると sample-stackに以下のチェンジセットが作成される。

nested-stack-changeset.png

親スタックからは子スタックが新規リソース(更新時は変更リソース)として扱われる。

問題点

この時点では ChildStack1 の管理スタックはまだ作成されておらず、このチェンジセットを適用すると child1.yaml の内容はチェンジセットなしに直接適用される。
更新についても同様で、aws cloudformation deploy --no-execute-changeset で作成されるチェンジセットで確認できるのは子スタックが変更されるという内容のみで、子のチェンジセット内で何が変更されるかはわからない という状況になる。

関連情報

英語圏だと関係しそうな情報が出てきた。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away