Aws cli cloudformation ошибка, замеченная при передаче значения параметра типа CommaDelimitedList - PullRequest
0 голосов
/ 19 сентября 2018

Я вижу ошибку недопустимого типа для значения параметра CommaDelimitedList.CF запускается без каких-либо ошибок с консоли.

Команда CLI AWS:

aws cloudformation create-stack --stack-name agkTestUserStack --template-body file://api_user.yaml --parameters ParameterKey=CustomUserName,ParameterValue="svc_TestUser" ParameterKey=GroupAssociations,ParameterValue="Dev,Test"

Вывод:

Parameter validation failed:
Invalid type for parameter Parameters[1].ParameterValue, value: [u'Dev', u'Test'], type: <type 'list'>, valid types: <type 'basestring'>

Версия CLI AWS: 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

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Я также видел ошибку,

Ошибка проверки параметра: недопустимый тип для параметра Parameters [2] .ParameterValue, значение: [u 'http://localhost:3000', u' https://subdomain.example.business.com'], type:, допустимые типы:

... когда я попытался НЕПРАВИЛЬНО передать разделенный запятыми список URL-адресов в качестве параметра в мой шаблон, например:

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

Исправление для меня заключалось в том, чтобы заключить значение ParameterValue в двойные кавычки (показано ниже).

Предложение , чтобы избежать запятой, т.е. \, не работало для менякогда я предоставил CommaDelimetedList URL-адресов.Какой-то параметр проверки дал ошибку.Я предполагаю, что \ не является допустимым символом в URL, но свойство String (GroupAssociation) может не заботиться о том, имеет ли оно значение \ в значении, хотя я думаю, что код приложения может.

Пример шаблона:

Parameters:
  CallbackURLs:
    Type: CommaDelimitedList

Resources:
  blahblah:
    Properties:
      SomeListProp: !Ref CallbackURLs

Пример ПРАВИЛЬНО передавая параметры списка:

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"
0 голосов
/ 19 сентября 2018

По умолчанию aws cli принимает значение, разделенное запятыми, как List, поэтому вам нужно экранировать запятые, используя символ \.Пожалуйста, повторите попытку согласно ниже.

aws cloudformation create-stack --stack-name agkTestUserStack --template-body file://api_user.yaml --parameters ParameterKey=CustomUserName,ParameterValue="svc_TestUser" ParameterKey=GroupAssociations,ParameterValue="Dev\,Test"
...