Как динамически добавить когнитивное выражение arn в лямбда?

Я хотел бы добавить авторизатор когнитивных функций в свою лямбда-функцию, но для этого мне нужен arn cognito, который создается в формировании стека coud (CognitoUserPool в моем разделе ресурсов). Я использую бессерверный фреймворк.

часть файла serverless.yml

  graphql:
    handler: src/lambda-functions/graphql/index.handler
    timeout: 30
    memorySize: 2048
    events:
      - http:
          path: graphql
          method: any
          private: true
          cors: true
          authorizer:
            arn:
              Fn::Join:
                - ''
                - - 'arn:aws:cognito-idp:'
                  - ${self:provider.region}
                  - ':'
                  - Ref: AWS::AccountId
                  - ':userpool/'
                  - Ref: CognitoUserPool

Я получаю сообщение об ошибке при развертывании приложения:

 TypeError: functionArn.split is not a function

Во время отладки я обнаружил, что функция, в которую должен быть передан вывод из Fn :: join, является object:

{"Fn::Join":["",["arn:aws:cognito-idp:","eu-west-1",":",{"Ref":"AWS::AccountId"},":userpool/",{"Ref":"CognitoUserPool"}]]}

И в функцию уже должно быть передано разрешение arn, например:

arn:aws:cognito-idp:eu-west-1:XXXXXXXXXX:userpool/eu-west-XXXXXXX 

Как заставить вычислить вывод Fn :: join и передать это значение свойству arn?


person Lukasz_K_K    schedule 11.09.2019    source источник


Ответы (1)


Согласно this, присвоение авторизатору имени позволяет использовать внутренние функции для ссылки на ARN:

graphql:
  handler: src/lambda-functions/graphql/index.handler
  timeout: 30
  memorySize: 2048
  events:
    - http:
        path: graphql
        method: any
        private: true
        cors: true
        authorizer:
          name: CognitoAuthorizer #supply a unique name here
          arn:
            !GetAtt CognitoUserPool.Arn 
person kaybee99    schedule 08.01.2020