Parameters - AWS CloudFormation

Parameters

オプションの 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 だけで、StringNumber のほか、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 を使用していて、AllowedValuesYesNo 文字列を使用する場合、一重引用符を使用して 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 セクションに含める情報の変換、変更、または編集を行いません。詳細については、「Metadata」を参照してください。

  • Outputs テンプレートセクション。詳細については、「Outputs」を参照してください。

  • リソース定義の Metadata 属性。詳細については、「Metadata 属性」を参照してください。

パスワードやシークレットなどの機密情報を含めるには、これらのメカニズムを使用しないことを強くお勧めします。

重要

機密情報は、CloudFormation テンプレートに直接埋め込むのではなく、スタックテンプレートの動的パラメータを使用して CloudFormation の外部 (AWS Systems Manager パラメータストアや AWS Secrets Manager など) に保存して管理した上で 参照することをお勧めします。

詳細については、「テンプレートに認証情報を埋め込まない のベストプラクティス」を参照してください。

重要

リソースのプライマリ識別子の一部であるリソースプロパティには、NoEcho パラメータや機密データを含めないことを強くお勧めします。

プライマリリソース識別子を形成するプロパティに NoEcho パラメータが含まれている場合、CloudFormation はプライマリリソース識別子に実際の平文値を使用する場合があります。このリソース ID は、派生した出力または送信先に表示されます。

リソースタイプのプライマリ識別子を構成するリソースプロパティを確認するには、AWS リソースおよびプロパティタイプのリファレンス でそのリソースのリソースリファレンスドキュメントを参照してください。[Return values] (戻り値) セクションの Ref 関数の戻り値は、リソースタイプのプライマリ識別子を構成するリソースプロパティを表します。

Type

パラメーターのデータ型 (DataType)。

必須: はい

CloudFormation では次のパラメータタイプをサポートしています。

String

リテラル文字列。MinLengthMaxLengthDefaultAllowedValuesAllowedPattern の各属性を使用して制約を宣言できます。

たとえば、次のように指定します。"MyUserName"

Number

整数または浮動小数点値。CloudFormation は、このパラメータを数値として検証しますが、テンプレート内の他の場所で使用した場合には (Ref 組み込み関数を使用した場合など) 文字列として扱います。

MinValueMaxValueDefaultAllowedValues の各属性を使用して制約を宣言できます。

たとえば、次のように指定します。"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 の値です。詳細については、「AWS 固有のパラメータタイプのリファレンス」を参照してください。

Systems Manager パラメータタイプ

Systems Manager パラメーターストア内の既存のパラメーターに対応するパラメーター。Systems Manager パラメータキーは Systems Manager パラメータの値として指定します。CloudFormation は、スタックに使用するパラメータストアから最新の値を取得します。詳細については、「Systems Manager パラメータタイプのリファレンス」を参照してください。

パラメーターの一般要件

パラメーターを使用するときに以下の要件が適用されます。

  • 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 関数内で擬似パラメータを使用して、値を動的に入力することもできます。詳細については、「擬似パラメータ参照」を参照してください。