I am seeing an invalid-type error for a CommaDelimitedList parameter value. The CF runs without any errors from the console.
AWS CLI command:
aws cloudformation create-stack --stack-name agkTestUserStack --template-body file://api_user.yaml --parameters ParameterKey=CustomUserName,ParameterValue="svc_TestUser" ParameterKey=GroupAssociations,ParameterValue="Dev,Test"
Output:
Parameter validation failed:
Invalid type for parameter Parameters[1].ParameterValue, value: [u'Dev', u'Test'], type: <type 'list'>, valid types: <type 'basestring'>
AWS CLI version: aws-cli/1.15.75 Python/2.7.9 Windows/8 botocore/1.10.74
api_user.yaml:
AWSTemplateFormatVersion: 2010-09-09
Parameters:
CustomUserName:
Type: String
Description: Custom user name
Default: ''
GroupAssociations:
Type: CommaDelimitedList
Description: Comma-delimited list of groups to associate the user
Default: ''
Conditions:
NoGroups: !Equals
- !Join
- ''
- !Ref GroupAssociations
- ''
NoUserName: !Equals
- !Ref CustomUserName
- ''
Resources:
CustomUser:
Type: 'AWS::IAM::User'
Properties:
UserName: !If
- NoUserName
- !Ref AWS::NoValue
- !Ref CustomUserName
Groups: !If
- NoGroups
- !Ref AWS::NoValue
- !Ref GroupAssociations
Outputs:
UserName:
Description: User instance name
Value: !Ref CustomUser
Export:
Name: UserName
UserArn:
Description: User instance ARN
Value: !GetAtt CustomUser.Arn
Export:
Name: UserArn
By default, aws cli takes comma seperated value as List, hence you need to escape commas by using \
character. Please retry as per below.
aws cloudformation create-stack --stack-name agkTestUserStack --template-body file://api_user.yaml --parameters ParameterKey=CustomUserName,ParameterValue="svc_TestUser" ParameterKey=GroupAssociations,ParameterValue="Dev\,Test"
I was also seeing the error,
Parameter validation failed: Invalid type for parameter Parameters[2].ParameterValue, value: [u'http://localhost:3000', u'https://subdomain.example.business.com'], type: , valid types:
...when I tried to INCORRECTLY pass a comma separated list of URLs as a parameter to my template, e.g.:
aws cloudformation create-stack --stack-name STACKNAME --template-body file://cognito-idp-saml.yaml --parameters ParameterKey=CallbackURLs,ParameterValue=http://localhost:3000,https://subdomain.example.business.com
The fix for me was to wrap the value of ParameterValue
in double-quotes (shown below).
The suggestion to escape the comma i.e. \,
did not work for me when I provided a CommaDelimetedList of URLs. Some parameter valdation threw an error. I guess \
is not a valid character in a URL but a String property (GroupAssociation) might not care if it has a \
character in the value, although I would think the application code might.
Example template:
Parameters:
CallbackURLs:
Type: CommaDelimitedList
Resources:
blahblah:
Properties:
SomeListProp: !Ref CallbackURLs
Example CORRECTLY passing the list parameters:
aws cloudformation create-stack --stack-name STACKNAME --template-body file://cognito-idp-saml.yaml --parameters ParameterKey=CallbackURLs,ParameterValue="http://localhost:3000,https://subdomain.example.business.com"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With