2021年7月13日火曜日

AWS CloudFormationでダブルクォーテーションで失敗した話

概要

  • CfnでPseudo Parameterを使おうとして !Ref "AWS::Region" が!Ref “AWS::Region” になっていてエラーが出ていました
  • ダブルクォーテーションが変になっていたのが理由
  • 特にpdfからコピーするときは、フォントが変わっているときもあるので注意

詳しく


Blackbelt のpdf資料を見ながら疑似パラメータのRegionを使おうとしていて、エラーが出ました。


Template format error: Unresolved resource dependencies [?AWS::Region"] in the Resources block of the template

?AWS::Region" というリソースのdependenciesがおかしい、というのが意味わからず。他のページも見て試してみると、どうやらクォーテーションが間違っていたと分かりました。

理由


あとで分かったのはこれが定義したリソースだと思って探したものの、ないですよ、ということのようです。


例えば、以下の JSON テンプレートと YAML テンプレートで ImageID のプロパティで test が参照されているとします。しかし、どちらのテンプレートにもリソースの論理 ID または test という名前のパラメータは含まれていません。

つまり、リソース ID は、次の JSON と YAML テンプレートで正しく定義されていません。これらのテンプレートにより、「テンプレートのリソースブロックにある未解決のリソース依存関係 [test]」というエラーが返されます。 リソースの定義と構文に関する詳細については、「リソース」を参照してください。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/cloudformation-template-validation/

VSCodeのcfn-lintでもエラーが出て同じ説明が出ていました。エラー文がすぐに理解できず反省です。


コピペ失敗したもの

このページをコピペしたのですが・・・


よく見ると違いますね。下のAWS::StackNameの方が正しいクォーテーションです。




PDFだからでしょうか?とにかく気をつけましょう。


ダブルクォーテーションいる/いらない


JSONとYAMLの記法を比較すると、JSONは文字列を全て""を使いますが、YAMLでは省略できます。::がついているAWS::Regionは""が残っていますが、実際のところ、!Ref "AWS::Region" を !Ref AWS::Region と書いてもエラーにはなりません。

"Outputs" : {
   "MyStacksRegion" : { "Value" : { "Ref" : "AWS::Region" } }
}
Outputs:
  MyStacksRegion:
    Value: !Ref "AWS::Region"

0 件のコメント:

コメントを投稿