Как получить сведения о конечной точке URL-адреса как переменную в файле serverless.yml` Serverless Framework? - PullRequest
3 голосов
/ 05 апреля 2019

Использование Serverless Framework для развертывание функций AWS Lambda, без сервера создает (или получает) конкретная строка конечной точки URL. Я хочу использовать эту строку (в качестве переменной) в другом разделе serverless.yml файла спецификации.

Доступна ли конечная точка URL-адреса как переменная в serverless.yml? Документация Serverless Framework по переменным, связанным с AWS похоже, не отвечает на этот случай.


Подробности: мой 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]

Лямбда-функция sample-experiments-staging-round-control сообщается, что он доступен в конечной точке https://1a234bc5de.execute-api.eu-west-1.amazonaws.com/staging/round/control.

Вопрос: есть ли переменная в Serverless, которая содержит что 1a234bc5de или 1a234bc5de.execute-api или, возможно, даже 1a234bc5de.execute-api.eu-west-1.amazonaws.com? (Очевидно, я также могу построить последние два, если знаю первый.)

С помощью этой переменной я могу создать конечную точку полного URL, которую я нужно в другом месте в файле serverless.yml.

N.B. Это 1a234bc5de не является динамически генерируемым случайным строка - мой текущий проект (для этапа, для региона) «зафиксирован» на та же строка. Возможно, эта строка генерируется в AWS Lambda или AWS API Gateway?

1 Ответ

4 голосов
/ 05 апреля 2019

Мне удалось передать URL-адрес и уникальный идентификатор конечной точки шлюза API в функцию 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}

Благодаря без сервера .

...