如何从 AWS SAM 获取堆栈输出?

How to get stack output from AWS SAM?

我想对我的无服务器项目执行自动集成测试。为此,我需要以某种方式获得 api 端点。已经有 the plugin serverless-stack-output 的无服务器框架可以达到这个目的。但我想知道在部署我的应用程序后如何通过 AWS SAM 实现类似的事情?

与此同时,如果我能以某种方式获得 api 的基础 url 以及各个端点,那么我就能够连接它们并对它们执行测试。

由于 AWS SAM 构建于 AWS CloudFormation 之上,您可以使用 CloudFormation's Outputs-feature

如何定义此类输出非常简单。你可以例如参考 SAM-template-repository 中的 "hello world" template。相关部分是输出的定义:

Outputs:
  HelloWorldApi:
    Description: "API Gateway endpoint URL for Prod stage for Hello World function"
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/hello/"

在部署 CloudFormation 堆栈后,您仍然需要一种方法来获取输出。为此,您可以例如使用 AWS CLI:

aws cloudformation describe-stacks --stack-name mystack \
    --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' \
    --output text