【发布时间】:2015-10-12 12:11:00
【问题描述】:
我未能让以下逻辑在使用 Java 的 AWS Lambda 上工作:
1)当S3桶中有新对象创建时,触发lambda函数(java编写)
2) 在此 lambda 函数中,列出所有 DynamoDB 表。
3) 如果没有,则创建一个表。
4) 将 S3 对象的详细信息作为项目写入 DynamoDB。
我只让第 1 项工作。当它到达第 2 项时,我在下面遇到与权限相关的错误。
有什么帮助或建议吗?
我使用的权限是“Basic with DynamoDB”,具有以下权限:
START 请求 ID:e9ab5aba-307b-11e5-9663-3188c327cf5e 文件大小:1024,日期时间:1970-01-01T00:00:00.000Zs3Key:HappyFace.jpgAWS 凭证配置文件在给定路径中找不到:/home/sbx_user1052/.aws/credentials:java.lang.IllegalArgumentException java.lang.IllegalArgumentException:在给定路径中找不到 AWS 凭证配置文件:/home/sbx_user1052/.aws/credentials 在 com.amazonaws.auth.profile.internal.ProfilesConfigFileLoader.loadProfiles(ProfilesConfigFileLoader.java:45) 在 com.amazonaws.auth.profile.ProfilesConfigFile.loadProfiles(ProfilesConfigFile.java:176) 在 com.amazonaws.auth.profile.ProfilesConfigFile.(ProfilesConfigFile.java:112) 在 com.amazonaws.auth.profile.ProfilesConfigFile.(ProfilesConfigFile.java:92) 在 com.amazonaws.auth.profile.ProfileCredentialsProvider.getCredentials(ProfileCredentialsProvider.java:123) 在 com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:1763) 在 com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.listTables(AmazonDynamoDBClient.java:1208) 在 com.amazonaws.services.dynamodbv2.document.internal.ListTablesCollection.firstPage(ListTablesCollection.java:46) 在 com.amazonaws.services.dynamodbv2.document.internal.PageIterator.next(PageIterator.java:45) 在 com.amazonaws.services.dynamodbv2.document.internal.IteratorSupport.nextResource(IteratorSupport.java:79) 在 com.amazonaws.services.dynamodbv2.document.internal.IteratorSupport.hasNext(IteratorSupport.java:47) 在 com.TriggerDynamoDB.handleRequest(TriggerDynamoDB.java:68) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497)
END 请求 ID:e9ab5aba-307b-11e5-9663-3188c327cf5e 报告请求 ID:e9ab5aba-307b-11e5-9663-3188c327cf5e 持续时间:3294.97 毫秒计费持续时间:3300 毫秒内存大小:512 MB 使用的最大内存:51 MB
代码如下:
public class TriggerDynamoDB implements RequestHandler<S3Event, String> {
public String handleRequest(S3Event s3event, Context context) {
LambdaLogger logger = context.getLogger();
try {
S3EventNotificationRecord record = s3event.getRecords().get(0);
// Object key may have spaces or unicode non-ASCII characters.
String srcKey = record.getS3().getObject().getKey().replace('+', ' ');
srcKey = URLDecoder.decode(srcKey, "UTF-8");
long fileSize = record.getS3().getObject().getSizeAsLong();
DateTime datetime = record.getEventTime();
logger.log("fileSize: " + fileSize + ", DateTime:" + datetime);
logger.log("s3Key : " + srcKey);
DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient(new ProfileCredentialsProvider()));
//Table table = dynamoDB.getTable("dimensionFile");
TableCollection<ListTablesResult> tables = dynamoDB.listTables();
Iterator<Table> iterator = tables.iterator();
while (iterator.hasNext()) { // this is where the error was thrown
Table table = iterator.next();
System.out.println(table.getTableName());
}
return "Ok";
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
【问题讨论】:
标签: java amazon-web-services amazon-s3 aws-lambda