オプションの Parameters
セクションを使用して、テンプレートをカスタマイズします。パラメータを使用すると、スタックを作成または更新するたびにテンプレートにカスタム値を入力できます。テンプレートでパラメータを使用することで、特定のシナリオに合わせて調整できる再利用可能で柔軟なテンプレートを構築できます。
適切なタイプのパラメータを定義することにより、コンソールを使用してスタックを作成するとき、既存リソースの識別子のリストから選択できるようになります。詳細については、「CloudFormation が提供するパラメータタイプを使用して、実行時に既存のリソースを指定する」を参照してください。
パラメータは、スタックリソースのプロパティ値を指定する一般的な方法です。ただし、リージョンに依存する設定もあれば、他の条件や依存関係のためにユーザーには理解しにくい複雑な設定もあります。このような場合、マッピングを使用するなどして、ユーザーがより単純な値を指定して (またはまったく値を指定しないで) 必要な結果を得ることができるように、テンプレート自体に何らかのロジックを組み込むことをお勧めします。詳細については、「CloudFormation テンプレートの Mappings 構文」を参照してください。
構文
テンプレートの Parameters
セクションでパラメータを宣言します。これは、次の一般的な構文を使用します。
JSON
"Parameters" : {
"ParameterLogicalID
" : {
"Description
": "Information about the parameter
",
"Type" : "DataType
",
"Default
" : "value
",
"AllowedValues
" : ["value1
", "value2
"]
}
}
YAML
Parameters:
ParameterLogicalID
:
Description
: Information about the parameter
Type: DataType
Default
: value
AllowedValues
:
- value1
- value2
パラメーターは、値と値に対する制約を定義する属性のリストを含みます。必須属性は Type
だけで、String
や Number
のほか、CloudFormation に用意されているパラメータタイプを設定できます。どのような値を指定するかを説明する Description
属性を追加することもできます。[Create Stack] ウィザードでテンプレートを使用すると、パラメータの名前と説明が [Specify Parameters] ページに表示されます。
注記
デフォルトでは、CloudFormation コンソールでは入力パラメータが論理 ID によりアルファベット順に一覧表示されます。このデフォルトの順序付けを上書きし、関連するパラメータをグループ化するには、テンプレートで AWS::CloudFormation::Interface
メタデータキーを使用します。詳細については、「AWS::CloudFormation::Interface」を参照してください。
デフォルト値を持つパラメータについては、ユーザーが別の値を指定しない限り、CloudFormation でデフォルト値が使用されます。デフォルトの属性を省略する場合は、ユーザーにそのパラメータの値を指定するよう求める必要があります。ただし、ユーザーに値を指定するよう求めた場合、その値の有効性は保証されません。パラメータの値を検証するには、制限を宣言するか、AWS 固有のパラメータタイプを指定することができます。
デフォルト値のないパラメータの場合、ユーザーはスタックの作成時にキー名の値を指定する必要があります。指定しないと、CloudFormation はスタックを作成できないため、例外をスローします。
Parameters: [KeyName] must have values
プロパティ
AllowedPattern
-
String
またはCommaDelimitedList
タイプに使用できるパターンを表す正規表現。タイプString
のパラメータに適用される場合、パターンは指定されたパラメータ値全体と一致する必要があります。タイプCommaDelimitedList
のパラメータに適用される場合、パターンはリスト内の各値と一致する必要があります。必須: いいえ
AllowedValues
-
パラメーターに許容される一連の値を含む配列。タイプ
String
のパラメータに適用する場合、パラメータ値は許可された値のいずれかである必要があります。タイプCommaDelimitedList
のパラメータに適用される場合、リスト内の各値は、指定および許可された値のいずれかである必要があります。必須: いいえ
注記
YAML を使用していて、
AllowedValues
にYes
とNo
文字列を使用する場合、一重引用符を使用して YAML パーサーがこれらのブール値を考慮することを防ぎます。 ConstraintDescription
-
制約が違反された場合に、制約について説明する文字列。たとえば、制約の説明を指定しないとき、許容されているパターンが
[A-Za-z0-9]+
であるパラメーターの場合、ユーザーが無効な値を指定すると次のエラーメッセージが表示されます。Malformed input-Parameter MyParameter must match pattern [A-Za-z0-9]+
must only contain letters (uppercase and lowercase) and numbers などの制約の説明を追加することによって、次のようにカスタマイズされたエラーメッセージを表示することができます。
Malformed input-Parameter MyParameter must only contain uppercase and lowercase letters and numbers
必須: いいえ
Default
-
スタックの作成時に値を指定しなかった場合に、テンプレートで使用される適切な型の値。パラメーターの制約を定義する場合は、これらの制約に従う値を指定する必要があります。
必須: いいえ
Description
-
パラメーターについて説明する最大 4000 文字の文字列。
必須: いいえ
MaxLength
-
String
型に使用できる最大文字数を決定する整数値。必須: いいえ
MaxValue
-
Number
型に使用できる数値の最大値を決定する数値。必須: いいえ
MinLength
-
String
型に使用できる最小文字数を決定する整数値。必須: いいえ
MinValue
-
Number
型に使用できる数値の最小値を決定する数値。必須: いいえ
NoEcho
-
パラメータ値をマスクして、コンソール、コマンドラインツール、または API に表示されないようにするかどうか。
NoEcho
属性をtrue
に設定すると、CloudFormation は、スタックまたはスタックイベントを記述するすべての呼び出しに対して、アスタリスク (*****) としてマスクされたパラメータ値を返します。ただし、以下に指定された場所に保存されている情報は除きます。必須: いいえ
重要
NoEcho
属性を使用しても、以下に保存されている情報はマスクされません。-
Metadata
テンプレートセクション。CloudFormation は、Metadata
セクションに含める情報の変換、変更、または編集を行いません。詳細については、「CloudFormation テンプレートの Metadata 構文」を参照してください。 -
Outputs
テンプレートセクション。詳細については、「CloudFormation テンプレートの Outputs 構文」を参照してください。 -
リソース定義の
Metadata
属性。詳細については、「Metadata 属性」を参照してください。
パスワードやシークレットなどの機密情報を含めるには、これらのメカニズムを使用しないことを強くお勧めします。
重要
機密情報は、CloudFormation テンプレートに直接埋め込むのではなく、スタックテンプレートの動的パラメータを使用して CloudFormation の外部 (AWS Systems Manager パラメータストアや AWS Secrets Manager など) に保存して管理した上で 参照することをお勧めします。
詳細については、「テンプレートに認証情報を埋め込まない のベストプラクティス」を参照してください。
重要
リソースのプライマリ識別子の一部であるリソースプロパティには、
NoEcho
パラメータや機密データを含めないことを強くお勧めします。プライマリリソース識別子を形成するプロパティに
NoEcho
パラメータが含まれている場合、CloudFormation はプライマリリソース識別子に実際の平文値を使用する場合があります。このリソース ID は、派生した出力または送信先に表示されます。リソースタイプのプライマリ識別子を構成するリソースプロパティを確認するには、AWS リソースおよびプロパティタイプのリファレンス でそのリソースのリソースリファレンスドキュメントを参照してください。[Return values] (戻り値) セクションの
Ref
関数の戻り値は、リソースタイプのプライマリ識別子を構成するリソースプロパティを表します。 -
Type
-
パラメーターのデータ型 (
DataType
)。必須: はい
CloudFormation では次のパラメータタイプをサポートしています。
String
-
リテラル文字列。
MinLength
、MaxLength
、Default
、AllowedValues
、AllowedPattern
の各属性を使用して制約を宣言できます。たとえば、次のように指定します。
"MyUserName"
Number
-
整数または浮動小数点値。CloudFormation は、このパラメータを数値として検証しますが、テンプレート内の他の場所で使用した場合には (
Ref
組み込み関数を使用した場合など) 文字列として扱います。MinValue
、MaxValue
、Default
、AllowedValues
の各属性を使用して制約を宣言できます。たとえば、次のように指定します。
"8888"
List<Number>
-
カンマで区切られた整数または浮動小数点値の配列。CloudFormation は、このパラメータを数値として検証しますが、テンプレート内の他の場所で使用した場合には (
Ref
組み込み関数を使用した場合など) 文字列のリストとして扱います。たとえば、
"80,20"
と指定し、Ref
を使用した場合には["80","20"]
となります。 CommaDelimitedList
-
カンマで区切られたリテラル文字列の配列。文字列の合計数は、カンマの合計数よりも 1 つ多いはずです。また、各メンバー文字列の前後の空白は削除されます。
たとえば、
"test,dev,prod"
と指定し、Ref
を使用した場合には["test","dev","prod"]
となります。 - AWS 固有のパラメータタイプ
-
Amazon EC2 キーペアの名前や VPC の ID などの AWS の値です。詳細については、「実行時に既存のリソースを指定する」を参照してください。
- Systems Manager パラメータタイプ
-
Systems Manager パラメーターストア内の既存のパラメーターに対応するパラメーター。Systems Manager パラメータキーは Systems Manager パラメータタイプの値として指定します。CloudFormation は Parameter Store から最新の値を取得し、スタックに使用します。詳細については、「実行時に既存のリソースを指定する」を参照してください。
パラメーターの一般要件
パラメーターを使用するときに以下の要件が適用されます。
-
CloudFormation テンプレートに指定できるパラメータは最大 200 個です。
-
各パラメータには、英数字でテンプレート内のどの論理名とも重複しない論理名 (論理 ID と呼ばれます) を指定する必要があります。
-
各パラメータには、CloudFormation でサポートされているパラメータタイプを割り当てる必要があります。詳細については、「Type」を参照してください。
-
CloudFormation がスタックを正常にプロビジョニングするには、各パラメータに実行時に値を割り当てる必要があります。別の値が指定されている場合を除き、必要に応じて、使用する CloudFormation のデフォルト値を指定できます。
-
パラメーターは、同じテンプレート内から宣言および参照する必要があります。テンプレートの
Resources
およびOutputs
セクションのパラメーターを参照できます。
例
シンプルな文字列パラメータ
以下の例では、String
タイプの InstanceTypeParameter
というパラメータを宣言します。このパラメータを使用すると、スタックの Amazon EC2 インスタンスタイプを指定できます。スタックの作成時または更新時に値が指定されていない場合、CloudFormation はデフォルト値の t2.micro
を使用します。
JSON
"Parameters" : {
"InstanceTypeParameter" : {
"Description" : "Enter t2.micro, m1.small, or m1.large. Default is t2.micro.",
"Type" : "String",
"Default" : "t2.micro",
"AllowedValues" : ["t2.micro", "m1.small", "m1.large"]
}
}
YAML
Parameters:
InstanceTypeParameter:
Description: Enter t2.micro, m1.small, or m1.large. Default is t2.micro.
Type: String
Default: t2.micro
AllowedValues:
- t2.micro
- m1.small
- m1.large
パスワードパラメータ
次の例では、デフォルト値のない String
タイプの DBPwd
というパラメータを宣言します。NoEcho
プロパティは true
に設定され、スタックの説明にパラメータ値が表示されないようにします。指定できる最小値は 1
、最大値は 41
です。パターンには、英文字の大文字と小文字、および数字を使用できます。この例では、AllowedPattern
プロパティに正規表現を使用する方法も示しています。
JSON
"Parameters" : {
"DBPwd" : {
"NoEcho" : "true",
"Description" : "The database admin account password",
"Type" : "String",
"MinLength" : "1",
"MaxLength" : "41",
"AllowedPattern" : "^[a-zA-Z0-9]*$"
}
}
YAML
Parameters:
DBPwd:
NoEcho: true
Description: The database admin account password
Type: String
MinLength: 1
MaxLength: 41
AllowedPattern: ^[a-zA-Z0-9]*$
パラメータの参照
パラメータを参照するには、Ref
組み込み関数を使用します。CloudFormation は、パラメータの値を使用してスタックをプロビジョニングします。同じテンプレートの Resources
および Outputs
セクションのパラメーターを参照できます。
次の例では、EC2 インスタンスリソースの InstanceType
プロパティが InstanceTypeParameter
パラメーター値を参照します。
JSON
"Ec2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"InstanceType" : { "Ref" : "InstanceTypeParameter" },
"ImageId" : "ami-0ff8a91507f77f867"
}
}
YAML
Ec2Instance:
Type: AWS::EC2::Instance
Properties:
InstanceType:
Ref: InstanceTypeParameter
ImageId: ami-0ff8a91507f77f867
カンマ区切りリストのパラメータ
CommaDelimitedList
パラメータタイプは、1 つのプロパティに複数の値を指定する必要がある場合に役立ちます。次の例では、デフォルト値 (3 つの CIDR ブロックがカンマで区切られている) を使用した DbSubnetIpBlocks
というパラメータを宣言します。
JSON
"Parameters" : {
"DbSubnetIpBlocks": {
"Description": "Comma-delimited list of three CIDR blocks",
"Type": "CommaDelimitedList",
"Default": "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24"
}
}
YAML
Parameters:
DbSubnetIpBlocks:
Description: "Comma-delimited list of three CIDR blocks"
Type: CommaDelimitedList
Default: "10.0.48.0/24, 10.0.112.0/24, 10.0.176.0/24"
カンマ区切りリストのパラメータから値を返します
パラメータのカンマ区切りリストから特定の値を参照するには、テンプレートの Resources
セクションで、Fn::Select
組み込み関数を使用します。次の例のように、必要なオブジェクトのインデックス値とオブジェクトのリストを渡します。
JSON
{
"Parameters": {
"VPC": {
"Type": "String",
"Default": "vpc-123456"
},
"VpcAzs": {
"Type": "CommaDelimitedList",
"Default": "us-west-2a, us-west-2b, us-west-2c"
},
"DbSubnetIpBlocks": {
"Type": "CommaDelimitedList",
"Default": "172.16.0.0/26, 172.16.0.64/26, 172.16.0.128/26"
}
},
"Resources": {
"DbSubnet1": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"AvailabilityZone": {
"Fn::Sub": [
"${AWS::Region}${AZ}",
{
"AZ": {
"Fn::Select": [
0,
{ "Ref": "VpcAzs" }
]
}
}
]
},
"VpcId": {
"Ref": "VPC"
},
"CidrBlock": {
"Fn::Select": [
0,
{ "Ref": "DbSubnetIpBlocks" }
]
}
}
},
"DbSubnet2": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"AvailabilityZone": {
"Fn::Sub": [
"${AWS::Region}${AZ}",
{
"AZ": {
"Fn::Select": [
1,
{ "Ref": "VpcAzs" }
]
}
}
]
},
"VpcId": {
"Ref": "VPC"
},
"CidrBlock": {
"Fn::Select": [
1,
{ "Ref": "DbSubnetIpBlocks" }
]
}
}
},
"DbSubnet3": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"AvailabilityZone": {
"Fn::Sub": [
"${AWS::Region}${AZ}",
{
"AZ": {
"Fn::Select": [
2,
{ "Ref": "VpcAzs" }
]
}
}
]
},
"VpcId": {
"Ref": "VPC"
},
"CidrBlock": {
"Fn::Select": [
2,
{ "Ref": "DbSubnetIpBlocks" }
]
}
}
}
}
}
YAML
Parameters:
VPC:
Type: String
Default: vpc-123456
VpcAzs:
Type: CommaDelimitedList
Default: us-west-2a, us-west-2b, us-west-2c
DbSubnetIpBlocks:
Type: CommaDelimitedList
Default: 172.16.0.0/26, 172.16.0.64/26, 172.16.0.128/26
Resources:
DbSubnet1:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: !Sub
- ${AWS::Region}${AZ}
- AZ: !Select
- 0
- !Ref VpcAzs
VpcId: !Ref VPC
CidrBlock: !Select
- 0
- !Ref DbSubnetIpBlocks
DbSubnet2:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: !Sub
- ${AWS::Region}${AZ}
- AZ: !Select
- 1
- !Ref VpcAzs
VpcId: !Ref VPC
CidrBlock: !Select
- 1
- !Ref DbSubnetIpBlocks
DbSubnet3:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: !Sub
- ${AWS::Region}${AZ}
- AZ: !Select
- 2
- !Ref VpcAzs
VpcId: !Ref VPC
CidrBlock: !Select
- 2
- !Ref DbSubnetIpBlocks
関連リソース
CloudFormation では、動的参照を使用してプロパティ値を動的に指定することもできます。例えば、Systems Manager パラメータストアに保存されている Secure String を参照する必要がある場合があります。詳細については、「動的参照を使用して他のサービスに格納されている値を取得する」を参照してください。
Ref
または Sub
関数内で擬似パラメータを使用して、値を動的に入力することもできます。詳細については、「擬似パラメータ参照」を参照してください。