CloudFormationのYAMLをPyYAMLで読み込む

GALACTIC1969
GALACTIC1969
3 min readFeb 13, 2019

--

Serverless Frameworkのアプリケーションのテストコードを書く時、環境変数とかリソース名を取るためにserverless.ymlを読み込むことがある。

Photo by Pankaj Patel on Unsplash

普通はPyYAMLを使って読み込むことで普通に読み込めるけど、Serverless FrameworkのCloudFormationの部分で、短縮記法を使った関数など(!GetAttなど) を使っている場合、以下のようなエラーがでることがある。

YAMLでは ! からはじまる文字列はタグ記法として機能が用意されているらしく、タグに対応するクラスがコンストラクターとしてパーサーに追加されていない場合、上記のようなエラーになる。

※タグを使った例は、以下の記事がわかりやすかった
http://gihyo.jp/dev/serial/01/yaml_library/0003

で、今回はYAMLのタグ機能を使いたいわけではなく、単にCloudFormationの関数の短縮機能がたまたま ! からはじまるだけなので、パーサーとしては無視したいところ。

どうすべきかと悩んでいたら、以下のIssueに、「こうやれば全部無視できるよ!」と記載があった。

yaml.loadする前に上記の設定を加えて、無事読み込めるようになった。この設定だとすべてのタグを無視するようになるけど、1つめの引数のtag_prefixをちゃんと設定してあげれば、本来のタグとの共存もできそう(使わないけど)

--

--