概要
AWS Cloudformationで組み込み関数を使ってインポートする場合、うまくいかずにエラーになることがあります。
正常にインポートできる方法を紹介します。
サンプル
例えば、とあるスタックで以下のようにエクスポートしたとします。
'PublicSubnet1-${Tag1}-${Tag2}'
これを、パラメータ${Tag1}
と${Tag2}
を同じ値の定義とする、別のテンプレートでインポートするとします。
この時、以下だとエラーになります。
SubnetId: !ImportValue
!Sub 'PublicSubnet1-${Tag1}-${Tag2}'
エラー内容:
E0000: did not find expected key
何だか一見上記でいけそうですが、Cloudformationの組み込み関数の使い方としては不適切でした。
正しくは以下です。
SubnetId: !ImportValue
Fn::Sub: 'PublicSubnet1-${Tag1}-${Tag2}'
!Sub
を!ImportValue
の引数として直接使用することはできません。
代わりにFn::Sub
を使用すれば、!ImportValue
の引数として解釈される文字列を生成することができます。
これにより、Fn::Sub
がPublicSubnet1-${Tag1}-${Tag2}
という文字列を生成し、その結果が!ImportValue
によってインポートされ、エラーが解消されました。
組み込み関数Fn::Sub
についての公式ドキュメントは以下。
組み込み関数 Fn::Sub は、入力文字列の変数を、指定した値に置き換えます。テンプレートで、スタックを作成または更新するまで使用できない値を含むコマンドまたは出力を作成するために、この関数を使用できます。