CloudFormation の YAML テンプレートで特定のタグの値が true または false に自動的に変わる理由を教えてください

2022.06.27

困っていた内容

CloudFormation の YAML テンプレートで、特定のタグを付与したリソースを作成しました。
yes というタグの値を付与したリソースのタグを確認すると、true に自動的に変わっていました。
CloudFormation の YAML テンプレートで特定のタグの値が true または false に自動的に変わる理由を教えてください。

どう対応すればいいの?

CloudFormation の YAML テンプレートで特定のタグの値が true または false に自動的に変わるのは、YAML バージョン 1.1 の仕様です。

YAML バージョン 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

AWS 公式ドキュメントより

AWS CloudFormation は、いくつかの例外を除き、YAML バージョン 1.1 の仕様をサポートしています。

回避策として、以下の方法があります。

・値をダブルクォーテーションで囲む
"yes", "off", "on", "off" など

・JSON テンプレートを使用する

やってみた

実際に以下の 3 つのパターンを試してみました。  

・YAML テンプレートでダブルクォーテーションを使用せずに yes という値をタグに設定
・YAML テンプレートでダブルクォーテーションを使用して "yes" という値をタグに設定
・JSON テンプレートで "yes" という値をタグに設定

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 に変わっていました。

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 に変わっており、テンプレート通りの値となりました。

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 の値となりました。

参考資料