Как получить URL-адрес конечной точки API, когда он создается в свойстве Events в определении лямбды Cloudformation - PullRequest
1 голос
/ 18 января 2020

Я создаю лямбда-функцию через CloudFormation (AWS 'SAM: модель сервера без сервера) и определил конечную точку API через свойство Events в лямбда-функции.

  ...
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      Description: Do amazing things
      CodeUri: my_function/
      Events:
        Trigger:
          Type: Api
          Properties:
            Path: /p1/{v1}
            Method: post
      Handler: app.run
  ...

Я бы сейчас хотел бы использовать URL-адрес конечной точки, созданной в другой части YAML-файла CloudFormation. Я пытался использовать документацию SAM для Lambda , но единственные возвращаемые значения имеют отношение к ARN функции и имени ресурса. Я хочу использовать конечную точку API в качестве подписки для SNS Topi c.

¿Как получить URL-адрес конечной точки API?

Ответы [ 2 ]

0 голосов
/ 18 января 2020

вы можете напрямую ссылаться на ресурс RestApi следующим образом.

Resources:
  apiGateway:
    Type: AWS::ApiGateway::RestApi
    Properties:
      Name: !Sub ${AWS::StackName}-my-api
      Description: my-api-edge


Outputs:
  apiGatewayInvokeURL:
    Value: !Sub "https://${apiGateway}.execute-api.${AWS::Region}.amazonaws.com/${apiGatewayStageName}"

  lambdaArn:
    Value: !GetAtt "lambdaFunction.Arn"
0 голосов
/ 18 января 2020

Я думаю, что нашел ответ в нескольких местах.

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

!Ref ServerlessRestApi

На практике это поддерживалось приложением SAM Respository

А затем я перечитал, более подробно, документацию SAM API , который показывает RestApiId Свойство. Там написано

... Как правило, для этого задана ссылка на ресурс AWS :: Serverless :: Api, определенный в этом шаблоне. Если не определено, создается ресурс по умолчанию AWS :: Serverless :: Api ... "

Таким образом, вы можете ссылаться на него как !Ref ServerlessRestApi без каких-либо изменений в YAML в исходный вопрос, или вы можете добавить следующее свойство RestApiId: MyAPI и ссылаться на него как !Ref MyAPI.

Однако, чтобы получить реальный URL, похоже, что вы должны использовать Fn :: Sub склеить пару частей. Pahud Hsieh делает это в своем приложении SAM Repository выше

Outputs:
  APIUrlPrefix:
    Value:
      Fn::Sub:
      - https://${ServerlessRestApi}.execute-api.${Region}.amazonaws.com/Prod/incomingwebhooks/'
      - Region:
          Ref: AWS::Region
        ServerlessRestApi:
          Ref: ServerlessRestApi
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...