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デザイナーで構文チェックをすると良いことがわかりました。
この記事が気に入ったらサポートをしてみませんか?