标签: aws-api-gateway

如何使用 API Gateway 来触发 localhost?

nodejs我正在尝试使用和 进行一些实验AWS API Gateway

app.post('/test', (req, res) => {
  res.send('HOLA');
})
Run Code Online (Sandbox Code Playgroud)

我已经使用邮递员解雇http://localhost:3000/test并获得正确的响应。

现在我正在尝试使用 AWS API Gateway,但似乎不允许触发本地主机?我想知道是否有什么办法可以让我玩玩

在此输入图像描述

amazon-web-services node.js aws-api-gateway

2
推荐指数
1
解决办法
2501
查看次数

如何在模板之间共享授权人而不达到每个 API 的授权人限制

我有十几个服务,每个服务都有自己的无服务器模板文件,在 API Gateway 上共享相同的根 API。我的根serverless.yml文件定义了 API 和授权者:

...
resources:
  Resources:
    ApiGatewayRestApi:
      Type: AWS::ApiGateway::RestApi
      Properties:
        Name: ${self:service.name}-${self:provider.stage}
        Description: Medimap API Gateway
    GatewayResponseDefault4XX:
      Type: "AWS::ApiGateway::GatewayResponse"
      Properties:
        ResponseParameters:
          gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
          gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
        ResponseType: DEFAULT_4XX
        RestApiId:
          Ref: "ApiGatewayRestApi"

  Outputs:
    RestApiId:
      Value:
        Ref: ApiGatewayRestApi
      Export:
        Name: ${self:service.name}-${self:provider.stage}-RestApiId
    RootResourceId:
      Value:
        Fn::GetAtt: ApiGatewayRestApi.RootResourceId
      Export:
        Name: ${self:service.name}-${self:provider.stage}-ApiGatewayRestApiRootResourceId
    AuthenticationService:
      Value:
        Fn::GetAtt: AuthenticationServiceLambdaFunction.Arn
      Export:
        Name: ${self:service.name}-${self:provider.stage}-AuthenticationService

functions:
  authenticationService:
    handler: src/api/common/authenticationService.handler
    environment:
      JWT_SECRET: ${env:JWT_SECRET}
    events:
      - http:
          path: authenticationService
          method: post
          cors: true
Run Code Online (Sandbox Code Playgroud)

在我的每项服务的模板中,我都有如下代码:

provider:
  ...
  apiGateway:
    restApiId:
      "Fn::ImportValue": …
Run Code Online (Sandbox Code Playgroud)

aws-api-gateway serverless-framework

2
推荐指数
1
解决办法
1962
查看次数

在后端 api 中获取 AWS API Gateway 请求 ID

我们的 api 设置如下

Development : ASP NET Core 2.1 C#
Backend api deployment : In AWS through docker
Gateway : AWS API Gateway which contains custom lambda Authorizer
Run Code Online (Sandbox Code Playgroud)

需求:在后端api中获取API网关请求id以进行日志记录和请求跟踪。

当请求通过 API 网关时,它会生成一个请求 id。这是由网关在“ x-amzn-RequestId ”的响应标头中设置的,并且可以在客户端(如邮递员)中可见。我发现这个 id 也可以在APIGatewayCustomAuthorizerRequest - 对象的 lambda 授权者中使用。RequestContext.RequestId,我可以将其用于授权者日志记录。

现在,当请求被授权时,将调用实际的 api。我希望在此 api 中使用相同的请求 id 来进行日志记录。最终 - 通过具有相同请求的 gateway-aurhorizer-api 识别请求的旅程并生成统计数据。

在api代码中,我们还实现了APIControllerActionFilterOnActionExecuting()。我想知道网关请求 ID 是否可用?或者有什么方法可以将 id 从网关传递到实际的 api 吗?

docker aws-api-gateway asp.net-core-2.1

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

尝试将消息发布到 SQS 时出现访问被拒绝错误

我正在尝试创建一个在 SQS 队列中记录 JSON 请求正文的 API。

我在 SQS 中以 FIFO 和非 FIFO 布局设置了一个基本队列。我每次都有同样的问题。我对SQS队列的策略如下:

{
  "Version": "2012-10-17",
  "Id": "arn:aws:sqs:us-east-1:2222222222222:API-toSQS.fifo/SQSDefaultPolicy",
  "Statement": [
    {
      "Sid": "Sid22222222222",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "SQS:*",
      "Resource": "arn:aws:sqs:us-east-1:2222222222222:API-toSQS.fifo"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我制定了一项政策,允许所有人员访问 SQS 以提高写作能力。我为 API Gateway 创建了一个角色,在其中分配了上述策略。这是我分配给该角色的策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "sqs:DeleteMessage",
                "sqs:ChangeMessageVisibility",
                "sqs:DeleteMessageBatch",
                "sqs:SendMessageBatch",
                "sqs:PurgeQueue",
                "sqs:DeleteQueue",
                "sqs:SendMessage",
                "sqs:CreateQueue",
                "sqs:ChangeMessageVisibilityBatch",
                "sqs:SetQueueAttributes"
            ],
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我已经设置了一个API网关。我创建了一个 POST 方法。我尝试启用 CORS 选项(创建 OPTIONS 方法),并且在没有启用 CORS 的情况下完成了该操作。我的安全策略 ARN 是正确的,我已对其进行了三次检查。我选择覆盖路径并在那里有我的 SQS …

amazon-sqs amazon-iam aws-api-gateway

2
推荐指数
1
解决办法
5031
查看次数

用于 AWS Api 网关与 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-services aws-api-gateway aws-sam

2
推荐指数
1
解决办法
2414
查看次数

调用 AWS Lambda Java 函数的 AWS 网关收到空正文

我正在使用 aws-lambda-java-events 库实现一个用 java 编码的 aws lambda 函数。为了进行故障排除,我现在只是尝试使用相同的请求正文进行响应

public class LambdaFunctionHandler implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {
    @Override
    public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent input, Context context) {
        return new APIGatewayProxyResponseEvent().withBody(input.getBody());
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经定义了上面的 lambda 函数和 api 网关,但我得到的input.getBody是 null。lambda 函数的输出是一个空的 json 对象

{}
Run Code Online (Sandbox Code Playgroud)

我通过 AWS lambda 测试控制台对此进行了测试。执行成功,输出如上。api 网关集成请求配置为在 POST 方法上调用上述 lambda 函数。

以下是我的疑问

  1. 如何获取 aws 测试事件 json 作为APIGatewayProxyRequestEvent getBody()字符串的一部分?
  2. 如何获取APIGatewayProxyRequestEvent getBody()字符串变量中传递给 API Gateway POST 方法的请求正文?我需要定义映射模板吗?如果是这样,它应该是什么样子(我做了多次尝试但没有成功)

我想通过POSTMAN传递给API网关POST方法的请求体是

{
    "question":"Hello, how are you doing?"
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

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

2
推荐指数
1
解决办法
5076
查看次数

如何向 AWS::Serverless::Function 添加路径参数

我有一个生成 API 的 cloudformation 模板。我希望端点之一具有路径参数。但是,我不明白如何用 来实现这一点AWS::Serverless::Function。这是我当前的功能:

GetItems:
  Type: AWS::Serverless::Function
  Properties:
    Handler: api/items/get.handler
    Timeout: 29
    CodeUri: .
    Events:
      Get:
        Type: Api
        Properties:
          Method: get
          Path: /items
          RestApiId: !Ref MyAPI
Run Code Online (Sandbox Code Playgroud)

这会创建一个端点,例如aws-domain-example.com/v1/items. 这很好用。

不过,我想要aws-domain-example.com/v1/items/{item_id}

如何添加路径参数?

amazon-web-services aws-cloudformation aws-api-gateway aws-serverless

2
推荐指数
1
解决办法
689
查看次数

api 网关 lambda 应如何返回用于登录的重定向 URL

我的 Lambda 函数返回 html 页面。我能够从 Node js 10.x 成功返回完整的 html。因此,如果我使用 api gateway url https://2kiz3ttah.execute-api.eu-west-1.amazonaws.com/stage/login访问我的 lambda ,如果未登录,则 lambda 应返回重定向 URL。如何返回在浏览器中打开的 URL,而不是呈现 HTML 页面。

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

2
推荐指数
1
解决办法
5879
查看次数

使用 AWS Boto3 从 EC2 实例调用 API 网关

我正在尝试从具有 IAM 角色的 EC2 实例之一调用 AWS API Gateway 端点。我在 EC2 实例上安装了 boto3 库,并尝试使用下面的代码执行简单的网关 API,但仍然出现身份验证丢失错误。

import boto3
import json
import requests
from aws_requests_auth.aws_auth import AWSRequestsAuth

session = boto3.Session()
credentials = session.get_credentials()

headers = {'params': 'ABC'}
response = requests.get('https://restapiid.execute-api.us-east-1.amazonaws.com/stage/resource_path',
                        auth=credentials, headers=headers)
Run Code Online (Sandbox Code Playgroud)

对于具有 IAM 角色的 EC2 实例,这应该非常简单。请任何建议。

python-requests boto3 aws-api-gateway

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

用于执行 API Gateway 的 AWS CLI 命令

我正在尝试在 EC2 实例中使用 AWS CLI 执行 API 网关。我在 AWS CLI 文档中没有找到任何命令。以前有人使用过 CLI 来执行 API 网关端点吗?

感谢

amazon-web-services aws-cli aws-api-gateway

2
推荐指数
1
解决办法
7657
查看次数