我试图通过AWS lambda中的代码从S3中的存储桶中检索文件 . 然后,相同的代码将检索并插入EC2上托管的mongoDB中的文件中的相应数据 .

遇到的问题:我无法从桶中读取对象 . 实例刚刚在日志控制台上超时 .

对于VPC EndPoints,Ive允许完全访问作为策略,修改了路由表(删除了到Internet网关的路由)并更改了限制出站流量的安全组(类型列表HTTPS和HTTP以及目标作为 endpoints 的前缀列表ID服务)

至于IAM角色,我设置了以下策略:AmazonS3FullAccess,AdministratorAccess和AWSLambdaExecute .

此外,我添加了以下内联策略来限制通过特定vpc endpoints 的访问

{
"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();
           }