みずラテ

牛乳と水を2対1で。

【Cloudformation】RefやFn::GetAttが何を返すのか

Cloudformation初心者の私が最初に躓いたRefとかGetattの話です。

リソースによってRefで返す値が異なる。

Ref関数を使うと、テンプレート内のリソースIDを引数にしてARNだったり、リソース固有のIDだったりを返してくれるのですが、最初にハマったのは「じゃあリソースごとに一体なにを返すんですか?」という点。

結論から言うと、公式ドキュメントに書いてあります。
例えば、AWS::ApiGateway::RestApiをそのままぐぐってみると公式ドキュメントの以下のページが出てきます。

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-restapi.html

このページの下の方に下っていくと、「戻り値」というセクションにこのリソースが何を返すか書いてあります。
f:id:taris777:20191223122412p:plain

ID このリソースの論理 ID を組み込みの Ref 関数に渡すと、Ref は次を返します: a1bcdef2gh などの RestApi。

ただ、正直何を言っているか意味がわかりません。自動翻訳のせいだと思われます。このせいで理解するのに結構時間がかかりました。

おすすめは、公式ページは諦めて、githubの原点に当たること。

github.com

この中にはおそらく自動翻訳した元の英語の一覧が出てきます。
同じ様にAWS::ApiGateway::RestApiを開いてみると、

github.com

Return Valuesのセクションに以下のような記載があります。

f:id:taris777:20191223123020p:plain

When you pass the logical ID of this resource to the intrinsic Ref function, Ref returns the RestApi ID, such as a1bcdef2gh.

英語のほうがよっぽどわかりやすい!!

RestApi IDを返してくれるということがひと目で分かります。

GetAtt関数についても同じです。自動翻訳されていない英語のほうがわかりやすいです。

こっちを見るようになってから、だいぶツラくなくなりました。

以上です。