2017-10-13 22 views
1

ソリューション:ymlは使用しないでください。CloudFormationのパラメータファイルを渡すことがYMLで機能しない

私はaws cloudformation stack-createコマンドと共にdb名とdbパスワードを保持するパラメータを渡そうとしています。私は全体的に意味をなさないエラーを取り戻す。

Value of property MasterUsername must be of type String 

は今、知っている一つのことは、私は文字通りパスワードを見ることができ、ユーザ名が設定されたものとしてコンソールに戻ってくるので、私は、コンソールへのアクセスを持っているということです。彼らはどちらも私の弦のように見えます。

YAMLバージョン

私はこのようなテンプレートでスタックを定義している:私はこれを持って私の.envファイルの内部

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 

[ 
    { 
    "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

YMLでこのコマンドを実行していないので、実際のJsonスタックを使用して表示することはできますか? –

答えて

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

+0

リンクありがとうございます!私はこのようなコマンドラインを使ってみました: 'aws cloudformation create-stack --stack-name app --template-body file://$PWD/stack.yml --region us-west-2 --parameters ParameterKey = DBUser、ParameterValue = root ParameterKey = DBPass、ParameterValue = pleasegodletmein'。しかし、私は同じエラーが発生します。私はymlをまったく捨てるべきですか? – user3162553

+0

私とあなたのファイルの拡張子の違いを発見しただけです。使用、yaml。しかし、jsonは完全にサポートされており、yamlはまだ完全にサポートされています。 – Kannaiyan

+0

パラメータファイルに 'json'拡張があります。彼らはymlをまったくサポートしていないのですか? – user3162553

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、ないStringLISTを意味します。 MasterUserPasswordおよびMasterUserPasswordはともにタイプStringです。 AWSは、.yml.yamlの両方の拡張機能をサポートしています。したがって、拡張機能に問題はありません。

関連する問題