Правила перенаправления не работают в Amazon S3 - PullRequest
0 голосов
/ 13 февраля 2020

Я создал корзину в S3 для хранения изображений и затем Изменение размера изображений на лету с помощью Amazon S3, AWS Lambda и Amazon API Gateway | AWS Compute Blog , чтобы изменить их размер с помощью Lambda.

Пока это работает хорошо, но я не могу заставить работать правила перенаправления. По какой-то причине я продолжаю получать «Нет такого ключа», когда он должен перенаправить на REST API, чтобы изменить размер изображения.

Вот мой конфиг для правил перенаправления:

<RoutingRules>
    <RoutingRule>
        <Condition>
            <KeyPrefixEquals/>
            <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
        </Condition>
        <Redirect>
            <Protocol>https</Protocol>
            <HostName>8mxk2saka6.execute-api.sa-east-1.amazonaws.com</HostName>
            <ReplaceKeyPrefixWith>default/pp-create-thumbnails-for-user-assets?key=</ReplaceKeyPrefixWith>
            <HttpRedirectCode>307</HttpRedirectCode>
        </Redirect>
    </RoutingRule>
</RoutingRules>

Вот скриншот с ошибкой:

Screenshot with the error i get when trying to access thumbnail that should be redirected to the API endpoint which generates it when it does not exist

Добавление снимков экрана для конфигурации API в Lambda:

Dashboard at API configuration

И снимок экрана, на котором показано, что я вижу на панели управления Lambda:

enter image description here

Что я делаю не так?


Обновление

Как сказал Том в ответ ниже, очень важно заметить, что есть два способа получить доступ к корзине из браузера:

1. https://YOUR_BUCKET.s3-sa-east-1.amazonaws.com

, а другой -

2. http://YOUR_BUCKET.s3-website-sa-east-1.amazonaws.com

Вы будете НЕ быть в состоянии применить правила перенаправления к первому, только 2-й знает о них.

Итак, после выполнения конфигурации для изменения размера изображений, убедитесь, что вы используете 2-й URL (stati c веб-хостинг один) для перенаправления.

Надеюсь, что это поможет кому-то еще с этой проблемой.

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Единственное отличие, которое я вижу между вашей и моей рабочей версией, - это префикс default/ vs Prod/ к вашему триггеру API. Чтобы проверить это, go к шлюзу API, выберите свой API, а затем go к приборной панели. Там есть ссылка «вызовите ваш API на ...», а затем URL. Если в конце есть Prod, вы нашли проблему. чувствительно к регистру . Это стоило мне часа или двух ...

<RoutingRules>
  <RoutingRule>
    <Condition>
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <Protocol>https</Protocol>
      <HostName>***YOUR API DOMAIN***.amazonaws.com</HostName>
      <ReplaceKeyPrefixWith>Prod/***YOUR API TRIGGER***?key=</ReplaceKeyPrefixWith>
      <HttpRedirectCode>307</HttpRedirectCode>
    </Redirect>
  </RoutingRule>
</RoutingRules>

Я тоже некоторое время боролся за это.

Дважды проверьте имя вашего триггера API pp-create-thumbnails-for-user-assets, проверьте лямбда-логи и посмотрим, ударишь ли ты по нему вообще. Если вы нажмете на него, убедитесь, что вы правильно обрабатываете event.queryStringParameters.key в лямбда-функции. Если вы не используете лямбда-функцию, проверьте, настроили ли вы хостинг веб-сайтов stati c в соответствии с инструкциями, go на эту вкладку S3 и скопируйте конечную точку . Это должно быть что-то вроде

http: //YOUR_BUCKET.s3-website-sa-east-1.amazonaws.com.

Если вы не используете конечную точку, она не будет работать с правилом перенаправления.

Надеюсь, это поможет

1 голос
/ 13 февраля 2020

Похоже, ваш ReplaceKeyPrefix отличается. Где вы взяли по умолчанию / pp-create-thumbnails-for-user-assets?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...