LoginSignup
4
3

More than 3 years have passed since last update.

CloudFormationでパラメータストアから値を動的参照する際にハマったところ

Posted at

背景

作成中のCFnのスタックをいくつかのVPC上で実行したいので
vpc-idやその他のパラメータはベタ書きせずに外部から参照するかたちにしました。

CFnでは動的な参照を使用してテンプレート値を指定する機能を利用して
SSMのパラメータストアやSecrets Managerから値を参照することができます。

参照パターン
# '{{resolve:ssm:parameter-name:version}}'
'{{resolve:ssm:vpc-id:1}}'

問題

SSMパラメータストアにパラメータを設定した上で
テンプレート名のパラメータセクションでこのように書きました。

CFnテンプレート
VpcId:
  Type: AWS::EC2::VPC::Id
  Default: '{{resolve:ssm:vpc-id:1}}'

このテンプレートからスタックを作成するとエラーになります。

イベント内に出力されるエラー
Parameter validation failed: parameter value {{resolve:ssm:vpc-id:1}} for parameter name VpcId does not exist. Rollback requested by user.

存在しない…とはいえCLIからパラメータストアを参照すると普通に見えます。

CLIからパラメータストアを参照
aws ssm get-parameter --name=vpc-id
{
    "Parameter": {
        "Name": "vpc-id",
        "Value": "vpc-a1b2c3d4",
        "Version": 1,
        "Type": "String"
    }
}

解決

テンプレートの Type を書き換えると参照できました。

CFnテンプレート
VpcId:
  Type: String
  Default: '{{resolve:ssm:vpc-id:1}}'

AWS 固有のパラメーター型を使えば
入力値の検証やサジェストの面でメリットがありますが
現状はここに動的参照の値を直接置くことはできないようです。

厳密な原因が見つかっていないためまだなんとも言えませんが
does not exist. に惑わされないようにしましょう。

4
3
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
4
3