我知道有很多关于映射请求数据的问题,但是没有人帮助过我.所以,我想要实现的是一个映射到lambda的API端点.当存储桶触发404时,将转发对该端点的请求,并通过请求路径将参数传递给lambda,例如:/ {image_name}/{width}/{height}.我的lambda代码只是调用context.succeed(event, context);
在集成请求中,我创建了三个映射模板:plain/text,plain/html,application/json,定义与bellow相同:
#set($inputRoot = $input.path('$'))
{
"name": $input.params('name'),
"width" : $input.params('width'),
"height" : $input.params('height'),
"params": $input.params(),
"resourcePath": $context.resourcePath,
}
Run Code Online (Sandbox Code Playgroud)
当我打电话给一个chrome rest客户端时,我得到:
从控制台调用测试时,我得到以下响应:{"Type":"User","message":"Could not parse request body into json."}
当我调用curl或者只是在浏览器中打开URL时,得到的响应
相同.
但是在控制台测试调用的日志中我看到:
Execution log for request test-request
Tue Sep 08 09:10:20 UTC 2015 : Starting execution for request: test-invoke-request
Tue Sep 08 09:10:20 UTC 2015 : API Key: test-invoke-api-key
Tue Sep 08 09:10:20 UTC 2015 : Method request path: {name=name, width=100, height=100}
Tue Sep 08 …Run Code Online (Sandbox Code Playgroud) 我尝试使用AWS API Gateway,Lambda和Cognito设置测试API,以确保访问安全。由于我是AWS领域的新手,因此我不确定如何使用例如 我首先必须通过Cognito和客户端登录的客户端上的请求库创建到AWS服务的“已登录”发布请求。AWS Api,然后使用我得到的信息来创建一个已签名的请求,如下所示:http : //docs.aws.amazon.com/general/latest/gr/sigv4_signing.html?
如果我走错了路,请告诉我并指出正确的方向:)
amazon-web-services amazon-iam amazon-cognito aws-api-gateway
我正在使用SendGrid Parse API(https://sendgrid.com/blog/parse-webhook-tutorial/)将传入的电子邮件正文过帐到AWS API Gateway。
当我将webhook发送到requestb.in时,我得到的响应很好。
当我使用Postman伪造对服务器的请求时,我得到了正确的响应。
但是,当我告诉SendGrid将Webhook发送到我的服务器时,我收到来自SendGrid的400错误响应错误,并且我的服务器再也没有受到攻击(因此,我认为API网关抛出了该错误)。
有什么简单的我想念的吗?我尝试设置CORS,但不是(或者我设置错了)。
我很沮丧
谢谢!
javascript amazon-web-services sendgrid aws-lambda aws-api-gateway
我打开了高速缓存GET请求,但它也适用于POST,因为后期有它目前缓存POST一次和棍棒与它不管POST身体没有查询字符串.
有没有办法为POST方法关闭它或告诉缓存帖子正文有密钥缓存它?
我想要做的是为我的Lambda函数设置API网关,在DynamoDB中保存一些(或者我想仅为登录用户使用的其他东西).但我不明白如何验证AccessToken以及如何从中获取用户.
我在AWS论坛上发现了这篇文章,我决定尝试方法1.
Cognito用户池+ API网关+ API网关自定义授权程序+ Cognito用户池访问令牌.
所以现在我已登录用户:
var authenticationData = {
Username : 'username', // your username here
Password : 'password', // your password here
};
var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);
var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
console.log('access token + ' + result.getAccessToken().getJwtToken());
....
Run Code Online (Sandbox Code Playgroud)
和他的accessToken.我还在API调用中设置了自定义API网关自定义授权程序.
现在我应该验证访问令牌并决定是允许还是拒绝方法调用.但我不明白该怎么做以及如何从令牌中检索用户?
amazon-web-services amazon-cognito aws-lambda aws-api-gateway
在尝试创建AWS::ApiGateway::BasePathMapping通过CloudFormation时,我收到以下错误:
Invalid domain name identifier specified
Run Code Online (Sandbox Code Playgroud)
以下是我的CloudFormation模板应该创建的部分AWS::ApiGateway::BasePathMapping:
{
"Parameters": {
"ApiDomainName": {
"Description": "The domain name for the API",
"Type": "String"
}
},
"Resources": {
"ApiBasePathMapping": {
"Type": "AWS::ApiGateway::BasePathMapping",
"Properties": {
"DomainName": {
"Ref": "ApiDomainName"
},
"RestApiId": {
"Ref": "RepositoryApi"
},
"Stage": {
"Ref": "ApiProductionStage"
}
},
"DependsOn": [
"ApiProductionStage"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
该文件并没有提及,它需要什么特别的DomainName,但该资源的文档似乎缺乏一些信息(它没有列出,例如产出,即使是有Distribution Domain Name作为例子创建).
堆栈的其余部分按预期工作.我试图将此资源添加为更改集.我拥有我想要使用的域名,并且我已在ACM中为此域创建了证书.
我想做什么:
我想要做的是有一个url,它会向调用者返回一个CSV文件,该文件本质上是一个数据导出.我希望这仍然是一个无服务器的解决方案.
我做了什么:
我用我想要的URL创建了一个AWS API Gateway.我创建了一个lambda,它将查询数据库并创建该数据的CSV字符串.该数据放在JSON对象中并返回.然后,API网关从json对象获取CSV数据,并使用适当的标头将CSV返回给调用者,以指示它是CSV和附件.从浏览器测试我会像我预期的那样自动下载.
我看到的问题:
这很有效,直到有大量的数据,我开始得到"体型太长".
我试图解决:
我做了一些谷歌搜索,我看到其他人有类似的问题.在一个解决方案中,我看到他们返回了他们创建的文件的链接.这个解决方案似乎对他们可行,因为他们有一台服务器 对于我的无服务器架构,它似乎有点棘手.我可以把文件存储到S3然后我必须返回一个链接到S3.这似乎可以工作,但感觉不像我错过配置选项.它也感觉就像通过返回s3 url来暴露实现.
我一直在寻找教程和人们做类似事情的例子,我没有找到任何东西.
我的问题:
有没有办法做到这一点?还有其他我不知道的解决方案吗?如何从较大尺寸的API网关返回文件,在本例中为CSV
我按照该教程创建了到我的私人Elb平衡器的VPC链接。 https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-api-with-vpclink-cli.html
但是它失败了,并收到错误消息“ statusMessage”:“ NLB ARN格式错误”。
我确实通过elbv2 cli找到了具有相同ARN的ELB,因此ARN必须是合法的。
我找不到解决问题的文件。有人可以帮助我吗?谢谢。
我所做的如下。
$ aws elbv2 describe-load-balancers --load-balancer-arns arn:aws:elasticloadbalancing:ap-northeast-1:846239845603:loadbalancer/app/v2-api-balancer/db49ab0ecaef1de8
{
"LoadBalancers": [
{
"Scheme": "internal",
"SecurityGroups": [
"sg-9282b8f4"
],
"LoadBalancerArn": "arn:aws:elasticloadbalancing:ap-northeast-1:846239845603:loadbalancer/app/v2-api-balancer/db49ab0ecaef1de8",
"State": {
"Code": "active"
},
"CreatedTime": "2017-10-18T04:27:28.780Z",
"VpcId": "vpc-dbe3f2be",
"DNSName": "internal-v2-api-balancer-988454399.ap-northeast-1.elb.amazonaws.com",
"AvailabilityZones": [
{
"SubnetId": "subnet-7642062e",
"ZoneName": "ap-northeast-1c"
},
{
"SubnetId": "subnet-c454fa8d",
"ZoneName": "ap-northeast-1b"
}
],
"IpAddressType": "ipv4",
"Type": "application",
"LoadBalancerName": "v2-api-balancer",
"CanonicalHostedZoneId": "Z14GRHDCWA56QT"
}
]
}
Run Code Online (Sandbox Code Playgroud)
$ aws apigateway create-vpc-link \
--name my-test-vpc-link-1 \
--target-arns "arn:aws:elasticloadbalancing:ap-northeast-1:846239845603:loadbalancer/app/v2-api-balancer/db49ab0ecaef1de8"
{
"name": "my-test-vpc-link-1",
"targetArns": [ …Run Code Online (Sandbox Code Playgroud) 我正在编写供内部使用的API,并且这是我第一次使用无服务器框架。我正在Node.js中编写Lambda函数,并使用AWS API Gateway进行连接。
在某些情况下,我想返回一个自定义错误消息,而我试图编写一个允许我执行此操作的函数。现在,每当Lambda进程失败时,我都会从API收到一条标准消息。在代码中,如果我尝试使用杀死进程process.exit(1),即使我已经使用callback()以下命令返回了错误,也会收到一般错误:
{
"message": "Internal server error"
}
Run Code Online (Sandbox Code Playgroud)
如果不使用process.exit(1),我会callback()在日志中看到通过错误返回的错误,但是该过程继续进行,最终超时:
{
"message": "Endpoint request timed out"
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几种使用该callback()方法返回错误的方法,但是到目前为止,我还没有成功。我试过这种方法:
async function return_error(callback, context, error, returnCode){
console.error("FATAL ERROR: ", error);
let ErrorObj = {
errorType : "InternalServerError",
httpStatus : 500,
requestId : context.awsRequestId,
errorMessage : error
}
callback(JSON.stringify(ErrorObj));
process.exit(1);
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
async function return_error(callback, error, returnCode){
console.error("FATAL ERROR: ", error);
callback({
isBase64Encoded: false,
statusCode: returnCode,
headers: { 'Content-Type': 'application/json' …Run Code Online (Sandbox Code Playgroud) node.js aws-lambda aws-api-gateway serverless-framework serverless
我想在AWS lambda上构建适当的打字稿项目。
现在,我有以下定义:
export type HttpResponse = {
statusCode: number;
headers: {};
body: string;
}
export async function readCollection (event, context, callback): Promise<HttpResponse>{
console.log(event); // Contains incoming request data (e.g., query params, headers and more)
const data = [
{
id: "a7b5bf50-0b5b-11e9-bc65-6bfc39f23288",
name: "some thing",
uri: `/notifications/a7b5bf50-0b5b-11e9-bc65-6bfc39f23288`
}
]
const response = {
statusCode: 200,
headers: {
},
body: JSON.stringify({
status: "ok",
data: data
})
};
return response;
};
Run Code Online (Sandbox Code Playgroud)
但
除了使用自定义HttpResponse类型,我还想使用一个官方定义。
但是我要导入和返回哪种正式类型?
aws-api-gateway ×10
aws-lambda ×7
amazon-iam ×1
amazon-s3 ×1
aws-elb ×1
aws-vpc ×1
javascript ×1
node.js ×1
sendgrid ×1
serverless ×1
typescript ×1