如何在Serverless Framework的`serverless.yml`文件中获取URL端点详细信息作为变量?

时间:2019-04-05 19:46:34

标签: amazon-web-services aws-lambda aws-api-gateway serverless-framework

使用Serverless Framework来 部署AWS Lambda函数,无服务器创建(或接收) 特定的URL端点字符串。我想使用该字符串(作为变量) 在serverless.yml规范文件的另一部分中。

该URL端点是否可以作为serverless.yml中的变量使用? Serverless Framework documentation on AWS-related variables 似乎无法回答这种情况。


详细信息:我的serverless.yml包含一个provider:规范 类似于:

provider:
  name: aws
  runtime: python3.6
  memorySize: 512
  region: ${opt:region, 'eu-west-1'}
  profile: ${opt:profile, 'default'}
  stage: ${opt:stage, 'staging'}

和一个functions:部分,其开头为:

functions:
  round-control:
    name: ${self:provider.stage}-round-control
    runtime: nodejs8.10
    handler: round/control/app.lambdaHandler
    events:
      - http:
          path: round/control
          method: get

之后

serverless deploy --profile [my-aws-profile]

Lambda函数sample-experiments-staging-round-control 据报告在端点可用 https://1a234bc5de.execute-api.eu-west-1.amazonaws.com/staging/round/control

问题:Serverless中是否有一个变量包含 1a234bc5de1a234bc5de.execute-api甚至 1a234bc5de.execute-api.eu-west-1.amazonaws.com? (显然,如果我知道第一个,我也可以构造最后两个。)

使用该变量,我可以构建完整的URL端点, serverless.yml文件中的其他位置。

1a234bc5de不是动态生成的随机数 字符串-我当前的项目(按阶段,按区域)“固定”为 相同的字符串。也许该字符串是在AWS Lambda或 AWS API Gateway?

1 个答案:

答案 0 :(得分:2)

我能够将API网关端点的URL和唯一ID作为环境变量传递给Lambda函数,如下所示:

  mylambda:
    handler: mylambda.handler
    runtime: python3.7
    events:
    - http:
        path: id
        cors: true
    environment:
      APIG_UID: !Ref "ApiGatewayRestApi"
      APIG_URL:
        !Join
          - ''
          - - 'https://'
            - !Ref ApiGatewayRestApi
            - '.execute-api.'
            - ${opt:region, self:provider.region}
            - '.amazonaws.com/'
            - ${opt:stage, self:provider.stage}

感谢goingserverless