AWS IoTのトピックルールをCloudFormationで作成したときに引っかかったのでメモ。
YMLで#をエスケープするためには、全体を"
または'
で囲めば良い。
test.yml
'#test'
###おまけ
この記事は、CloudFormationでAWS IoTのSQLを記述しようとしたときに、「あれ、#ってエスケープ必要じゃね」と思ったため、書き始めた記事だった。
だが、いずれにせよAWS IoTのSQLは、以下のように記述すればそのまま通ることがわかった。
調べて損した
AWSIoT.yml
IoTTopicRule:
Type: AWS::IoT::TopicRule
Properties:
RuleName: !Sub "${AWS::StackName}-KinesisRule"
TopicRulePayload:
Actions:
-
Firehose:
DeliveryStreamName: !Ref deliverystream
RoleARN: !GetAtt FirehoseRole.Arn
Separator: ','
AwsIotSqlVersion: 2016-03-23
RuleDisabled: True
Sql: !Sub Select * From ''${AWS::StackName}Gatewaytopic/#''
*追記
そもそもシングルクォートのエスケープすらいらなかった。また、スタックネームにはハイフンが含まれているため、利用できなかった。
つまり、正しくはこう。
AWSIoT.yml
IoTTopicRule:
Type: AWS::IoT::TopicRule
Properties:
RuleName: !Sub "${Konst}-KinesisRule"
TopicRulePayload:
Actions:
-
Firehose:
DeliveryStreamName: !Ref deliverystream
RoleARN: !GetAtt FirehoseRole.Arn
Separator: ','
AwsIotSqlVersion: 2016-03-23
RuleDisabled: True
Sql: !Sub Select * From '${Konst}Gatewaytopic/#'