解决方案:不要使用yml。
我尝试传递包含db名称和db密码的参数以及我的aws cloudformation stack-create
命令。我找回了一个并没有多大意义的错误。
Value of property MasterUsername must be of type String
现在,要知道的一件事是我有控制台访问权限,所以我可以真正看到密码和用户名在控制台中以设置的方式返回。它们看起来像我的字符串。
YAML版本
我在这样的模板中定义堆栈:
Parameters:
DBUser:
Description: db user
Type: String
MinLength: '4'
MaxLength: '16'
AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
ConstraintDescription: some description
DBPass:
Description: db password
Type: String
MinLength: '8'
MaxLength: '36'
AllowedPattern: '[a-zA-Z0-9]*'
ConstraintDescription: must contain only alphanumeric characters
Resources:
AppNode:
(...)
DatabaseInstance:
Type: AWS::RDS::DBInstance
Properties:
DBName: app
DBInstanceClass: db.t2.micro
Engine: postgres
EngineVersion: 10
MasterUsername:
- !Ref DBUser
MasterUserPassword:
- !Ref DBPass
DatabaseSG:
Type: AWS::RDS::DBSecurityGroup
Properties:
GroupDescription: Security Group for RDS public access
DBSecurityGroupIngress:
- CIDRIP: 0.0.0.0/0
在我的.env
文件中,我有这个:
[
{
"ParameterKey": "DBUser",
"ParameterValue": "root"
},
{
"ParameterKey": "DBPass",
"ParameterValue": "mydbpassword"
}
]
我运行此命令:
aws cloudformation create-stack --stack-name app --template-body file://$PWD/stack.json --region us-west-2 --parameters file://$PWD/.env.json
表示文件类型。
所以我想到的第一件事就是它可能会将这些值视为空白。但情况并非如此,因为如果我根本不传递模板或参数,则会引发不同的错误。
An error occurred (ValidationError) when calling the CreateStack operation: Parameters: [DBUser, DBPass] must have values
AWS是否重新定义了字符串是什么或者在这里发生了什么?
答案 0 :(得分:0)
很抱歉,yaml文件的文件不支持外部参数。
您可以在命令行中传递它们作为解决方法。
<强>参考:强>
https://github.com/aws/aws-cli/issues/2275
目前仍在进行中。
希望它有所帮助。
<强> EDIT1:强>
MasterUsername:
- ${DBUser}
MasterUserPassword:
- ${DBPass}
看起来您的YAML语法不正确。
参考:
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-general.html
答案 1 :(得分:0)
更正您的模板,如下所示。
Resources:
AppNode:
(...)
DatabaseInstance:
Type: AWS::RDS::DBInstance
Properties:
DBName: app
DBInstanceClass: db.t2.micro
Engine: postgres
EngineVersion: 10
MasterUsername:
!Ref DBUser
MasterUserPassword:
!Ref DBPass
当您使用- !Ref DBUser
时,它表示yaml中的LIST
,而不是String
。
MasterUserPassword
和MasterUserPassword
都属于String
类型。
AWS支持.yml
和.yaml
扩展。所以扩展没有问题。
答案 2 :(得分:0)
MasterUsername必须为字符串类型
这里有一个列表(数组),而不是字符串:
MasterUsername:
- !Ref DBUser
改为在同一行上使用:
MasterUsername: !Ref DBUser