AllowedPattern参数行为显然无法匹配简单的正则表达式

时间:2017-01-06 11:28:31

标签: amazon-web-services amazon-cloudformation

在Cloudformation中,我使用简单的AllowedPattern验证参数输入:

"ServicePassword": {
  "Description":           "Password for the AD service account",
  "Type":                  "String",
  "AllowedPattern":        "^."
},

variables.json文件包含一行(密码已编辑):

{"ParameterKey": "ServicePassword",  "ParameterValue": "E_redacted"},

(首字母大写字母E;字符串的剩余部分已编辑。)

调用Cloudformation时:

$ aws cloudformation create-stack --stack-name bastion_redacted --template-body file://Bastion.json --parameters file://variables.json --capabilities CAPABILITY_IAM --disable-rollback
An error occurred (ValidationError) when calling the CreateStack operation: Parameter 'ServicePassword' must match pattern ^.

我使用更简单的正则表达式看到了同样的问题,这只是一个字符串 - "AllowedPattern": "hello"

如果我只是从模板中删除AllowedPattern行,它就可以正常工作。

这是一个错误吗?我做错了吗?

1 个答案:

答案 0 :(得分:1)

CloudFormation regexes使用java.util.regex.Pattern了解其语法和行为,因此您可以查看Java的文档以获取参考。 AllowedPattern Parameters属性要求模式匹配整个输入字符串(不仅仅是部分),否则它将拒绝输入。

模式^匹配行的开头,.匹配任何单个字符,因此您现有的正则表达式会匹配x或{等输入{1}}。要匹配多个字符,您需要添加一个"贪心量词"例如0匹配任意数量的字符,或*匹配一个或多个字符。 (由于+仍然匹配整个字符串,因此不需要AllowedPattern,因此可以删除。)

这样的东西应该像一个简单的正则表达式匹配任何类型的任意数量的字符:

^

或者您可以将"ServicePassword": { "Description": "Password for the AD service account", "Type": "String", "AllowedPattern": ".*" }, 用于与任何类型的一个或多个字符匹配的同样简单的正则表达式。