当另一个 AWS Java Lambda 函数位于同一账户、同一区域时,如何从另一个 AWS Java Lambda 函数调用这两个函数
我有一个java aws lambda函数或处理程序作为AHandler,它可以做一些事情,例如,它已经订阅了SNS事件,它解析该SNS事件并将相关数据记录到数据库中。
我有另一个java aws lambda BHandler,这个BHandler的目标是接收来自AHandler的请求并提供对AHandler的响应。因为BHandler的目标是提供一些json数据的响应。这将被AHandler使用。
我能看到任何明确的例子来说明我们如何做这些事情吗?
我看到这个例子从java类调用lambda函数,从java调用lambda函数
我的问题谈到了这种情况,当一个aws java lambda函数(或处理程序)调用另一个aws java lambda函数时,两者都在同一个区域,相同的账户,相同的vpc执行内容,相同的权限。在这种情况下,aws java lambda函数可以直接调用(或调用)到另一个函数,或者它仍然必须提供aws键,区域等东西(如上面的链接所示)?一个明确的例子/解释将是非常有帮助的。
编辑
正在调用另一个 Lambda 函数 (BHandler) 的 AHandler 存在于同一账户上,已经提供了完整的 AWSLambdaFullAccess,其中包含所有内容,例如
“iam:PassRole”, “lambda:*”,
下面是要调用的代码:
注意:当我从普通的java主函数调用相同的函数时,下面的代码是有效的。但它不像从lambda函数调用那样工作(就像ALambdaHandler调用BLambdaHandler作为函数调用一样)。即使它没有返回任何例外。它只是显示超时,它卡在代码:lambdaClient.invoke
String awsAccessKeyId = PropertyManager.getSetting("awsAccessKeyId");
String awsSecretAccessKey = PropertyManager.getSetting("awsSecretAccessKey");
String regionName = PropertyManager.getSetting("regionName");
String geoIPFunctionName = PropertyManager.getSetting("FunctionName");
Region region;
AWSCredentials credentials;
AWSLambdaClient lambdaClient;
credentials = new BasicAWSCredentials(awsAccessKeyId,
awsSecretAccessKey);
lambdaClient = (credentials == null) ? new AWSLambdaClient()
: new AWSLambdaClient(credentials);
region = Region.getRegion(Regions.fromName(regionName));
lambdaClient.setRegion(region);
String returnGeoIPDetails = null;
try {
InvokeRequest invokeRequest = new InvokeRequest();
invokeRequest.setFunctionName(FunctionName);
invokeRequest.setPayload(ipInput);
returnDetails = byteBufferToString(
lambdaClient.invoke(invokeRequest).getPayload(),
Charset.forName("UTF-8"),logger);
} catch (Exception e) {
logger.log(e.getMessage());
}
编辑我按照别人的建议做了一切,并遵循了一切。最后,我联系了AWS支持部门,问题与一些VPC配置有关,并且得到了解决。如果您遇到过类似的东西,那么可能会检查安全配置,VPC的东西。