俺のアウトプット

調べたこと、試したことを書きます

CloudFormationテンプレートのパラメータ

Parametersセクションを利用すると、スタック作成時に様々な値を渡すことができます。

パラメータ構文

Parameters:
  パラメータ名:
    Type: データ型
    プロパティ: 値
    ...

Typeプロパティは必須項目でデータ型を指定します。

データ型

データ型は、文字列や数値などのプリミティブな型とAWS固有のタイプがあります。

データ型 説明 入力例
String リテラル文字列 "MyTest"
Number 整数または浮動小数点値 90
List<Number> カンマで区切られた整数または浮動小数点値の配列 "10,20,30"
CommaDelimitedList カンマで区切られたリテラル文字列の配列 "aaa,bbb,ccc"
AWS固有のタイプ Amazon EC2キーペアの名前やVPCのIDなど

AWS固有のタイプは、下記エントリを参照してください。

入力値の参照

組み込み関数 Ref を使用して、入力した値を参照できます。
RefはReference(参照)の略です。
下記テンプレートを実行すると、パラメータ名 VpcName をVPCの名前タグに設定します。

AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  VpcName:
    Type: String
Resources:
  MyVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      Tags:
      -
        Key: Name
        Value: !Ref VpcName
  • Parametersセクションで文字列型のパラメータ VpcName を定義
  • ResourcesセクションのVPC定義内で VpcName を参照して名前タグに設定

!RefはRefの短縮形です。
「短縮形?文字数増えてるやんけ」と思いましたが、エディタによってはハイライト機能が有効になるので、積極的に使っていきましょう。

デフォルト値

パラメータに値を指定しなかった場合にセットする値です。

プロパティ 説明
Default 値を指定しなかった場合にセットする値

制約

制約関連のプロパティです。型によって使用出来る、出来ないがあります。 制約に違反する場合は、エラーになり実行出来ません。 パラメータを必須入力させる場合も制約を利用します。

プロパティ String型 Number型 説明
AllowedValues 許可する値をリストで指定
AllowedPattern 値を正規表現でチェック
MinLength 最小文字数
MaxLength 最大文字数
MinValue 最小値
MaxValue 最大値

表示系

表示に関するプロパティです。
残念ながら日本語には対応していません。日本語を入力すると???になります。

プロパティ 説明
Description パラメータの説明
ConstraintDescription 入力した値が制約にひっかかった場合の説明
NoEcho 値をアスタリスク(*)で見えなくするかどうか true/false

サンプル

入力した値を出力するだけのサンプルです。 リソースはVPCを作成しています。

AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  Input1:
    Type: String
    AllowedValues: ["apple", "banana", "melon", "grape"]
    Description: Select fruit
  Input2:
    Type: Number
    MinValue: 0
    MaxValue: 100
    Description: Input your weight (0-100)
  Input3:
    Type: List<Number>
    Default: "10,20,30"
    MinValue: 10
    MaxValue: 100
    Description: Input your numbers (10-100)
  Input4:
    Type: CommaDelimitedList
    Default: "var,www,html"
    Description: Input directory
  Input5:
    Type: String
    NoEcho: true
    MinLength: 4
    MaxLength: 16
    Description: Input your secret word (4-16chars)
Resources:
  MyVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
Outputs:
  Output1:
    Description: Fruit
    Value: !Ref Input1
  Output2:
    Description: Weight
    Value: !Ref Input2
  Output3:
    Description: Numbers
    Value: !Join [" or ", !Ref Input3]
  Output4:
    Description: Directory
    Value: !Join ["/", !Ref Input4]
  Output5:
    Description: Secret word
    Value: !Ref Input5

入力 (Parameters)

  • Input1
    • AllowedValues を利用するとセレクトボックスが表示されます。
    • 未選択の場合は、[次へ]ボタン押下時にエラーになります。
  • Input2
    • Number型だと整数だけでなく浮動小数点も入力可能です。整数だけにしたい場合は AllowedPattern で数値のみに限定します。
  • Input3, Input4
    • カンマ区切りで指定します。カンマの前後にある半角スペースは除去されます。
  • Input5
    • NoEcho を有効にするとアスタリスク(*)表示で入力値が見えなくなります。

入力例

f:id:kitsugi:20180718074839p:plain

出力 (Outputs)

  • Output3, Output4
    • 組み込み関数 Fn::Join (短縮形は!Join) を使用して、リストの値を連結しています。

出力タブ

f:id:kitsugi:20180718074850p:plain

疑問点

誰か教えてください。

  • Description にマルチバイトを入力出来ないの?対応予定もなし?
  • NumberとList<Number>に対して、StringとCommaDelimitedList。なんでList<String>じゃないの?

参考