首页 > 解决方案 > AWS Api Gateway 与 S3 作为 AWS 服务集成的 SAM 模板

问题描述

我正在编写 SAM 模板,我想创建一个 API 网关,其路径如下:-

http:///userFlights/airlines/static/images/{airlineName}。

这应该能够从 S3 存储桶下载文件。{airlineName} 可能具有类似IndiGo.jpg的值。

我可以手动创建它。然而,问题是我无法为 SAM 模板找到合适的文档。我需要使用 SAM 自动化我的 API 网关。

值如下:- 集成类型 - AWS 服务

AWS 区域-eu-west-3

AWS 服务 - 简单存储服务 (S3

Http 方法 - GET

路径覆盖-airlines/static/images/{airlineName}

标签: amazon-web-servicesaws-api-gatewayaws-sam

解决方案


您必须在定义 API 配置的 SAM 模板中使用使用DefinitionBody的 OpenAPI 定义。在此处查看 S3 代理示例。我用最简单和最小的 Swagger 定义构建了一个 API,并通过 SAM 部署。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: AWS SAM template with a S3 integration
Resources:
  ApiGatewayApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: prod
      DefinitionBody: {
        "swagger": "2.0",
        "info": {
          "version": "1.0"
        },
        "paths": {
          "/airlines/static/images/{airlineName}": {
            "get": {
              "produces": [
                "application/json"
              ],
              "responses": {
                "200": {
                  "description": "200 response"
                }
              },
              "x-amazon-apigateway-integration": {
                "responses": {
                  "default": {
                    "statusCode": "200"
                  }
                },
                "credentials": "arn:aws:iam::{account-id}:role/{role-name}",
                "uri": "arn:aws:apigateway:{aws-region}:s3:path/{bucket-name}",
                "passthroughBehavior": "when_no_match",
                "httpMethod": "GET",
                "type": "aws"
              }
            }
          }
        }
      }

推荐阅读