Получите значение из лямбда-выражения с помощью облачного формирования и проверьте условие для перехода - PullRequest
0 голосов
/ 06 августа 2020

Я приложил образец, чтобы дать вам некоторую ясность в том, что я пытаюсь решить.

AWSTemplateFormatVersion: '2010-09-09'
Description: Project Service Catalog get lambda data

Parameters:
  Environment:
    Type: String
    Description: Environment of the SageMaker
  
  ProjectId:
    Type: String
    Description: Project ID of the SageMaker

  SsmRoleLambdaArn:
    Type: AWS::SSM::Parameter::Value<String>
    Default: '/data-science/role-lambda/arn'
    Description: Arn to lookup Role of the Session using project id

Resource:
  IdentifyUserRole:
    Type: Custom::GetParam
    Properties:
      ServiceToken: !Ref SsmRoleLambdaArn
      pl_role: !Sub '${Environment}-sso-data-science-${ProjectId}-pl-role'
      ds_role: !Sub '${Environment}-sso-data-science-${ProjectId}-ds-role'

  KmsKey:
    Type: AWS::KMS::Key
    Properties:
      Description: !Sub 'Encryption for ${Environment}-${ProjectId}-${Prid}-${NotebookInstanceNameSuffix}'
      EnableKeyRotation: true
      Tags:
        - Key: Environment
          Value: !Ref Environment
        - Key: Owner
          Value: !Ref Owner
        - Key: ProjectId
          Value: !Ref ProjectId
        - Key: PrincipalId
          Value: !Sub
            - "${RoleId}:${Prid}"
            - RoleId:
                Fn::If: [!Equals [!GetAtt IdentifyUserRole.value, true], !GetAtt PORoleId.value, !GetAtt DSRoleId.value]

Я получаю сообщение об ошибке при условии IF в PrincipalID тег. Пожалуйста, помогите решить эту проблему с помощью некоторых образцов шаблонов. Я не могу использовать! GetAtt в блоке Conditions , потому что мы не должны использовать атрибуты get.

Сообщение об ошибке - во время проверки стека

Произошла ошибка (ValidationError) при вызове операции ValidateTemplate: Ошибка шаблона: Fn :: If требует аргумента списка с первым элементом, являющимся условием

1 Ответ

0 голосов
/ 07 августа 2020

Вы не можете жестко закодировать условие в разделе Если вы пытаетесь:

 Fn::If: [!Equals [!GetAtt IdentifyUserRole.value, true], !GetAtt PORoleId.value, !GetAtt DSRoleId.value]

Первый аргумент должен быть условием из раздела Conditions ( docs ):

ссылка на условие в разделе Условия .

Впоследствии вы не можете создавать условия на основе GetAtt или любые другие ресурсы из раздела Resources.

В тех же документах также пишется:

Вы можете ссылаться только на другие условия и значения из разделов «Параметры» и «Сопоставления» шаблона. Например, вы можете ссылаться на значение из входного параметра, но вы не можете ссылаться на логический идентификатор ресурса в условии .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...