🐕🦺
[AWS]CloudFormationで使用できるFn::ToJsonStringが便利
用途
CloudFormation内でJSONの記述が必要な時に使用。
例えば下記のような記述をテンプレート内で行う必要がある場合にFn::ToJsonString関数を使用することで可読性が上がる。
"{ \"InstanceIds\": [ \"${InstanceID}\"] }"
使用方法
Transform: AWS::LanguageExtensions をテンプレートに追記するだけで使用可能となる。
テンプレートのバージョン指定後に書くようにしている。
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
AWS公式ドキュメントから抜粋
Transform: 'AWS::LanguageExtensions'
#...
Fn::ToJsonString:
key1: value1
key2: !Ref ParameterName
#...
結果はこうなる。
"{\"key1\":\"value1\",\"key2\":\"resolvedValue\"}"
具体的な使用例
用途としては夜間にEC2を停止するEventBridge Schedulerの作成時に使用している。
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::LanguageExtensions
Description: Create EventBridge Scheduler
Parameters:
InstanceID01:
Type: AWS::EC2::Instance::Id
Cron:
Description: Enter the JST cron to stop EC2.
Type: String
Default: cron(00 21 ? * * *)
Resources:
EC2StopSchedule:
Type: AWS::Scheduler::Schedule
Properties:
Description: Stop EC2 Instance
FlexibleTimeWindow:
Mode: "OFF"
Name: stop-ec2-schedule
ScheduleExpression: !Sub ${Cron}
ScheduleExpressionTimezone: Asia/Tokyo
State: ENABLED
Target:
Arn: "arn:aws:scheduler:::aws-sdk:ec2:stopInstances"
Input:
Fn::ToJsonString:
InstanceIds:
- !Ref InstanceID01
RoleArn: Role.Arn
RetryPolicy:
MaximumEventAgeInSeconds: 300
MaximumRetryAttempts: 5
導入前は下記のように記載していた
Input: !Sub "{ \"InstanceIds\": [ \"${InstanceID01}\" ] }"
スケジューラーのターゲットが作成される
{"InstanceIds":["i-0b0123456778"]}
参考
Discussion