【问题标题】:CloudFormation Template with Reference or TopLevel Fn::FindInMap具有参考或 TopLevel Fn::FindInMap 的 CloudFormation 模板
【发布时间】:2016-08-04 19:46:34
【问题描述】:

我的模板中定义了以下映射

"Mappings": {
"TimeBasedAutoScale"  : {
  "days" : {
    "weekend" : {"0":"off","1":"off","2":"off","3":"off","4":"off","5":"off","6":"off","7":"off","8":"off","9":"off","10":"off","11":"off","12":"off","13":"off","14":"off","15":"off","16":"off","17":"off","18":"off","19":"off","20":"off","21":"off","22":"off","23":"off"},
    "weekday1" : {"0":"off","1":"off","2":"on","3":"on","4":"on","5":"on","6":"on","7":"on","8":"on","9":"on","10":"on","11":"on","12":"on","13":"on","14":"on","15":"on","16":"on","17":"on","18":"on","19":"on","20":"on","21":"on","22":"off","23":"off"},
    "weekday2" : {"0":"off","1":"off","2":"off","3":"on","4":"on","5":"on","6":"on","7":"on","8":"on","9":"on","10":"on","11":"on","12":"on","13":"on","14":"on","15":"on","16":"on","17":"on","18":"on","19":"on","20":"on","21":"on","22":"off","23":"off"}
  }
},
"TimeBasedSchedule": {
  "6AMTimeBasedSchedule" : {
    "schedule" : {
      "Monday" : { "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekday1"]},
      "Tuesday" : { "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekday1"]},
      "Wednesday" :{ "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekday1"]},
      "Thursday" : { "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekday1"]},
      "Friday" : { "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekday1"]},
      "Saturday" : { "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekend"]}, 
     "Sunday" : { "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekend"]}
  }
},
"7AMTimeBasedSchedule" : {
  "schedule" :  {
    "Monday" : { "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekday1"]},
    "Tuesday" : { "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekday1"]},
    "Wednesday" :{ "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekday1"]},
    "Thursday" : { "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekday1"]},
    "Friday" : { "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekday1"]},
    "Saturday" : { "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekend"]}, 
    "Sunday" : { "Fn::FindInMap" : [ "TimeBasedAutoScale", "days", "weekend"]}
  }
}}

但是,验证失败,在looking at the docs 之后我明白了原因。映射函数需要一个三层键,值只能是字符串或列表。

是否可以通过reference 或更好的映射来完成上述操作?

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案1】:

    要完成多级映射,请直接在 ResourcesOutputs 部分中应用嵌套的 Fn::FindInMap 内部函数。

    这是您示例的完整工作版本:

    {
      "Description": "Return 'on' or 'off' according to the provided schedule, hour of day, and day of week.",
      "Mappings": {
        "TimeBasedAutoScale": {
          "weekend" : {"0":"off","1":"off","2":"off","3":"off","4":"off","5":"off","6":"off","7":"off","8":"off","9":"off","10":"off","11":"off","12":"off","13":"off","14":"off","15":"off","16":"off","17":"off","18":"off","19":"off","20":"off","21":"off","22":"off","23":"off"},
          "weekday1" : {"0":"off","1":"off","2":"on","3":"on","4":"on","5":"on","6":"on","7":"on","8":"on","9":"on","10":"on","11":"on","12":"on","13":"on","14":"on","15":"on","16":"on","17":"on","18":"on","19":"on","20":"on","21":"on","22":"off","23":"off"},
          "weekday2" : {"0":"off","1":"off","2":"off","3":"on","4":"on","5":"on","6":"on","7":"on","8":"on","9":"on","10":"on","11":"on","12":"on","13":"on","14":"on","15":"on","16":"on","17":"on","18":"on","19":"on","20":"on","21":"on","22":"off","23":"off"}
      },
        "TimeBasedSchedule": {
          "6AMTimeBasedSchedule": {
            "Monday": "weekday1",
            "Tuesday": "weekday1",
            "Wednesday": "weekday1",
            "Thursday": "weekday1",
            "Friday": "weekday1",
            "Saturday": "weekend",
            "Sunday": "weekend"
          },
          "7AMTimeBasedSchedule": {
            "Monday": "weekday2",
            "Tuesday": "weekday2",
            "Wednesday": "weekday2",
            "Thursday": "weekday2",
            "Friday": "weekday2",
            "Saturday": "weekend",
            "Sunday": "weekend"
          }
        }
      },
      "Parameters": {
        "Schedule": {
          "Description": "Selected schedule",
          "Type": "String",
          "AllowedValues" : [ "6AMTimeBasedSchedule", "7AMTimeBasedSchedule" ],
          "Default": "6AMTimeBasedSchedule"
        },
        "DayOfWeek": {
          "Description": "Day of week",
          "Type": "String",
          "AllowedValues" : [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ],
          "Default": "Monday"
        },
        "HourOfDay": {
          "Description": "Hour of Day",
          "Type": "Number",
          "MinValue": "0",
          "MaxValue": "23",
          "Default": "0"
        }
      },
      "Resources": {
        "Dummy": {
          "Type": "AWS::CloudFormation::WaitConditionHandle"
        }
      },
      "Outputs": {
        "Result": {
          "Value": {
            "Fn::FindInMap": [
              "TimeBasedAutoScale",
              {"Fn::FindInMap": ["TimeBasedSchedule", "6AMTimeBasedSchedule", {"Ref": "DayOfWeek"}]},
              {"Ref": "HourOfDay"}
            ]
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 2019-10-02
      • 2023-03-28
      相关资源
      最近更新 更多