使用AWS SAM模板配置API Gateway | 作者:Charles Yang - Medium

作者:API传播员 · 2026-01-04 · 阅读时间:3分钟

由于我们使用的是 AWS SAM(Serverless Application Model)模板,因此可以轻松部署到 CloudFormation,并在 AWS 控制台中无需额外设置即可正常运行。本文将详细介绍如何通过 SAM 模板配置 API Gateway,并解决常见问题。


使用 Swagger 定义 API Gateway

在 AWS API Gateway 中定义接口时,我们需要创建一个 Swagger 定义文件(例如 swagger.[yaml](https://www.explinks.com/wiki/ymal/)),并将其包含在 SAM 模板中。以下是实现的关键步骤和注意事项。

修改 SAM 模板中的资源属性

在原始的 AWS::Serverless::Api 资源中,我们需要添加以下两个新属性:

  1. Cors:为了简化设置,可以使用通配符 *,允许任何网站访问该端点。如果需要限制访问,请确保正确指定允许访问的域名,例如 "www.example.com"。注意,域名必须用双引号括起来。

  2. DefinitionBody:通过 Fn::TransformAWS::Include 来引用 Swagger 定义文件。这种方式允许我们在需要时使用模板中定义的资源。

以下是一个示例代码片段,展示了如何在 Swagger 定义中使用这些属性:

x-amazon-apigateway-integration:
  uri: !GetAtt HelloWorldFunction.Arn
  httpMethod: POST

在上述代码中,uri 使用了 Lambda 函数的 ARN(Amazon Resource Name)。通过在 SAM 模板中指定 ARN,我们可以确保资源的正确引用。


配置 CORS 和安全性

在配置 CORS 时,我们需要注意以下几点:

  • 默认情况下,SAM 模板无法正确处理 CORS,因此需要在 Swagger 文件中显式定义。
  • 对于 OPTIONS 方法,可以通过在 Swagger 定义中添加 security: NONE 来排除安全性检查。

以下是一个示例配置:

options:
  security: NONE

通过这种方式,我们可以确保 OPTIONS 方法不会受到授权限制。


部署和调试

部署 Swagger 文件

由于 SAM 模板对 CORS 的支持有限,我们可以将 Swagger 文件上传到 S3 存储桶,并在 CI/CD 管道中引用。例如:

aws s3 cp swagger.yaml s3://my-deploy-bucket

将文件上传到 S3 后,可以通过 SAM 模板中的 DefinitionBody 属性引用该文件,从而简化部署流程。


调试常见问题

在部署完成后,如果发现 API 无法正常工作,可以通过以下步骤进行调试:

  1. 检查 Lambda 函数的响应头:确保响应中包含必要的 CORS 头信息。如果缺失,可以在 Lambda 函数中添加相关头信息。

  2. 重新部署:修改 Lambda 函数后,重新部署应用程序,确保更改生效。


总结

通过本文的介绍,我们学习了如何使用 AWS SAM 模板配置 API 的稳定性和安全性。

原文链接: https://medium.com/carsales-dev/api-gateway-with-aws-sam-template-c05afdd9cafe