我正在尝试通过AWS lambda中的代码从S3中的存储桶中检索文件。然后,相同的代码将检索并插入EC2上托管的mongoDB中的文件中的相应数据。
遇到问题:我无法从桶中读取对象。实例刚刚在日志控制台上超时。
对于VPC EndPoints,我允许完全访问作为策略,修改了路由表(删除了到Internet网关的路由)并更改了限制出站流量的安全组(类型列表HTTPS和HTTP和目标作为前缀列表ID对于端点服务)
至于IAM角色,我设置了以下策略:AmazonS3FullAccess,AdministratorAccess和AWSLambdaExecute。
此外,我已添加以下内联策略以限制通过特定vpc端点的访问
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "s3:*",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::my_secure_bucket",
"arn:aws:s3:::my_secure_bucket/*"
],
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-1a2b3c4d"
}
}
}
]
}
S3和EC2都位于US-WEST-2地区。 这是我处理S3的lambda代码的一部分:
AmazonS3Client s3Client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());
for (S3EventNotificationRecord record : s3event.getRecords()) {
String srcKey = record.getS3().getObject().getKey().replace('+', ' ');
srcKey = URLDecoder.decode(srcKey, "UTF-8");
String srcBucket = record.getS3().getBucket().getName();
context.getLogger().log("found id: " + srcBucket+" "+srcKey);
// retrieve s3 object
S3Object object = s3Client.getObject(new GetObjectRequest(srcBucket, srcKey));
//My function times out while performing the above line!
InputStream objectData = object.getObjectContent();
}