使用Ref作为Fn :: Sub内部函数的第一个参数

Dmi*_*bin 6 amazon-web-services aws-cloudformation

在编译模板时我遇到了很奇怪的问题,我在其中引用了一个字符串参数Fn::Sub,而文档明确地说可以使用Ref内部的函数Fn::Sub.这是一块模板:

"Resources": {
    "LaunchConfiguration": {
      "Type" : "AWS::AutoScaling::LaunchConfiguration",
      "Properties" : {
        "UserData": { "Fn::Base64": { "Fn::Sub": { "Ref": "UserDataParam" } } },
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

模板错误:一个或多个Fn :: Sub内部函数未指定预期参数.指定字符串作为第一个参数,并指定可选的第二个参数以指定要在字符串中替换的值的映射

当我使用完整符号:时{ "Fn::Sub": [ { "Ref": "UserDataParam" }, {} ] },我得到完全相同的错误.有没有人有同样的问题?是否可以在使用参数时避免使用它?

jen*_*ter 1

您不能在 Fn::Sub 函数调用中直接使用 Ref。要实现值映射,首先必须将 Ref 值分配给局部变量并在 Fn::Sub 字符串中使用该变量。

"UserData": {
  "Fn::Base64": {
    "Fn::Sub": [
      "${variable}",
      {
        "variable": {
          "Ref": "myS3Bucket"
        }
      }]
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 使用这种方法,它不会替换“myS3Bucket”内的变量,我认为这是将其作为“Sub”第一个参数的主要目标。 (2认同)