CloudFormation:!sub 不适用于名称

问题描述 投票:0回答:1

在 CloudFormation 中,每当我尝试将

MyComponentVersion
用于我的
Name
时,我总是会收到以下错误:

Resource handler returned message: "The value supplied for parameter 'name' is not valid. name must match pattern ^[-_A-Za-z-0-9][-_A-Za-z0-9 ]{1,126}[-_A-Za-z-0-9]$ (Service: Imagebuilder, Status Code: 400, Request ID: 249299d3-91b5-43f7-b9ed-1bf01e543821)" (RequestToken: ce08ef58-8fb7-8156-fa7c-c607e318e42a, HandlerErrorCode: InvalidRequest)

但是,如果我将

 Name: !Sub 'MyComponent-v${MyComponentVersion}'
替换为
Name: 'SomeText
完全没问题。我尝试删除
-
并只放置
${MyComponentVersion}
但仍然失败。似乎我不能使用
{MyComponentVersion}
作为我的
Name
的一部分。不过我可以在
data's
name
中使用它,没问题。

我该如何解决并让

Name: !Sub 'MyComponent-v${MyComponentVersion}
被接受?

Parameters:
  MyComponentVersion:
    Type: String
    Default: '2.0.0'
    Description: Installs component

Resources:
  MyComponent:
    Type: AWS::ImageBuilder::Component
    Properties:
      Name: !Sub 'MyComponent-v${MyComponentVersion}'
      Data: !Sub |
        name: MyComponent-${MyComponentVersion}

我已经尝试过:

  • 将名称:
    !Sub 'MyComponent-v${MyComponentVersion}
    替换为
    {MyComponentVersion}
  • 只需使用普通文本看看是否有效
amazon-web-services yaml aws-cloudformation
1个回答
0
投票

AWS::ImageBuilder::Component
的属性通过不同的约束进行验证:

  • Data
    是长度在 1 - 16000 个字符之间的任意字符串
  • Name
    是一个字符串,需要符合模式
    ^[-_A-Za-z-0-9][-_A-Za-z0-9 ]{1,126}[-_A-Za-z-0-9]$

您可以在此处找到详细规格。

根据提供的信息,我预计

${MyComponentVersion}
包含非字母数字字符,或者
MyComponent-v${MyComponentVersion}
生成的字符串长度超过 126 个字符。

一般来说,您应该也可以在

Name
属性中使用替换,但生成的字符串需要符合验证。

要调试哪些数据和属性已发送到底层服务(在您的情况下为 ImageBuilder),您可以使用以下命令来调查您的 CloudFormation 堆栈:

aws cloudformation describe-stack-events --stack-name <your-stack-name>
© www.soinside.com 2019 - 2024. All rights reserved.