Ответ 1
Спасибо Майклу выше. Проблема заключалась в том, что он работал внутри VPC. Если я изменю его на No VPC, он будет работать правильно. Ваше решение может отличаться, если вы требуете его для запуска в VPC.
Я пытаюсь просто перечислить все файлы в ведро S3, используя Lambda
Код выглядит следующим образом:
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
exports.handler = (event, context, callback) => {
s3.listObjectsV2({
Bucket: "bucketname",
}, function(err, data) {
console.log("DONE : " + err + " : " + data);
callback(null, 'Hello from Lambda');
});
};
Используя вышеизложенное, я никогда не получаю "DONE" вообще. В журнале не отображается какая-либо информация, кроме того, что она была отключена.
Есть ли какие-либо проблемы, которые я могу сделать здесь? Я бы подумал, что по крайней мере ошибка будет показана в разделе "DONE".
Спасибо Майклу выше. Проблема заключалась в том, что он работал внутри VPC. Если я изменю его на No VPC, он будет работать правильно. Ваше решение может отличаться, если вы требуете его для запуска в VPC.
Если вы используете свой код внутри VPC, убедитесь, что подсеть VPC и его таблица таблицы маршрутизации должны быть правильными (маршрутизация: Dest = 0.0.0.0/0 и target = igw-xxxx). Также должна быть добавлена маршрутизация конечной точки VPC для связи с s3 через конечную точку.
В моем случае я выбрал 2 разные подсети, одна из которых является частной, а другая общедоступной. Так что иногда работало, а иногда нет. Я изменил обе подсети на частные (с NAT-шлюзом в маршруте), и теперь это работает без ошибки тайм-аута.
В следующем руководстве рассматриваются все возможные источники этой проблемы и способы их решения:
https://aws.amazon.com/premiumsupport/knowledge-center/connect-s3-vpc-endpoint/
Если вы выполняете свой код внутри VPC, обязательно создайте конечную точку VPC.
Вот учебник: https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/