1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS CF】組み込み関数「!ImportValue」と「Fn::Sub」を使ってインポートする

Posted at

概要

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::SubPublicSubnet1-${Tag1}-${Tag2}という文字列を生成し、その結果が!ImportValueによってインポートされ、エラーが解消されました。

組み込み関数Fn::Subについての公式ドキュメントは以下。

組み込み関数 Fn::Sub は、入力文字列の変数を、指定した値に置き換えます。テンプレートで、スタックを作成または更新するまで使用できない値を含むコマンドまたは出力を作成するために、この関数を使用できます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?