💭

CFn組み込み関数Fn::Cidrについて簡単まとめ。

2022/10/19に公開

まずは公式ドキュメント

組み込み関数 Fn::Cidr は CIDR アドレスブロックの配列を返します。返される CIDR ブロックの数は、count パラメータによって異なります。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-cidr.html

宣言(Yaml)と戻り値

※公式ドキュメントをまま引用しているので上記リンク先の記載と全く同じ。

Fn::Cidr: 
  - ipBlock
  - count
  - cidrBits

短縮系

!Cidr [ ipBlock, count, cidrBits ]

ipBlock
より小さい CIDR ブロックに分割されるユーザー指定の CIDR アドレスブロック。
count
生成する CIDR の数。有効な範囲は 1~256。
cidrBits
CIDR のサブネットビット数。たとえば、このパラメータに値「8」を指定すると、「/24」のマスクを持つ CIDR が作成される。

注記 サブネットビットはサブネットマスクの逆です。特定のサブネットビットに必要なホストビットを計算するには、IPv4 の場合は 32、IPv6 の場合は 128 からサブネットビットを減算します。

Fn::Cidr内で使える関数

Fn::Cidr関数では以下の関数を使用できます。
Fn::Select
Ref

戻り値

上記ドキュメントの記載

戻り値 CIDR アドレスブロックの配列。

戻り値のイメージがわかりやすい記事

”8bitずつ10個を取得して出力に渡した結果”をスクショして乗せてくれて記事を発見
(わかりやすい。!Refを中で使った例でもある)
https://qiita.com/paper2/items/8039dc3bff4b934b250b

「Fn::Select」との組み合わせ使用のわかりやすい記事

https://dev.classmethod.jp/articles/cidr_cloudformation/

記事内で短縮系の「!Select」の中に短縮系の「!Cidr」、更にその中で「!GetAtt」を使えている。(※!Base64 !Subという書き方が不可だった事とちょっと違いそうなので、ここの理解は進んだら追記します。)

CidrBlock: !Select [ 0, !Cidr [ !GetAtt VPC.CidrBlock, 1, 7 ]]


テンプレート自体のハードコードによる変更を減らす

更にVPCのCidrBlockもParameterで入力してもらうといいね というTIPS
https://ebc-2in2crc.hatenablog.jp/entry/2020/03/21/201028

Discussion