こんにちは。
simplineのmiddleでございます。

11月になりました! 早いですね〜。
CloudFormationをいじり始めて早くも2ヶ月たちそうです。

 

★今回のお題

CloudFormationのテンプレート調達

その1 背景〜CloudFormationとは
その2 初心者がテンプレートを書いてみます①
その3 初心者がテンプレートを書いてみます②
その4 おまけ「Outputsでクロススタック参照」編 ←本日はこちら

 

★Outputsでクロススタック参照

その2で書きましたが、Outputsとはスタック内で作成したリソースについての値を出力する機能です。

オプションの Outputs セクションは 他のスタックにインポートする (クロススタック参照を作成)、応答として返す (スタック呼び出しについて記述)、または、AWS CloudFormation コンソールで表示する出力値を宣言します。たとえば、見つけやすいバケットを作成するスタックの S3 バケット名を出力できます。

公式サイトより引用)

 

〜例〜
・スタック①(テンプレート①)でセキュリティグループを作成
・スタック②(テンプレート②)でEC2インスタンスを作成

テンプレート②でEC2インスタンスのセキュリティグループを指定する際に、セキュリティグループIDが必要です。
ここで「sg-xxxxxxxx」と記載するとします。

AWSTemplateFormatVersion: 2010-09-09
Resources:
EC2Instance1:
Type: AWS::EC2::Instance
Properties:
SecurityGroupIds: [sg-xxxxxxxx]

まあこれはこれでよいのですが、もしスタック①を更新してセキュリティグループIDが変わってしまった場合、スタック②の更新時にはテンプレート②も修正しなければいけません。

 

そこでこのOutputsの登場です。
セキュリティグループIDを「stack1-SGID」というような値で出力させて、テンプレート②のセキュリティグループIDはその「stack1-SGID」と指定することができます。

AWSTemplateFormatVersion: 2010-09-09
Resources:
EC2Instance1:
Type: AWS::EC2::Instance
Properties:
SecurityGroupIds: [!ImportValue “stack1-SGID”]

※「!ImportValue」というのは、Outputsした値を使うよ、というような組み込み関数です。

 

こうしておくことで、セキュリティグループID変更にも作業不要で対応できます!
これがずばり「クロススタック参照」です。
別スタックのリソース出力を参照する機能です。

■参考:
チュートリアル: 別の AWS CloudFormation スタックのリソース出力を参照する – AWS CloudFormation

 

そもそもセキュリティグループとEC2インスタンスは同じテンプレートに書けばいい、とかいろいろあるわけですが、このクロススタック参照によりテンプレートの切り方に多様性を持たせられるわけですね。

ちなみに、クロススタック参照によってスタック同士に依存関係が出来た場合、スタック削除に失敗することを確認いたしました。
(今回の例の場合、スタック②がある状態でスタック①を削除しようとすると、失敗しました。)

 

今回は、例の通りセキュリティグループとEC2インスタンスは別スタックにしました。
そのほかにもCloudWatchで使うSNSトピックや、CloudTrail証跡保存先S3バケット等、クロススタック参照でいろいろやりました!

 

 

★今回のスキルアップ部分

というわけでCloudFormationチャレンジでした。
今回EC2に始まりいろんなリソースを作成するテンプレートを書きまくり、無事全部CREATE_COMPLETEとなりました!

私は今回の件でCloudFormationが結構好きになりましていきなり「やっぱりKMSも使いたいんだよね」とか言われても「はいはい」とテンプレート書けるようになりました。
そもそもテンプレートはちょっとcssに似ていた←以前webサイトデザインしてたので
ここまで来たら、次は「CloudFormationerです」くらい言えるくらいにはなりたいものです。

そういえばCloudFormationについてAWS試験で見かけた時、何故か私は「あ〜CloudFormationなんて永遠に使わないから、試験で見るだけだろうなあ〜」と思っておりました……。
ど素人でもなんとかなるんだな〜という励み(?)にしていただければ幸いです。

以上です。
よろしくお願いいたします。

TOP