我已经在 API 网关中实现了 GET 请求,并且工作正常,但今天我得到一个名称,其中有“+”符号,所以有人知道.../score?team=name+with+sign在哪里不起作用as ..../score?team-with-dashes工作得很好。请求的内容类型是application/json。
这是身体映射模板(application/json)
{
"body" : $input.json('$'),
"headers": {
#foreach($header in $input.params().header.keySet())
"$header": "$util.escapeJavaScript($input.params().header.get($header))" #if($foreach.hasNext),#end
#end
},
"method": "$context.httpMethod",
"params": {
#foreach($param in $input.params().path.keySet())
"$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end
#end
},
"query": {
#foreach($queryParam in $input.params().querystring.keySet())
"$queryParam": "$util.escapeJavaScript($input.params().querystring.get($queryParam))" #if($foreach.hasNext),#end
#end
}
}
Run Code Online (Sandbox Code Playgroud)
这与 URL 查询字符串参数或其他内容有关吗?
我有一些不同的服务(由无服务器框架生成)需要相互通信。数据敏感,需要身份验证。
我当前的策略是为每个服务创建一个 api 密钥,使用 json web 令牌在服务之间进行通信,如下所示的令牌。
fM61kaav8l3y_aLC/3ZZF7nlQGyYJsZVpLLiux5d84UnAoHOqLPu4dw3W7MiGwPiyN
Run Code Online (Sandbox Code Playgroud)
服务之间通信还有哪些其他选项?这种方法有什么缺点吗?重申一下,请求需要经过身份验证并适当处理敏感数据。
amazon-web-services aws-lambda aws-api-gateway serverless-framework
我创建了一个 lambda 函数,可以通过 API 网关访问该函数。但是,每当发出发布请求时,我都会收到以下错误
当我导航到控制台并查看 API Gateway 时,我有
最后,我的代码(Angular2)确实通过以下方式将适当的标头添加到请求中:
var headers = new HttpHeaders();
headers.append('Content-Type', 'application/json');
this.http.post('https://execute-api.us-east-1.amazonaws.com/prod/LambdaFunction', this.email, { headers: headers })
.subscribe(data => console.log(data),
err => console.log(err));
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?
我对 AWS 比较陌生,但阅读了大量文档,但找不到我需要的内容。
我正在尝试实现身份验证,用户支付订阅费用,并根据他们是否付费来访问 S3 存储桶和项目。
我尝试将 API Gateway 与 Cognito 授权者一起使用,但我不知道如何在用户已付款时添加检查(例如通过在 DynamoDB 中查找)。有没有办法向 Cognito 授权者添加自定义授权逻辑?如果没有,是否仍可以将 Cognito 用户池与自定义授权者一起使用?最重要的是,你将如何实施整个事情?
我愿意接受建议。
amazon-s3 amazon-web-services amazon-cognito aws-lambda aws-api-gateway
我正在使用 api 网关,并且在我的集成响应的正文映射模板中,我有:
#set ($errorMessageObj = $util.parseJson($input.path('$.errorMessage')))
#set ($bodyObj = $util.parseJson($input.body))
{
"searchObjects":"$input.body",
"statusCode":"$errorMessageObj.statusCode",
"message":"$errorMessageObj.message"
}
Run Code Online (Sandbox Code Playgroud)
现在,在我的代码的 api 网关部分中,我有:
GetMethod:
Type: AWS::ApiGateway::Method
DependsOn: APIGatewayToLambdaPermission
Properties:
AuthorizationType: NONE
HttpMethod: GET
Integration:
Type: AWS
IntegrationHttpMethod: POST
Uri:
Fn::Join:
- ''
- - 'arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/'
- Fn::ImportValue: !Sub ${project}-${EnvironmentApp}-lambda-es-
search
- "/invocations"
IntegrationResponses:
- StatusCode: 200
ResponseParameters:
method.response.header.Access-Control-Allow-Origin: "'*'"
Run Code Online (Sandbox Code Playgroud)
我不知道如何将其添加到我的云结构中:
#set ($errorMessageObj = $util.parseJson($input.path('$.errorMessage')))
#set ($bodyObj = $util.parseJson($input.body))
{
"searchObjects":"$input.body",
"statusCode":"$errorMessageObj.statusCode",
"message":"$errorMessageObj.message"
}
Run Code Online (Sandbox Code Playgroud)
这是我的 api 网关设置:
任何想法?
我在 AWS API 网关中有一个 API,使用 lambda 代理集成连接到 python 中的 AWS Lambda 函数。在我的本地计算机上,我正在用 python 测试这个 API。我想向 api 发送字典,并让 api 返回字典中元素的函数。
我用来测试的python代码是:
import requests
import json
url = "https://p68yzl6gu6.execute-api.us-west-1.amazonaws.com/test/helloworld"
headers = {'data': [0,1]}
response = requests.post(url, json=headers)
print(response.text)
Run Code Online (Sandbox Code Playgroud)
由于我无法通过 requests.post 的标头参数发送列表,所以我想我会使用 json。当我尝试这个时,我收到一条 {"message": "Internal server error"}。这是我的 AWS lambda 函数(python):
import json
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': event['data']
}
Run Code Online (Sandbox Code Playgroud)
查看日志,“数据”不是事件的关键。如何访问 AWS Lambda 函数中的列表?当我测试这个时,如何找出事件字典的样子?展望未来,我想发送一个包含字典和列表的大字典。这是正确的方法吗?
使用 CDK 将 ApiGateway 连接到 lambda,我们首先创建一个 RestApi(),然后创建一个 LambdaIntegration 将 Apigateway 连接到 lambda。使用 lambda 别名时如何执行此操作?
如何将 ApiGateway 指向特定的 Lambda 别名解释了如何在没有 CDK 的情况下将 ApiG 连接到 Lambda 别名。如何将其转换为 CDK?
我们的目标是为与 API Gateway 一起使用的 lambda 添加预配置并发和自动缩放。
我正在尝试在 Cloudformation 中为 API 网关创建 VPC 端点,但收到此错误:
Endpoint type (Gateway) does not match available service types ([Interface]).
Run Code Online (Sandbox Code Playgroud)
下面的模板放置在资源部分中:
executeApiEndpoint:
Type: AWS::EC2::VPCEndpoint
Properties:
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal: "*"
Action:
- "execute-api:Invoke"
- "execute-api:ManageConnections"
Resource:
- "arn:aws:execute-api:*:*:*"
RouteTableIds:
- !Ref privateRouteTable
ServiceName: !Sub com.amazonaws.${AWS::Region}.execute-api
VpcId: !Ref pubPrivateVPC
Run Code Online (Sandbox Code Playgroud)
这个也不起作用:
executeApiEndpoint:
Type: AWS::EC2::VPCEndpoint
Properties:
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal: "*"
Action:
- "execute-api:*"
Resource:
- "*"
RouteTableIds:
- !Ref privateRouteTable
ServiceName: !Sub com.amazonaws.${AWS::Region}.execute-api
VpcId: !Ref pubPrivateVPC
Run Code Online (Sandbox Code Playgroud)
但是,这个块(来自模板)能够在没有任何错误的情况下执行: …
我正在尝试生成指向 API 网关(使用 IAM 身份验证)的预签名链接,因此客户端可以访问我在此 API 网关后面的 Lambda 函数之一,而无需对请求进行身份验证。这主要是为了方便客户端,因此它可能会透明地使用响应中的一些链接,无论它们指向同一个经过身份验证的 API 网关、某个 S3 存储桶还是 Internet 中的任意 URL。
为此,我使用查询参数制作 API 签名 v4(请参阅文档和示例)
因此,如果我尝试签署以下针对us-west-2区域和execute-api服务范围的链接:
https://example.com/some/path?some=params
Run Code Online (Sandbox Code Playgroud)
我将得到以下结果(使用 Node.jsaws4库,但在这里无关紧要):
https://example.com/some/path?some=params&
X-Amz-Security-Token=<Session Token Removed>
X-Amz-Date=20210330T180303Z&
X-Amz-Algorithm=AWS4-HMAC-SHA256&
X-Amz-Credential=<Access Key Removed>%2F20210330%2Fus-west-2%2Fexecute-api%2Faws4_request&
X-Amz-SignedHeaders=host&
X-Amz-Signature=884f132ad6f0c7a850e6b1d22b5fed169c13e2189b6e0d0d568d11f967f4a8bd
Run Code Online (Sandbox Code Playgroud)
它有效!但只有在一代后的前 5 分钟......
五分钟过去后,我将收到以下错误响应:
https://example.com/some/path?some=params
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅对此问题的回复。
我尝试X-Amz-Expires使用各种值(小于和大于 300 秒)添加文档中提到的查询参数,但没有运气:行为不会改变。
对于由 IAM 实例凭证生成的链接,我至少需要几个小时,最多需要6 个小时,因为链接正在由另一个 Lambda 函数签名。
有没有办法增加 API Gateway 访问的预签名链接有效期?
aws-api-gateway ×10
aws-lambda ×6
amazon-s3 ×1
angular ×1
api ×1
aws-cdk ×1
caching ×1
json ×1
python ×1
sigv4 ×1