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

Команда интерфейса командной строки 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'>

Версия интерфейса командной строки 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
7
Sensei 19 Сен 2018 в 00:33

2 ответа

Лучший ответ

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

aws cloudformation create-stack --stack-name agkTestUserStack --template-body file://api_user.yaml --parameters ParameterKey=CustomUserName,ParameterValue="svc_TestUser" ParameterKey=GroupAssociations,ParameterValue="Dev\,Test"
6
sayboras 19 Сен 2018 в 02:29

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

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

... когда я попытался НЕПРАВИЛЬНО передать список 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"
1
cyrf 9 Июл 2019 в 21:14