我编写了一个代码来获取从kinesis流到lambda函数的记录,该函数提供Data,分区ID和序列号的输出有效负载,然后我尝试调用第二个lambda来获取序列号和分区ID Lambda,然后第二个lambda从kinesis流中提取数据。我一直坚持使用序列号和分区ID从kinesis流中获取数据。
以下是将一个lambda调用到另一个lambda的代码。
public class LambdaFunctionHandler implements RequestHandler<KinesisEvent, Object> {
private static final String regionName = "us-east-1";
private static final String functionName = "Test1";
@Override
public Object handleRequest(KinesisEvent input, Context context) {
context.getLogger().log("Input: " + input);
List<KinesisEventRecord> records = input.getRecords();
for (KinesisEventRecord rec : records){
ByteBuffer recdata = rec.getKinesis().getData();
String data = new String( recdata.array(), Charset.forName("UTF-8") );
context.getLogger().log("Data: " +data);
context.getLogger().log("Partition key: " +rec.getKinesis().getPartitionKey());
context.getLogger().log("Sequence Number: " +rec.getKinesis().getSequenceNumber());
}
//call another lambda function
try {
AWSLambdaClient lambda = new AWSLambdaClient();
Region region = Region.getRegion(Regions.fromName(regionName));
lambda.setRegion(region);
InvokeRequest invokeRequest = new InvokeRequest();
invokeRequest.setFunctionName(functionName);
invokeRequest.setPayload("\" AWS Lambda Test - internal call\"");
System.out.println(
lambda.invoke(invokeRequest).getPayload());
} catch (Exception e) {
System.out.println(e.getMessage());
}
// TODO: implement your handler
return null;
}
}
这是我尝试使用序列号和分区ID获取记录的代码。
public class LambdaFunctionHandler implements RequestHandler<KinesisEvent, Object> {
private static final String streamName = "Test";
private static final String partitionKey = "123456676454";
private static final String sequenceNumber = "12345"
public Object handleRequest(KinesisEvent input, Context context) {
context.getLogger().log("Input: " + input);
GetRecordsRequest getRecordsRequest = new GetRecordsRequest();
getRecordsRequest.setStreamName(streamName);
getRecordsRequest.setPartitionKey(partitionKey);
getRecordsRequest.setsequenceNumber(sequenceNumber);
KinesisEvent.getRecord(getRecord);
}
}
请让我知道一种使用序列号和分区ID从kinesis流中获取记录的方法。
答案 0 :(得分:1)
您无法决定要读取的流,也不能确定Lambda函数内部的位置。 在Lambda函数运行之前,您需要在kinesis流和此lambda函数之间创建映射。 这将在每次新记录到达时触发lambda。
基本上,Lambda函数无法决定自己的输入。