☁️

CloudFormationのFn::Base64について簡単にまとめ。

2022/10/19に公開

(前提)CloudFormation

AWS(Amazon Web service)に置いてIaC(Infrastructure as Code)を実現するサービス。

CFnドキュメント
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html

IaCとは
https://www.sbbit.jp/article/cont1/39402


Fn::Base64とは(主題)

組み込み関数 Fn::Base64 は、入力文字列の Base64 表現を返します。この関数は通常、UserData プロパティを介して Amazon EC2 インスタンスにエンコードされたデータを渡すために使用されます。

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


(横道1)「Fn::」は「!」とする事が出来る

Fn:: を ! と書けるだけ?と勘違いするかと思いますが、違います。そんなふうに考えていた時期が俺にもありました

https://dev.classmethod.jp/articles/cfn-short-form-in-yaml-syntax/

・行数も減る。
・短縮形(!)の中で短縮系では利用出来ない(Base64でも然り/先のドキュメントでも言及されている)

短縮形を使用し valueToEncode パラメータにすぐに別の関数を含める場合、少なくとも 1 つの関数では、完全名関数を使用します。例えば、次の構文は無効です

!Base64 !Sub string
!Base64 !Ref logical_ID

代わりに、次の例に示すように、少なくとも 1 つの関数では、完全名関数を使用します。

!Base64
  "Fn::Sub": string

Fn::Base64:
  !Sub string

との事。


Base64内でFn::Subを使う

ユーザーデータの中でCloudFormationのパラメーターを使いたいことがよくあります。

そういう場合は、組み込み関数Fn::Subを使用します。

ドル記号と中括弧 ({}) をそのまま書き込むには、最初の中括弧の後に感嘆符 (!) を追加します ({!Literal} など)。AWS CloudFormation では、このテキストは ${Literal} のようになります。

https://dev.classmethod.jp/articles/using-variables-in-ec2-user-data-in-cloudformation/

記法についての注意
[Fn::Base64: |-」

Fn::Base64: !Sub下の行に- |

  • |横縦の順番になり、変数を利用しない場合と順番が逆になる

複数変数を入力する際は結論に,を忘れないこと

https://infraya.work/posts/cloudformation_userdata_tips/


(横道2)一行目の「#!/bin/bash」

「おまじない」と思って書いている方も多くいるのではないでしょうか。・・・私もその一人でした。

https://qiita.com/yn-misaki/items/6fcfab082dd664f10d4e

Linuxシェルでは先頭行に「#!/bin/bash」と書くべき(理由)

http://site.m-bsys.com/knowledge/linux-header

※追加の情報やTIPSが見つかったらまた更新します.

Discussion