CloudFormation の YAML テンプレートで特定のタグの値が true または false に自動的に変わる理由を教えてください
困っていた内容
CloudFormation の YAML テンプレートで、特定のタグを付与したリソースを作成しました。
yes というタグの値を付与したリソースのタグを確認すると、true に自動的に変わっていました。
CloudFormation の YAML テンプレートで特定のタグの値が true または false に自動的に変わる理由を教えてください。
どう対応すればいいの?
CloudFormation の YAML テンプレートで特定のタグの値が true または false に自動的に変わるのは、YAML バージョン 1.1 の仕様です。
Boolean Language-Independent Type for YAML™ Version 1.1
A Boolean represents a true/false value. Booleans are formatted as English words (“true”/“false”, “yes”/“no” or “on”/“off”) for readability and may be abbreviated as a single character “y”/“n” or “Y”/“N”.
CloudFormation は、いくつかの例外を除き、YAML バージョン 1.1 の仕様をサポートしているため、CloudFormation で YAML テンプレートを使用すると、以下の値が true または false に自動的に変わります。
- yes/no
- on/off
CloudFormation テンプレート形式 - AWS CloudFormation
CloudFormation は YAML バージョン 1.1 仕様をサポートしていますが、いくつかの例外があります。
回避策として、以下の方法があります。
- 値をダブルクォーテーションで囲む
- "yes", "off", "on", "off" など
- JSON テンプレートを使用する
やってみた
実際に以下の 3 つのパターンを試してみました。
- YAML テンプレートでダブルクォーテーションを使用せずに yes という値をタグに設定
- YAML テンプレートでダブルクォーテーションを使用して "yes" という値をタグに設定
- JSON テンプレートで "yes" という値をタグに設定
1. YAML テンプレートでダブルクォーテーションを使用せずに yes という値をタグに設定
以下の YAML テンプレートを使用して、VPC を作成します。
AWSTemplateFormatVersion: "2010-09-09"
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: yes
CloudFormation で上記テンプレートでスタックを作成し、VPC コンソールで Name タグの値を確認すると、true に変わっていました。
2. 2. YAML テンプレートでダブルクォーテーションを使用して "yes" という値をタグに設定
先ほどの YAML テンプレートの値をダブルクォーテーションで囲みます。
AWSTemplateFormatVersion: "2010-09-09"
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: "yes"
上記テンプレートで CloudFormation スタックを更新し、VPC の Name タグの値を確認すると、yes に変わっており、テンプレート通りの値となりました。
3. JSON テンプレートで "yes" という値をタグに設定
今度は JSON テンプレートで試してみます。
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"VPC": {
"Type": "AWS::EC2::VPC",
"Properties": {
"CidrBlock": "10.0.0.0/16",
"Tags": [
{
"Key": "Name",
"Value": "yes"
}
]
}
}
}
}
CloudFormation で上記テンプレートでスタックを作成し、VPC コンソールで Name タグの値を確認すると、テンプレート通りに yes の値となりました。