标签: aws-api-gateway

将Lambda输出映射到API网关标头

我正在尝试将Lambda函数的JSON输出映射到API网关调用的标头.作为示例,我们可以考虑重定向方案.所以我想Location在API网关调用的响应中添加标题.

Lambda函数的JSON输出:

{
    Location: 'http://google.com'
}
Run Code Online (Sandbox Code Playgroud)

在"方法响应" - >"响应标头"中,我可以将Location标头添加到所需的HTTP状态代码中.

然后,在"整合响应" - >"页眉映射"我可以添加的映射关系对所述Location报头是什么.

现在的问题是如果这是什么东西呢?

注意:我已经尝试过integration.response.header.Location,或使用"映射模板"但到目前为止没有运气.

目前可能无法实现(https://forums.aws.amazon.com/thread.jspa?messageID=651482),但由于API Gateway/Lambda目前正在迅速发展,我将会这么快无论如何要问.

aws-lambda aws-api-gateway

19
推荐指数
3
解决办法
6190
查看次数

AWS API Gateway:限制来自单个IP的请求

AWS API Gateway是否允许限制来自单个IP的大量请求?

我正在构建一个公共API,并且希望通过在单个IP地址(例如每分钟100个请求)中调用API的次数建立限制来防止它被滥用.

谢谢,

amazon-web-services aws-api-gateway

19
推荐指数
1
解决办法
9235
查看次数

如何为无服务器-1.0.0框架定义/部署的API添加自定义域?

Serverless-1.0.0-rc.1支持部署可通过AWS API Gateway访问的API.

问题:我需要通过带有SSL证书的自定义域而不是随机分配的(URL https://qwertylgbtqert.execute-api....)来公开部署的API 吗?

可以从内部serverless.yml或无服务器框架完成吗?

这是我简单的服务serverless.yml定义:

service: my-service
provider:
  name: aws
  runtime: nodejs4.3

functions:
  generate:
    handler: handler.generate
    events:
      - http:
         method: get
         path: url
         cors: true
Run Code Online (Sandbox Code Playgroud)

有一个问题与此有关:答案在这里,但没有提供适用的答案.特别是如何从serverless.yml自身内部分配自定义域.

它认为是否有可能创建AWS :: Route53资源并利用它,但我不知道如何在无服务器中执行此操作.

amazon-web-services aws-lambda aws-api-gateway serverless-framework

19
推荐指数
1
解决办法
4711
查看次数

“functions.app.events[0]”中的无服务器配置警告:不支持的函数事件

我正在尝试使用 serverless.com 部署 AWS API

当我做:

sls --stage=dev --aws-profile=myprofile deploy --force
Run Code Online (Sandbox Code Playgroud)

我收到以下警告:

Configuration warning at 'functions.app.events[0]': unsupported function event
Run Code Online (Sandbox Code Playgroud)

我的 serverless.yml 包含以下部分:

functions:
  app:
    handler: src/index.handler
    memorySize: 3008
    events:
      - httpApi:
        method: '*'
        path: '*'
        authorizer:
          name: serviceAuthorizer
          scopes: # Optional
            - user.id
            - user.email
Run Code Online (Sandbox Code Playgroud)

事件部分有什么问题?

aws-api-gateway serverless-framework

19
推荐指数
2
解决办法
7753
查看次数

如何通过API网关将Authorization标头传递给HTTP端点?

我在AWS API Gateway后面有一个API,需要使用Authorization标头进行处理.遗憾的是,我无法将其传递给后端进行处理.

我试图在我的方法请求创建授权HTTP请求报头,然后在我的集成请求创建相应的授权HTTP标(授权从method.request.header.Authorization映射在这种情况下).我记录了后端接收的所有头文件,并且从日志中,我可以看到我在集成请求中列出但未授权的其他头文件.

我还尝试使用Content-Type创建一个映射模板,application/json并将模板定义为

  {
      "AccountID": "$context.identity.accountId",
      "Caller": "$context.identity.caller",
      "User": "$context.identity.user",
      "Authorization": "$input.params().header.get('Authorization')",
      "UserARN": "$context.identity.userArn"
  }
Run Code Online (Sandbox Code Playgroud)

然而,后端日志显示JSON主体中仍然没有Authorization标头或任何Authorization字段.我也看不到用户的ARN.我已经看到其他示例和线程,其中用户提到访问传递给Lambda函数的事件对象上的Authorization字段,但我没有使用Lambda函数.

我确保在两种情况下都部署API网关.

有谁知道我是否可以通过API网关将Authorization标头传递给我的HTTP端点?是否有其他方法可以访问API调用者的用户名或ID?


编辑 - 这是我用来访问API网关的代码片段:

String awsAccessKey = "myaccesskey";
String awsSecretKey = "mysecretkey";

URL endpointUrl;
try {
    endpointUrl = new URL("https://<host>/<path>/<to>/<resource>?startDate=20151201&endDate=20151231");
} catch(Exception e) {
    throw new RuntimeException("Unable to parse service endpoint: " + e.getMessage());
}

Date now = new Date();

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
sdf1.setTimeZone(new SimpleTimeZone(0, "UTC"));
String dateTS = sdf1.format(now);

String headerNames = "host;x-amz-date";
String queryParameters = …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-api-gateway

18
推荐指数
2
解决办法
2万
查看次数

如何找到lambda函数的API端点?

我有一个Lambda函数,它有一个公开的API网关端点,我可以通过AWS控制台获取该URL.但是,我想通过API调用获取该URL.无论是LAMBDA API文档,也不是API Gateway文档似乎有该信息(或者也许我已经错过了它),所以这是甚至可能摆在首位?

aws-lambda aws-api-gateway

18
推荐指数
3
解决办法
1万
查看次数

从AWS lambda设置http响应头

我的API Gateway/Lamdba设置返回一个http响应头:Lamdba使用回调函数将值作为json的一部分返回,Integration Response将其映射到头中(使用integration.response.body)

使用此解决方案,值将在正文和标题中发回.

如何在不重复响应正文中的值的情况下映射Lambda响应中的标头?

amazon-web-services aws-lambda aws-api-gateway

18
推荐指数
2
解决办法
2万
查看次数

serverless-aws-documentation模型定义和可选字段?

我想定义请求和响应模型.我在AWS中使用无服务器框架,我所看到的一切建议使用无服务器aws文档

README说我需要有这条线 custom.documentation.models.MODELNAME

schema: ${file(models/error.json)}
Run Code Online (Sandbox Code Playgroud)

但是他们没有models/error.json用作基线的示例文件.

在实际的例子中,serverless.yml有一个这样的定义:

-
  name: DoSomethingRequest
  contentType: "application/json"
  schema:
    type: array
    items:
      type: string
Run Code Online (Sandbox Code Playgroud)

这没有为我正在尝试做的事情提供足够的细节.


我的目标是为字符串对象,消息和状态代码数组定义模式.但是,消息和状态代码是可选的.这些也可能是其他模型的一部分,如果可能的话,我不想重复每个模型的定义.

我目前的尝试是:

-
  name: ReturnArrayResponse
  contentType: "application/json"
  schema:
    type: array
    itemsArray:
      type: string
    message:
      type: string
    statusCode:
      type: number
Run Code Online (Sandbox Code Playgroud)

我认为这会做我想要的,但我怎么能拥有message并可statusCode选择并在我的其他模特中重复这两个项目?

我很满意我可以放入我的serverless.yml文件或我可以引用的json文件的yml解决方案.

amazon-web-services aws-api-gateway serverless-framework serverless-plugins

18
推荐指数
1
解决办法
1742
查看次数

在AWS API网关上将http://请求重定向到https://(使用自定义域)

我正在使用AWS API Gateway和自定义域.当我尝试访问https://www.mydomain.com时,它运行正常,但是当我尝试http://www.mydomain.com时它无法连接.

有没有办法http -> https在API网关中重定向自定义域?如果没有,有没有办法让http://链接像https://链接一样工作?

amazon-web-services amazon-route53 aws-sdk aws-api-gateway

18
推荐指数
1
解决办法
4916
查看次数

消息:尝试访问aws网关api时出现"内部服务器错误"

使用Node.js创建了Lambda Hello world函数,并为Get调用创建了API GateWay触发器,尝试使用URL访问Lambda函数,得到以下错误.

消息:"内部服务器错误".

(AWS新手)

aws-lambda aws-api-gateway

18
推荐指数
6
解决办法
2万
查看次数