LoginSignup
0

【AWS】CloudFormationでクロススタックしてみた

Last updated at Posted at 2023-05-25

CloudFormationでテンプレートを分割する場合、ネストとこのクロススタックという方法があります。クロススタックは他のスタックで出力した情報を別のスタックで取得させることができます。

例えば、VPCIDをスタックAで出力させ、スタックBでサブネットを作るときにスタックAで出力させたVPCIDを取得できる、といったような感じです。

CloudFormation上、一番上のレイヤーを分割できるので、設計段階でまず最初に考えるべきはネストよりもクロススタックで良いかと思います:bulb:

概要図

ネストとかスタックとかなんやねんて...なる人もいると思うので例を書いてみました。図内に記載されている通り、大きい枠がスタックで、小さい枠がネストです。
スクリーンショット 2023-05-26 8.37.30.jpg

クロススタックしてみる

テンプレート作成

実際にスタックするコードを作成します。コードは別記事から拝借しました。Outputs/Exportでエクスポート、{Fn::ImportValue: XXX} でインポートという形です。

vpc.yaml
Resources:
  MainVpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 172.16.0.0/16

Outputs:
  MainVpc:
    Value: !Ref MainVpc
    Export:
      Name: main-vpc-id

subnet.yaml
Resources:
  MainSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 172.16.1.0/24
      VpcId: {Fn::ImportValue: main-vpc-id}

スタック作成

CLIでスタックを作成します。

aws cloudformation deploy --stack-name vpc-stack --template-file vpc.yaml

スタックが完了すると、エクスポートされます。
スクリーンショット 2023-05-26 8.15.24.jpg

同様に次のスタックを作成し、サブネットが該当VPCで作成できていればOKです。

aws cloudformation deploy --stack-name subnet-stack --template-file subnet.yaml

補足(必要性に疑問がわいたとき)

クロススタックやネストうんぬんは、 そもそも必要なのか(テンプレート1つでやれ派) という疑問わきがちです。そんな時のために、参考になりそうな記事を記載しておきます。何事もやってみるは大事ですが、無駄にやるとまさに無駄にしかならないので、この辺りの見極めはなかなか難しいところですね。わりと永遠のテーマな気がしてます:thinking:

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0