带有Java的AWS Lambda无法从S3获取文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有Java的AWS Lambda无法从S3获取文件相关的知识,希望对你有一定的参考价值。
我正在使用AWS Lambda创建一个非常简单的示例,我在使用Java运行时时遇到了问题。我必须从我的一个桶中读取一个S3对象并使用NodeJS示例,如下所示我没有问题
var S3FS = require('s3fs');
exports.handler = (req, res) => {
var s3Options = {
region: 'eu-west-3',
accessKeyId: 'key',
secretAccessKey: 'secret'
};
var fsImpl = new S3FS('mybucket', s3Options);
fsImpl.readFile("myfile",function (err,data) {
if (err) throw err;
console.log(data.toString());
});
}
如果我尝试类似的Java示例,我的函数总是超时(即使我增加到1分钟)
context.getLogger().log("Before");
BasicAWSCredentials awsCreds = new BasicAWSCredentials("key", "secret");
AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withRegion("eu-west-3")
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.build();
context.getLogger().log("client created");
S3Object object = s3.getObject(
new GetObjectRequest(bucketName, key));
context.getLogger().log("After");
创建S3客户端时,该功能始终会阻止。我知道我可以避免在Lambda中使用密钥和密钥,但也以这种方式使用功能块。这不是一个策略问题,因为我正在使用相同的Lambda配置测试这些示例,因此我认为它与Java AWS S3 API有关。有什么建议?
答案
Java lambda最终使用defaultClient()而不是AmazonS3ClientBuilder的standard()方法。
这两种方法之间的区别在于凭证,从env检索或作为参数传递。我可能没有看到错误的配置,但无论如何更明确的错误可能是有用的
以上是关于带有Java的AWS Lambda无法从S3获取文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 lambda 函数从 AWS s3 获取文本文件的内容?
使用带有 Node.js 的 AWS Lambda 函数从 S3 存储桶中提取 zip 文件并上传到另一个存储桶
AWS Lambda 返回权限被拒绝尝试从 S3 存储桶获取对象