当尝试执行Amazon Web Services(AWS)Lambda函数(多次)时,我们看到了错误:
AWS Lambda TooManyRequestsException: Rate Exceeded
我们如何解决这个问题?
rate-limiting amazon-web-services node.js aws-lambda serverless
我需要创建一个Zip文件,其中包含位于我的s3存储桶中的一系列文件(视频和图像).
目前使用我的代码的问题是我很快就达到了Lambda的内存限制.
async.eachLimit(files, 10, function(file, next) {
var params = {
Bucket: bucket, // bucket name
Key: file.key
};
s3.getObject(params, function(err, data) {
if (err) {
console.log('file', file.key);
console.log('get image files err',err, err.stack); // an error occurred
} else {
console.log('file', file.key);
zip.file(file.key, data.Body);
next();
}
});
},
function(err) {
if (err) {
console.log('err', err);
} else {
console.log('zip', zip);
content = zip.generateNodeStream({
type: 'nodebuffer',
streamFiles:true
});
var params = {
Bucket: bucket, // name of dest bucket
Key: 'zipped/images.zip', …Run Code Online (Sandbox Code Playgroud) 我使用nodeJS sdk将项目放到dynamoDB,该项目是:
{
"eventId": date + '-' + eventName + '-' + eventPurpose,
"eventName": eventName,
"eventPurpose": eventPurpose,
"eventDates": eventDates,
"attendees": attendees
}
Run Code Online (Sandbox Code Playgroud)
将项目放入dynamoDB的当前代码:
const params = {
TableName: "event",
Item: {
"eventId": date + '-' + eventName + '-' + eventPurpose,
"eventName": eventName,
"eventPurpose": eventPurpose,
"eventDates": eventDates,
"attendees": attendees
},
ReturnValues: "ALL_OLD"
};
dynamo.put(params, (err, data) => {
console.log("coming here");
if (err) {
console.log("error : " + JSON.stringify(err));
}
console.log("data" + JSON.stringify(data));
cb(null, data);
});
Run Code Online (Sandbox Code Playgroud)
插入正确发生,返回值是一个空对象.
我想返回插入的项目.我找到了这个文档.但只有在更新旧值时才会返回.除了这个,我找不到任何其他有用的信息.
是否有任何解决方法或者我们只需要 …
amazon-web-services node.js amazon-dynamodb aws-lambda serverless-framework
我需要一些lambda函数来获得这个流程:
触发S3 put文件事件 - > lambda函数 - >将行插入DynamoDB
当我从lambda屏幕使用AWS创建测试时,我得到了这个示例,Records列表中只有1条记录:
{
"Records": [ // <<<----------------only 1 element
{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": "arn:aws:s3:::mybucket",
"name": "roeyg-oregon-s3-bucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法来查看是否可以在此列表中获得包含多个元素的列表,例如使用CLI或将多个文件一起上传甚至整个文件夹,在所有这些场景中,我每个事件都有一个项目. …
我有一个用于向另一个端点发出 HTTP POST 请求的 AWS Lambda 函数的 Python 脚本。由于Python的urllib2.request,https://docs.python.org/2/library/urllib2.html,只能在标准处理数据application/x-www-form-urlencoded格式,我要张贴JSON数据,我使用的请求库,https://pypi.org /project/requests/2.7.0/。
该请求库在 Python 运行时环境中的 AWS Lambda 中不可用,因此必须通过from botocore.vendored import requests. 到现在为止还挺好。
今天,我收到了一个弃用警告:
DeprecationWarning: You are using the post() function from 'botocore.vendored.requests'.
This is not a public API in botocore and will be removed in the future.
Additionally, this version of requests is out of date. We recommend you install the
requests package, 'import requests' directly, and use the requests.post() function instead. …Run Code Online (Sandbox Code Playgroud) 我有一个 lambda,当给定操作失败时,它会发送到 STDERR,如下所示:
async function handler(event, context) {
const success = do()
if (success) {
return { statusCode: 200 }
}
console.error('Failed :(')
return { statusCode: 400 }
}
Run Code Online (Sandbox Code Playgroud)
这非常简单,但你明白了。当然,此消息会出现在 CloudWatch 上。我想知道是否可以(以及如何)设置 CloudWatch 警报,以便在我的日志中显示此消息时向我发送电子邮件。
我已经阅读了有关 CloudWatch 警报的文档,但它非常混乱,很难在那里找到任何内容。
我希望利用ES6 附带的本机导入/导出。
我在 AWS Lambda 中使用无服务器容器。
我有我的Dockerfile看起来像这样:
FROM public.ecr.aws/lambda/nodejs:14
COPY app ./
RUN npm install
CMD [ "app.handler" ]
Run Code Online (Sandbox Code Playgroud)
然后我有一个app包含我的应用程序代码的目录。该app.js代码如下所示:
import { success } from './utils/log';
exports.handler = async () => {
success('lambda invoked');
const response = 'Hello World';
return {
statusCode: 200,
body: JSON.stringify(response),
isBase64Encoded: false,
};
};
Run Code Online (Sandbox Code Playgroud)
正如您从这一行中看到的,import { success } from './utils/log';我正在使用本机导入。
在我的 package.json 中,我指定了这个:
"type": "module"
Run Code Online (Sandbox Code Playgroud)
因为我需要告诉我的应用程序这是一个模块,我想本地导入。如果我不指定这一点,我会得到:
{
"errorType": "Runtime.UserCodeSyntaxError",
"errorMessage": "SyntaxError: Cannot use import statement …Run Code Online (Sandbox Code Playgroud) javascript containers amazon-web-services node.js aws-lambda
我正在尝试使用 cloudformation 模板中的现有角色(存在于 AWS 帐户中)来设置 lambda 函数,我计划在多个 AWS 帐户中使用它。
在 CF 模板中,我使用参数来设置角色的名称,然后在 Lambda 函数的角色属性中使用 Ref。这就是我的模板的样子,
"Parameters" : {
"ExistingRoleName" : {
"Type" : "String",
"Default" : "MyCustomRole"
}
"Resources" : {
"CustomLambdaFunction" : {
"Type" : "AWS::Lambda::Function",
"Properties" : {
"MemorySize" : "128",
"Role" : { "Ref" : "ExistingRoleName" },
}
},
...
Run Code Online (Sandbox Code Playgroud)
但是,CF 模板失败并出现以下错误:
Properties validation failed for resource CustomLambdaFunction with message: #/Role: failed validation constraint for keyword [pattern]
Run Code Online (Sandbox Code Playgroud)
这是因为 Cloudformation 中的 Lambda 资源需要角色 arn 而不是 RoleName,正如我在此文档aws-resource-lambda-function中看到的那样
基于此我像这样更新了CF, …
我尝试执行 Lambda 函数,但收到以下错误:
{
"errorMessage": "Bad handler 'AlertMetricSender': not enough values to unpack (expected 2, got 1)",
"errorType": "Runtime.MalformedHandlerName",
"stackTrace": []
}
Run Code Online (Sandbox Code Playgroud)
我的 Lambda 处理程序在以下位置指定AlertMetricSender.py:
from modules.ZabbixSender import ZabbixSender
def lambda_handler(event, context):
sender = ZabbixSender("10.10.10.10", 10051)
sender.add("Zabbix server", "lambda.test", 5.65)
sender.send()
Run Code Online (Sandbox Code Playgroud) 使用无服务器,我们可以process.env通过创建这样的配置文件条目来添加变量:
environment:
STRIPE_SECRET_KEY: ${self:custom.secrets.stripeSecretKey} # Stripe secret API key
Run Code Online (Sandbox Code Playgroud)
我们可以像这样在 lambda 函数中访问它:
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
Run Code Online (Sandbox Code Playgroud)
我们如何使用 AWS Amplify 做到这一点?
amazon-web-services node.js aws-lambda aws-sdk-js aws-amplify
aws-lambda ×10
node.js ×5
amazon-s3 ×2
python ×2
aws-amplify ×1
aws-sdk-js ×1
containers ×1
javascript ×1
python-3.x ×1
serverless ×1