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

Mah*_*hdi 3 aws-sam-cli serverless aws-sam

我想对我的无服务器项目执行自动集成测试。为此,我需要以某种方式获取api端点。已经有用于Serverless框架的插件serverless-stack-output服务。但是我想知道在部署应用程序后如何通过AWS SAM实现类似的目标?

同时,如果我能以某种方式获取我的api的基本URL以及各个端点,那么我就可以连接它们并针对它们执行测试。

Dun*_*dan 5

当AWS SAM基于AWS CloudFormation构建时,您可以使用CloudFormation的Outputs-feature

如何定义此类输出非常简单。您可以例如参考SAM存储库中的api_backend示例。相关部分是输出的定义:

Outputs:
    ApiURL:
      Description: "API endpoint URL for Prod environment"
Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/resource/"
Run Code Online (Sandbox Code Playgroud)

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

aws cloudformation describe-stacks --stack-name mystack \
    --query 'Stacks[0].Outputs[?OutputKey==`ApiURL`].OutputValue' \
    --output text
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。是的,这可行,但我应该为每个函数定义单独的“输出”。当应用程序中有很多功能时,这很容易导致混乱。有什么办法可以使其语法更短吗?另外,按照此示例,每个 api 端点(例如,在本例中为“/resource”)应手动编写和更新。哪个可以很烦人。有什么方法或任何 !REF 可以获取 URL 端点吗? (2认同)