【AWS】CloudFormation ~ Parameters ~

■ はじめに

https://dk521123.hatenablog.com/entry/2021/12/01/170326

で扱った Parameters について、業務でノウハウが溜まってきたので
ここらでまとめてみる

目次

【1】Parameters
【2】使用上の注意
【3】Parameters を設定する
 1)基本系
 2)値を選択する
 3)値を制限するには
 4)機密情報を入力する場合(簡易版)
 5)機密情報を入力する場合(正式版)
 6)複数値を入力したい場合
【4】値を参照するには
 補足:疑似パラメータ (Pseudo parameters) 

【1】Parameters

* CloudFormation における 入力値を設定できる項目

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html

* データ型、デフォルト値、最大値、最小値などを設定可能
* 指定した値は、「Resources」「Outputs」で使用できる

【2】使用上の注意

* 実際に使うUserDataで使う場合、$XXX/${XXX}/${!XXX} の違いに注意
 => 詳細は、以下の関連記事を参照のこと。

CloudFormationで変数を参照したら、エラー「Unresolved resource dependencies」が表示
https://dk521123.hatenablog.com/entry/2024/02/27/211050

【3】Parameters を設定する

1)基本系

Parameters:
  GithubRepository:
    Description: This is a sample input.
    Type: String
    Default: https://github.com/dk521123/cicd-demo.git

2)値を選択する

* AllowedValues を使う

例1:選択させる項目

Parameters:
  EnvironmentType:
    Description: Enter environment type
    Type: String
    Default: dev
    AllowedValues:
      - dev
      - stage
      - prod

例2:EC2 instance Type

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

3)値を制限するには

* 以下を駆使して実装する

 + MinValue
 + MaxValue
 + MinLength
 + MaxLength
 + AllowedPattern

例1:MinValue/MaxValue

Parameters:
  SamplePort:
    Description: This is a sample input.
    Type: Number
    Default: 443
    MinValue: 1
    MaxValue: 65534

例2:正規表現による文字種制限

Parameters:
  SystemName:
    Type: String
    Default: hello-world-demo
    AllowedPattern: "[-_ a-zA-Z0-9]*"
    ConstraintDescription: "must only contain letters (-_ a-zA-Z0-9)"

# ConstraintDescription: 制約が違反された場合に、制約について説明する文字列

4)機密情報を入力する場合(簡易版)

* NoEcho: true を使う

例1:パスワード

Parameters:
  Password:
    Description: This is a sample.
    NoEcho: true
    Type: String

5)機密情報を入力する場合(正式版)

* Type: AWS::SSM::Parameter::Value を使う

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html#aws-ssm-parameter-types
例1:パスワード

Parameters:
  Password:
    Description: Input Systems Manager key for password
    NoEcho: true
    Type: AWS::SSM::Parameter::Value<String>

6)複数値を入力したい場合

* 「Type: CommaDelimitedList」「Type: List<Number>」を使う

例1:CommaDelimitedList

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"

【4】値を参照するには

# 値をそのまま使いたい場合、Ref 組み込み関数(!Ref)を使用
Repo: !Ref GithubRepository

# 詳細は、以下の関連記事を参照のこと。

CloudFormation ~ 組み込み関数 ~
https://dk521123.hatenablog.com/entry/2021/12/04/202519

補足:疑似パラメータ (Pseudo parameters)

# CloudFormation には、事前定義されたパラメータがある
Outputs:
  MyStacksRegion:
    Value: !Ref "AWS::Region"

# 詳細は、以下の関連記事を参照のこと。

CloudFormation ~ 疑似パラメータ ~
https://dk521123.hatenablog.com/entry/2021/12/05/134313

参考文献

https://dev.classmethod.jp/articles/list-of-cloudformation-parameters-by-data-type/

関連記事

CloudFormation ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2024/02/10/231900
CloudFormation ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/26/224812
CloudFormation ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/12/01/170326
CloudFormation ~ 開発環境 ~
https://dk521123.hatenablog.com/entry/2022/05/22/000000
CloudFormation ~ 組み込み関数 ~
https://dk521123.hatenablog.com/entry/2021/12/04/202519
CloudFormation ~ 条件分岐 ~
https://dk521123.hatenablog.com/entry/2022/07/02/214543
CloudFormation ~ 疑似パラメータ ~
https://dk521123.hatenablog.com/entry/2021/12/05/134313
CloudFormation ~ DeletionPolicy 属性 ~
https://dk521123.hatenablog.com/entry/2021/12/27/211328
CloudFormation ~ 認証情報の扱い ~
https://dk521123.hatenablog.com/entry/2021/12/28/224501
CloudFormation ~ S3 ~
https://dk521123.hatenablog.com/entry/2022/05/25/220037
CloudFormation ~ KMS ~
https://dk521123.hatenablog.com/entry/2022/05/26/112627
CloudFormation ~ IAM ~
https://dk521123.hatenablog.com/entry/2022/05/27/100820
CloudFormation ~ EC2 ~
https://dk521123.hatenablog.com/entry/2024/02/11/010935
CloudFormation で Github/CodePipeline/CodeBuild を構築する
https://dk521123.hatenablog.com/entry/2021/12/26/155956
CloudFormation でのトラブル
https://dk521123.hatenablog.com/entry/2022/05/30/191507
CloudFormationで変数を参照したら、エラー「Unresolved resource dependencies」が表示
https://dk521123.hatenablog.com/entry/2024/02/27/211050
シェル ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/10/23/005406
シェル ~ Shebang
https://dk521123.hatenablog.com/entry/2024/02/02/000000
ヒアドキュメント ~ 複数行の テキストをファイル出力する ~
https://dk521123.hatenablog.com/entry/2016/05/13/231535