我正在研究SAM模板,用于在AWS Serverless存储库中发布我的应用程序。但是,当我尝试为lambda添加策略时,会显示错误消息:Invalid Serverless Application Specification文档。发现的错误数量:1.错误:ID为[SyncPostDataFromSfLambda]的资源无效。“策略”属性中仅支持策略模板。
以下是我的SAM模板的示例:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Transform": "AWS::Serverless-2016-10-31",
"Description": "Deployment",
"Resources": {
"SyncPostDataToSfLambda": {
"Type": "AWS::Serverless::Function",
"Properties": {
"Handler": "index.handler",
"FunctionName": "myLambdaFunction",
"CodeUri": "s3 URL",
"Runtime": "nodejs6.10",
"MemorySize": 512,
"Policies": [
"AmazonDynamoDBFullAccess"
],
"Events": {
"PostResource": {
"Type": "Api",
"Properties": {
"RestApiId": {
"Ref": "API"
},
"Path": "/apipath",
"Method": "post"
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我试过下面的代码。
var exec = require('child_process').execFile;
var runCmd = 'java -jar ' + process.env.LAMBDA_TASK_ROOT + '/src/' + 'myjar.jar'
exec(runCmd,
function (err, resp) {
if (err) {
cb(null, { err: err})
} else {
cb(null, { resp: resp})
}
)
Run Code Online (Sandbox Code Playgroud)
在这里,我也将我的 jar 文件放在根文件夹和 src 文件夹中。但它给出了我的以下错误。我已经添加了带有代码的 .jar 文件。但是出现以下错误。
"err": {
"code": "ENOENT",
"errno": "ENOENT",
"syscall": "spawn java -jar /var/task/src/myjar.jar",
"path": "java -jar /var/task/src/myjar.jar",
"spawnargs": [],
"cmd": "java -jar /var/task/src/myjar.jar"
}
Run Code Online (Sandbox Code Playgroud)
那么如何,我可以在 AWS Lambda 环境中执行这个 .jar 文件吗?请帮我。
我正在评估无服务器 v AWS SAM CLI。我试图了解在使用以下内容进行开发时如何促进本地开发工作流程:-
我可以从文档中看到无服务器具有以下本地选项:-
如果有以下解决方案,则不明显:-
我可以从 SAM 文档中看到,可以针对本地 DynamoDB 测试 python Lambdas。不清楚还有什么可能,或者您是否必须将其指向一个实际的 AWS 实例(S3、SQS 等)
任何指针?
我正在使用无服务器部署我的 API,使用 lambda 集成,我收到错误“不支持的媒体类型”。我在这里做错了什么,但不确定是什么。如果我在 AWS 控制台中手动设置它,它工作得很好,但我想在无服务器中进行。下面是我的 serverless.yml 的一个片段,一个我希望它在部署后看起来像的屏幕截图,以及我的 serverless.yml 的当前外观的屏幕截图。
events:
- http:
path: /path
method: post
integration: lambda
Run Code Online (Sandbox Code Playgroud)
AWS 控制台中的集成响应和方法响应当前的样子:
我希望它们看起来像什么:
基本上,集成响应 HTTP 状态模式和方法响应模型需要包含在 serverless.yml 中,但我还没有找到正确的配置。它们根本没有包含在我的示例中,因为我不知道要放入哪个失败的示例。文档使它看起来相当简单,但到目前为止我的所有尝试都没有得到我想要的结果。
amazon-web-services aws-api-gateway serverless-framework serverless
我正在尝试使用 AWS lambda、API 网关和 Dynamo 作为数据存储来实现具有 GET 和 PUT API 的用户服务
GET API 将获取给定 userId 的数据,PUT 将更新给定 userId 的用户详细信息
我的要求是
由于 GET API 的吞吐量很大,我需要缓存 API 响应,以便减少后续请求中的响应时间。缓存还需要有一个 TTL。
对同一个 userId 的任何成功 put 请求都会使缓存无效,随后的 GET 请求将从 DB 中获取并再次缓存它
我可能会使用 redis 集群进行缓存。但这可能会增加额外的 VPC 调用开销
题:
amazon-dynamodb aws-lambda aws-api-gateway serverless-framework serverless
我知道这个问题可能会重复,但是现有的问题都没有指向我没有做的任何事情......
我已经使用无服务器框架部署了一个 API,但是我在使用 CORS 时遇到了问题。
我正在使用 axios 执行 get 请求:
axios.get('https://test.execute-api.us-west-1.amazonaws.com/dev/test?from=2012-01-09T21:40:00Z')
.then(response => {
this.data = response.data;
})
.catch(error => console.log(error))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Access to XMLHttpRequest at 'https://test.execute-api.us-west-1.amazonaws.com/dev/test?from=2012-01-09T21:40:00Z' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)
我已经做了什么:
此外,我的 Lambda 函数的响应返回以下标头:
return events.APIGatewayProxyResponse{
StatusCode: http.StatusOK,
Headers: map[string]string{
"Access-Control-Allow-Origin": "http://localhost:8080",
"Access-Control-Allow-Credentials": "true",
},
Body: string(jsonEvents),
}, nil
Run Code Online (Sandbox Code Playgroud)
我也尝试设置Access-Control-Allow-Origin为'*'
我的 serverless.yml 文件cors: true …
我正在尝试部署我的无服务器应用程序。但是有如下问题。
An error occurred: ApiGatewayResourceServicesServiceidVar - A sibling ({id}) of this resource already has a variable path part -- only one is allowed
Run Code Online (Sandbox Code Playgroud)
下面是我的代码。
updateApplication:
handler: handler.updateApplication
memorySize: 3008
description: Update application
timeout: 30
events:
- http:
path: services/{serviceId}/applications/{applicationId}
method: post
cors: true
authorizer: authorize
request:
parameters:
paths:
serviceId: true
applicationId: true
Run Code Online (Sandbox Code Playgroud)
任何意见或建议将不胜感激。先感谢您。
我正在使用Serverless部署 Node AWS Lambda。由于运行此代码的机构的内部要求,我需要通过额外的证书。我能找到的唯一解决方案是将NODE_EXTRA_CA_CERTS作为 CLI 参数传递。使用典型的环境变量(例如在dotenv中定义)不起作用,因为此时在 Node 中已经配置了证书。
我的额外证书位于MyCerts.pem项目根目录中,我尝试运行的 Lambda 函数称为function1. 在本地运行 LambdaNODE_EXTRA_CA_CERTS=./MyCerts.pem npx serverless invoke local -f function1 -l可以正常工作。但是,一旦我使用 部署到 AWS npx serverless deploy -v,我就找不到正确包含这些附加证书的方法,包括使用NODE_EXTRA_CA_CERTS=./MyCerts.pem npx serverless invoke -f function1 -l.
我已经尝试了所有我能想到的方法并且不知所措。有人可以帮忙吗?
ssl-certificate amazon-web-services node.js aws-lambda serverless
我有这样的系统设计
SQS -> 触发器 -> Lambda -> 如果失败 -> DLQ
前提条件
跑了一会后
这是预期的吗?
在我看来,如果 Lambda 中没有错误抛出,DLQ 消息应该始终为零。
在 SNS 主题或 Lambda 函数上设置死信队列有什么区别?
我想知道,因为如果您在 SNS 订阅上设置 DLQ,那么当 Lambda(订阅者)失败时,该订阅消息将故障转移到 DLQ,对吗?那么在这种情况下,在这两个地方设置 DLQ 会产生相同的效果吗?
我在 SNS 主题订阅上设置了 DLQ,但它没有“自动”显示为 Lambda 屏幕设置上的 DLQ,所以我认为可能存在一些差异?
SNS 死信队列参考:https : //docs.aws.amazon.com/sns/latest/dg/sns-dead-letter-queues.html
通常,当 Amazon SNS 由于客户端或服务器端错误而无法访问订阅的终端节点时,消息传送会失败。
Lambda 死信队列参考:https : //aws.amazon.com/about-aws/whats-new/2016/12/aws-lambda-supports-dead-letter-queues/
在标准重试策略(失败时额外重试 2 次)用完后,AWS Lambda 会将调用 Lambda 函数的事件对象写入此 [DLQ] 端点。
拉姆达:
SNS订阅:
amazon-web-services dead-letter amazon-sns aws-lambda serverless
serverless ×10
aws-lambda ×7
node.js ×2
amazon-sns ×1
amazon-sqs ×1
aws-sam-cli ×1
dead-letter ×1
go ×1
jar ×1