我正在编写创建 AWS Service Catalog 产品的 AWS CloudFormation 模板(使用 yaml)。我正在使用参数 S3FilePath 获取产品的模板,该参数的值类似于上述路径:https ://bucket.s3-eu-west-1.amazonaws.com/template.yml 。文件的 URL 需要以 JSON 格式发送,如下所示(此示例有效):
Resources:
Type: AWS::ServiceCatalog::CloudFormationProduct
Properties:
Description: Example Product
Distributor: xyz
Name: ExampleProduct
Owner: xyz
ProvisioningArtifactParameters:
- Description: Example Product
Info: { "LoadTemplateFromURL": "https://bucket.s3-eu-west-1.amazonaws.com/template.yml" }
Name: Version1
我尝试使用 !Sub 和 !Ref 替换 URL,如下所示:
Parameters:
S3FilePath:
Type: String
Description: file name
Resources:
Type: AWS::ServiceCatalog::CloudFormationProduct
Properties:
Description: Example Product
Distributor: xyz
Name: ExampleProduct
Owner: xyz
ProvisioningArtifactParameters:
- Description: Example Product
Info: !Sub
- '{ "LoadTemplateFromURL": "${FILEPATH}" }'
- {FILEPATH: !Ref S3FilePath}
Name: Version1
但 CloudFormation 堆栈失败并出现错误:“无效输入”。我想我以错误的方式构建 JSON,我尝试在每个 '"' 之前使用 \ 但它也没有帮助,我找不到解释如何正确构建它的示例。没有问题S3FilePath 参数。
您能否建议如何正确使用 !Sub 和 !Ref 来构建 JSON?谢谢。