Попытка поместить карту сайта XML в корзину AWS S3 через NodeJS Lambda

Я настроил корзину AWS S3 для хранения файлов XML карты сайта. Они будут периодически обновляться некоторыми функциями, находящимися в лямбдах AWS. У меня есть лямбда, отправляющая объект sitemap.xml (это не фактический файл, это карта сайта, которая создается после сканирования сайта, а затем форматируется как XML на лету) в мое ведро S3, однако ничего не происходит. Я не получаю ошибок ни в лямбда-журналах, ни в журналах S3. Моя лямбда, которая пытается сделать запрос к S3, имеет прикрепленную политику AmazonS3FullAccess.

В журналах S3 я вижу, что он запускается, и в журналах отображаются все 200, но я не вижу свои данные в корзине S3. Для устранения неполадок я даже ослабил политику сегмента S3, чтобы принимать все запросы. По-прежнему не повезло.

Одна странность заключается в том, что моя корзина S3 продолжает бесконечно генерировать журналы после запуска; спустя долгое время после того, как мой запрос был закрыт. Когда я открываю файлы журнала, некоторые из них показывают множество успешных запросов на размещение, а другие показывают 404 и все типы ошибок из запросов, которые я даже не делаю! Например, вчера вечером я пытался писать в ведро S3. Этим утром у меня было сгенерировано 300 файлов журналов, но в моем ведре S3 ничего не было. В файлах журнала было 200, 400, 404, в зависимости от типа запроса (REST.GET.BUCKET, BATCH.DELETE.OBJECT, REST.GET.NOTIFICATION, REST.GET.WEBSITE, REST.PUT.BUCKETPOLICY и т. д.) Я делаю только запрос PUT, поэтому понятия не имею, почему в журналах отображаются все эти запросы.

Вот мой код:

[bunch of imports and AWS config stuff]

exports.handler = async(event) => {
  let urlArray;
  let metadataArray;
  let sitemapObject;
  const parsedData = JSON.parse(event.Records[0].Sns.Message);

  try {
    // separating two different arrays of objects from an outer array    
    metadataArray = parsedData[0];
    urlArray = parsedData[1];

    const newlyMergedArray = await mergeSpecificDataFromBothArrays(urlArr, vidArr);

    sitemapObject = await generateSitemap(newlyMergedArray);
  } catch (error) {
    throw error;
  }

    const dispatchToS3 = () => {

    const params = {
      Body: sitemapObject,
      Bucket: 'sitemap-service-s3',
      Key: 'my_website.com/sitemap.xml'
    };

    s3.putObject(params, (error, data) => {
      if (error) {
        console.info(this.httpResponse.body.toString());
        console.info(this.httpResponse.headers);
        console.info(error.stack);
        throw error;
      } else {
        console.info(data);
      }
    });
  };

try {
    await dispatchToS3();
  } catch (error) {
    throw error;
  }
}

sitemapObject - это объект, который был преобразован в XML прямо перед отправкой его на S3. Может ли S3 принимать XML? Если да, следует ли мне применить к нему JSON.stringify до выполнения putObject? Хотя я пробовал отправлять sitemapObject как строковые и не строковые данные. В любом случае putObject ничего не делает. Должен ли я отправлять эти данные как фактический объект JSON вместо формата XML?

<urlset xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:video = "http://www.google.com/schemas/sitemap-video/1.1">
<url>
<loc>https://www.mywebsite.com/path/to/video_url</loc>
<video:video>
<video:title>Video Title/video:title>
<video:description/>
<video:thumbnail_loc>http://mywebsite.com/path/to/thumbnail</video:thumbnail_loc>
<video:player_loc>https://third_party_video_hosting_site.com/path/to/player</video:player_loc>
<video:duration>2:06</video:duration>
</video:video>
</url>
<url>
<loc>https://www.mywebsite.com/path/to/video_url</loc>
<video:video>
<video:title>Video Title/video:title>
<video:description/>
<video:thumbnail_loc>http://mywebsite.com/path/to/thumbnail</video:thumbnail_loc>
<video:player_loc>https://third_party_video_hosting_site.com/path/to/player</video:player_loc>
<video:duration>2:06</video:duration>
</video:video>
</url>
</urlset>

Вот моя политика корзины S3:

{
    "Version": "2012-10-17",
    "Id": "Policy12345678910",
    "Statement": [
        {
            "Sid": "Stmt12345678910",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*" // this wildcard is for troubleshooting only. I would make this more specific/secure once I'm no longer troubleshooting.
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::sitemap-service-s3/my_website.com"
        }
    ]
}

Вы добавили разрешения S3 для функции Lambda?

Stephen 26.10.2018 00:20

покажите пожалуйста свой полный код, кто разрешает dispatchToS3? Откуда взялась переменная sitemapObject?

ene_salinas 26.10.2018 02:04

@ene_salinas Спасибо, я добавил эти детали.

Aluma 26.10.2018 16:27

@Stephen, к моей лямбде прикреплена политика AmazonS3FullAccess.

Aluma 26.10.2018 16:28

Вы выбрали vpc для своей лямбда-функции?

Frank Adrian 31.01.2019 22:54
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
812
0

Другие вопросы по теме