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,但似乎不允许触发本地主机?我想知道是否有什么办法可以让我玩玩
我有十几个服务,每个服务都有自己的无服务器模板文件,在 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) 我们的 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代码中,我们还实现了APIControllerActionFilter的OnActionExecuting()。我想知道网关请求 ID 是否可用?或者有什么方法可以将 id 从网关传递到实际的 api 吗?
我正在尝试创建一个在 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 …
我正在编写 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}
我正在使用 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 函数。
以下是我的疑问
APIGatewayProxyRequestEvent getBody()字符串的一部分?APIGatewayProxyRequestEvent getBody()字符串变量中传递给 API Gateway POST 方法的请求正文?我需要定义映射模板吗?如果是这样,它应该是什么样子(我做了多次尝试但没有成功)我想通过POSTMAN传递给API网关POST方法的请求体是
{
"question":"Hello, how are you doing?"
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有一个生成 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
我的 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 页面。
我正在尝试从具有 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 实例,这应该非常简单。请任何建议。
我正在尝试在 EC2 实例中使用 AWS CLI 执行 API 网关。我在 AWS CLI 文档中没有找到任何命令。以前有人使用过 CLI 来执行 API 网关端点吗?
感谢
aws-api-gateway ×10
aws-lambda ×2
amazon-iam ×1
amazon-sqs ×1
api-gateway ×1
aws-cli ×1
aws-sam ×1
boto3 ×1
docker ×1
java ×1
node.js ×1