[小ネタ]CloudFormationのテンプレート内で文字を置換したい
AWS事業本部 梶原@福岡です。 CloudFormationのテンプレートを記載している際に、パラメータでドメイン名とドメインの.(ドット)を変換したパラメータを入力していたのですが、 2つ入力するのがあまりにめんどくさく。え、文字列置換すればいいじゃん!て思ったんですが、組み込み関数にはReplaceとかないんすよね・・・
組み込み関数リファレンス https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html
ということで、出オチですが、以下を使うといい感じに変換できますので、どうぞ!
うまく置換できないときもあるかと思いますが複雑なやつはこういうのは向いてないと思うので素直に2つ入力してください。
置換処理
!Join [置換文字, !Split [置換対象文字, 文字列]]
経緯
さすがにこれで、Lambdaを使うのはちょっと心苦しく、なんとかなんないかなとおもっていたのですが、
CloudFormationには文字列を分割する関数Splitと
と、文字列を連結する関数がJoinがありました。
Fn::Join
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html
なので、置換対象の文字で、割って、置換文字でくっつけるです
やってみた
AWSTemplateFormatVersion: "2010-09-09" Parameters: BucketName: Description: A name for the bucket. The bucket name must contain only lowercase letters, numbers, periods (.), and dashes (-) and must follow Type: String Default: developers.io Resources: MyBucket: Type: AWS::S3::Bucket Properties: BucketName: !Join ["-", !Split [".", !Ref BucketName]]
こんな感じです!。ピリオド(.)をハイフン(-)に変換した。S3バケットが作成できます。
まとめ
作成するリソースにより、ピリオドが使えなかったり、使える文字が限られたりしますがそのために、別のパラメータを使って入力させたりする機会があったりします。 そんなとき、思い出してもらえると、複数のパラメータをまとめたりできるかと思います。
参考情報
組み込み関数リファレンス https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html
How can i replace some string in cloudformation aws https://stackoverflow.com/questions/56881879/how-can-i-replace-some-string-in-cloudformation-aws/60941273