我正在使用 Amazon Webservice 对 lambda 函数进行触发事件,但我不知道如何获取文件名。
触发事件是在我的 s3 上创建新文件时。
我正在使用 python,我调用的函数是:
def lambda_handler(event, context):
Run Code Online (Sandbox Code Playgroud)
有谁知道如何添加文件名?
我正在使用 boto3 调用 lambda 函数,其中:
import boto3
import json
client = boto3.client('lambda')
response = client.invoke(
InvocationType='RequestResponse',
FunctionName=test_lambda_arn,
LogType='Tail',
Payload=json.dumps(data)
)
Run Code Online (Sandbox Code Playgroud)
它botocore.vendored.requests.exceptions.ReadTimeout在 626 秒后引发异常。我已将此 lambda 配置为在 100 秒后超时。当我用 boto 创建它时,我这样做了。当我进入 AWS 控制台时,它说这个 lambda 的超时时间为 1 分 40 秒。
那么为什么invoke命令在 626 秒后超时,而不是 100 秒后呢?
是因为重试吗?如果是这样,我如何禁用重试?
编辑:在 CloudWatch 日志中,我可以看到每个client.invoke调用的多个调用。因此会发生一些自动重试的事情。以下是该文档的client.invoke。
我想知道我们如何使用 aws lambda (python) 将文件从 S3 存储桶中的文件夹复制和移动到同一存储桶中的不同文件夹?
我有一个在 AWS 中运行的数据迁移作业,它将数据发送到 Kinesis Stream 和一个 Lambda 函数,该函数充当将数据写入 DynamoDB 的使用者(我将 kinesis 设置为 lambda的触发器)。
当 Kinesis Stream 开始命中时,我的问题就出现了:
超出写入吞吐量(计数/请求)- 平均值 - WriteProvisionedThroughputExceeded
我在该图表上看到 200 或 300 次计数,即使 lambda 使用者从未停止读取数据并将数据写入 DDB 表,但是一旦迁移过程完成(没有更多信息要发送到 kinesis)我注意到有一些丢失的记录(lambda 使用者从未失败),我的问题是:当 AWS Kinesis Stream 返回“ProvisionedThroughputExceededException”时,数据是否丢失?那些数据永远不会发送给kinesis消费者?
我有以下代码要执行。我试过需要 mysql 和 node-mysql ,它们都给我同样的错误:
代码:
var AWS = require("aws-sdk");
var mysql = require("mysql");
exports.handler = (event, context, callback) => {
try {
console.log("GOOD");
}
catch (error) {
context.fail(`Exception: ${error}`)
}
};
Run Code Online (Sandbox Code Playgroud)
错误:
{
"errorMessage": "Cannot find module 'mysql'",
"errorType": "Error",
"stackTrace": [
"Function.Module._load (module.js:417:25)",
"Module.require (module.js:497:17)",
"require (internal/module.js:20:19)",
"Object.<anonymous> (/var/task/index.js:2:13)",
"Module._compile (module.js:570:32)",
"Object.Module._extensions..js (module.js:579:10)",
"Module.load (module.js:487:32)",
"tryModuleLoad (module.js:446:12)",
"Function.Module._load (module.js:438:3)"
]
}
Run Code Online (Sandbox Code Playgroud)
如何使用 lambda 将 mysql 导入节点或使其工作?
我正在尝试在 AWS Lambda 中调用代码。此 Lambda 代码已使用我的 IOT 按钮进行配置。在运行此代码时,我没有看到任何错误。此外,我在我的移动设备上并没有真正看到所需的推送通知。
我可以在控制台中看到此消息: MissingRequiredParameter: Missing required key 'Message' in params
这是我的代码:
'use strict';
console.log('Loading function');
var AWS = require('aws-sdk');
var sns = new AWS.SNS();
AWS.config.region = 'xxxxx';
const TopicArn = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
exports.handler = function(event, context) {
console.log("\n\nLoading handler\n\n");
console.log('Received event:', event);
const sin =
{
"default": "Start",
"APNS_SANDBOX":"{\"aps\":{\"alert\":\"Start\"}}",
"GCM": "{ \"notification\": { \"text\": \"Start\" } }"
} // for single click
const doub = {
"default": "Stop",
"APNS_SANDBOX":"{\"aps\":{\"alert\":\"Stop\"}}",
"GCM": "{ \"notification\": { \"text\": \"Stop\" …Run Code Online (Sandbox Code Playgroud) 我正在使用 nodeJS 代码使用请求模块进行休息调用。我也使用了回调函数,但请求函数没有被执行。
我的流程转到函数 searchTSTData 但请求方法没有被执行。
从回调函数中,我只得到 responseString = 'Yet to make query rest',我已在 searchTSTData 函数中对其进行了初始化。它不会根据 API 返回的响应进行更新,该响应应该是错误或成功响应字符串。
我已将模块包含在 zip 中,因为 lambda 不会抛出错误并通过测试。另外我确定请求模块不能像在 Cloudwatch 日志中那样工作我没有看到我在请求中写的任何 console.logs。
请建议我哪里出错了。我是 NodeJS 的新手。
这是代码 -
'use strict';
const request = require('request');
const Alexa = require('alexa-sdk');
const APP_ID = 'amzn1.ask.skill.80a49cf5-254c-123a-a456-98745asd21456';
const languageStrings = {
'en': {
translation: {
TST: [
'A year on Mercury is just 88 days long.',
],
SKILL_NAME: 'TEST',
GET_TST_MESSAGE: "Here's your TST: You searched for ",
HELP_MESSAGE: 'You can say get …Run Code Online (Sandbox Code Playgroud) 有问题的 EC2 实例位于私有子网中,设计上没有通过 NAT 启用 Internet 访问。目前,我的 Lambda 位于连接到同一 VPC 的公有子网中。
当我尝试调用 Lambda 时,我收到Connection to lambda.us-east-1.amazonaws.com timed out.
我在 Amazon 的 Lambda 服务上上传了以下 Java 类:
public class DevicePutHandler implements RequestHandler<DeviceRequest, Device> {
private static final Logger log = Logger.getLogger(DevicePutHandler.class);
public Device handleRequest(DeviceRequest request, Context context) {
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.defaultClient();
DynamoDBMapper mapper = new DynamoDBMapper(client);
if (request == null) {
log.info("The request had a value of null.");
return null;
}
log.info("Retrieving device");
Device deviceRetrieved = mapper.load(Device.class, request.getDeviceId());
log.info("Updating device properties");
deviceRetrieved.setBuilding(request.getBuilding());
deviceRetrieved.setMotionPresent(request.getMotionPresent());
mapper.save(deviceRetrieved);
log.info("Updated device has been saved");
return deviceRetrieved;
}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个执行角色集,可以让我完全控制 DynamoDB。我的权限应该完全没有问题,因为我以这种完全相同的方式对使用 Lambda 和 DynamoDB 的其他项目使用了完全相同的权限(唯一的区别是不同的请求类型)。 …