java - 当两个 AWS Java Lambda 函数都在同一个账户、同一个区域时,如何从另一个 AWS Java Lambda 函数调用 aws java lambda 函数

标签 java amazon-web-services aws-lambda

我有一个 java aws lambda 函数或处理程序作为 AHandler 来做一些事情,例如它已经订阅了 SNS 事件,它解析该 SNS 事件并将相关数据记录到数据库中。

我有另一个 java aws lambda BHandler,此 BHandler 的目标是接收来自 AHandler 的请求并向 AHandler 提供响应。因为 BHandler 的目标是提供带有一些 json 数据的响应。这将由 AHandler 使用。

我可以看到任何清楚的例子来说明我们如何做这些事情吗?

我看到了这个例子call lambda function from a java classInvoke lambda function from java

我的问题是关于这种情况,当一个 aws java lambda 函数(或处理程序)调用另一个 aws java lambda 函数时,两者位于同一区域、同一帐户、相同的 vpc 执行内容、相同的权限。 在那种情况下,aws java lambda 函数可以直接调用(或调用)另一个函数,或者它仍然必须提供 aws key 、区域等内容(如上面的链接所示)?一个清晰的示例/解释将非常有帮助。

编辑

正在调用另一个 Lambda 函数 (BHandler) 的 AHandler,存在于同一个帐户中,已为所有内容提供完整的 AWSLambdaFullAccess,例如

“我:传递角色”, “ 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 的东西。

最佳答案

我们通过使用 com.amazonaws.services.lambda.model.InvokeRequest 实现了这一点。 这是代码示例。

public class LambdaInvokerFromCode {
     public void runWithoutPayload(String functionName) {
            runWithPayload(functionName, null);
        }

        public void runWithPayload(String functionName, String payload) {
            AWSLambdaAsyncClient client = new AWSLambdaAsyncClient();
            client.withRegion(Regions.US_EAST_1);

            InvokeRequest request = new InvokeRequest();
            request.withFunctionName(functionName).withPayload(payload);
            InvokeResult invoke = client.invoke(request);
            System.out.println("Result invoking " + functionName + ": " + invoke);
    }



    public static void main(String[] args) {
            String KeyName ="41159569322017486.json";
            String status = "success";
            String body = "{\"bucketName\":\""+DBUtils.S3BUCKET_BULKORDER+"\",\"keyName\":\""+KeyName+"\", \"status\":\""+status+"\"}";
            System.out.println(body);

            JSONObject inputjson = new JSONObject(body); 
            String bucketName = inputjson.getString("bucketName");
            String keyName = inputjson.getString("keyName");
            String Status = inputjson.getString("status");
            String destinationKeyName = keyName+"_"+status;
            LambdaInvokerFromCode obj = new LambdaInvokerFromCode();
            obj.runWithPayload(DBUtils.FILE_RENAME_HANDLER_NAME,body);
        }
}

关于java - 当两个 AWS Java Lambda 函数都在同一个账户、同一个区域时,如何从另一个 AWS Java Lambda 函数调用 aws java lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36483042/

相关文章:

amazon-web-services - 是否可以使用 CFT 将NotificationConfiguration 添加到现有的S3 存储桶?

java - 在测试和生产代码中获取一致的资源文件夹路径

java - 将文本和图片附加到图像

python - AWS Lambda 调用 url 花费的时间超过 Lambda 执行限制

amazon-web-services - Amazon VPC n^2 -4 IP 地址? CIDR block

aws-lambda - AWS lambda 和数据库

amazon-dynamodb - 任务在 3.00 秒后超时 - 使用 NodeJS 的 Lambda 应用程序

java - 使用 javafx 获取要播放的 mp3 文件

java - 关闭应用程序而不是转到上一个 Activity

amazon-web-services - ELB 监听器协议(protocol)和证书正在重置