CloudFormation クロススタック参照

比べてわかるIaCの選びかた本を買って積読になっていたので読書。

IaCの必要性

・環境の作成や破棄が簡単にできるのはコード実行時に同一環境が生成できる冪等性の特性。再利用が確保されコスト削減につながる
・再利用はクラウドの特性にマッチしている。リソースを簡単に作成・破棄できることがメリット。IaCによってリソースを自動に作成でき、同一構成が保証されすぐに破棄ができる

CloudFormation

・スタック
 - AWSのリソースはスタックという単位で管理される
・変更セット
 - 既存スタックで作成されたリソースに対して、変更を加えるときに作成される変更差分データを変更セットまたはchange setと呼ぶ
 - 変更前に、どういった変更がなされてどのようなインパクトを与えるを把握するために利用。ストレージやデータベースサービスの更新に有用。
 - 変更セットを作成し、リソースにどういった追加・変更・削除がされるかを確認することでき、ミスを防ぐことにつながる

クロススタック参照

・スタックAで作成したリソースをスタックBで利用したい場合に使う
・クロススタック参照を利用するにあたっての注意点、スタック間で強い依存関係が生まれ、別のスタックから参照されている値は変更できない
・クロススタック参照で参照するべきものは、あまり変更が加わらないリソースや、変更する場合には別リソースとして許容されるものを選択する

実際にクロススタック参照を試してみました。
1.VPCを作成し、そのVPCにサブネット①を作成する
2.VPCに、もう1つ新しくサブネット②を追加する
3.サブネット②にEC2を作成する

### 項番1のコード
AWSTemplateFormatVersion: '2010-09-09'
Resources:
 TestVPC:
   Type: AWS::EC2::VPC
   Properties:
     CidrBlock: 10.0.0.0/16
     Tags:
     - Key: Name
       Value: VPC-test1
 TestSubnet:
   Type: AWS::EC2::Subnet
   Properties:
     CidrBlock: 10.0.0.0/24
     VpcId: 
       Ref: TestVPC
     Tags:
     - Key: Name
       Value: subnet-test1
Outputs:
 Subnet:
   Value:  
     Ref: TestVPC
   Export:
     Name: VPCid
### 項番2のコード
AWSTemplateFormatVersion: '2010-09-09'
Resources:
 AddSubnet:
   Type: AWS::EC2::Subnet
   Properties:
     VpcId: !ImportValue VPCid
     CidrBlock: 10.0.1.0/24
     Tags:
     - Key: Name
       Value: subnet-test2
Outputs:
 Subnet:
   Value:  
     Ref: AddSubnet
   Export:
     Name: subnetid
### 項番3のコード
AWSTemplateFormatVersion: '2010-09-09'
Mappings: 
 RegionMap: 
   ap-northeast-1:
     hvm: "ami-0620ef8a9087d83df"
Resources:
 Ec2Instance:
   Type: AWS::EC2::Instance
   Properties:
     ImageId: !FindInMap [RegionMap, !Ref 'AWS::Region', hvm]
     InstanceType: t2.micro
     SubnetId: !ImportValue subnetid

まとめ

上記のコードでやりたかったことは達成。
次の箇所でハマりましたが、なんとか解決できてよかった。
・スタック間の受け渡しのコードが分からずハマった
・Typeの値が間違っていてハマった

ハマったことで、ImageIdを指定する方法がいくつかあることが知れてよかった。また、コードでハマったときには、CloudFormationデザイナーで構文チェックをすると良いことがわかりました。

この記事が気に入ったらサポートをしてみませんか?