【问题标题】:How dynamically add arn cognito to lambda?如何动态地将 arn cognito 添加到 lambda?
【发布时间】:2020-01-13 05:38:42
【问题描述】:

我想将 cognito 授权器添加到我的 lambda 函数中,但为此我需要 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 属性?

【问题讨论】:

    标签: aws-lambda yaml amazon-cognito serverless-framework aws-serverless


    【解决方案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 
    

    【讨论】:

      猜你喜欢
      • 2019-09-10
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多