在 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}
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>