веб-сервисы Amazon — не удалось CloudFront создать недействительную версию [AWS PHP SDK 3.X]

Невозможно понять, какую ошибку я совершаю при аннулировании ресурса фронта облака с помощью AWS PHP SDK версии 3,

Мой код

 public function cfCreateInvalidation()
{
$item = "http://mycdn.domain.com/resourcepath?queryString" ;
try {
$data = [
'DistributionId' => 'ActualValueHereID',
'InvalidationBatch' => [
'CallerReference' => '16 Char Random String',
'Paths' => [
'Items' => [$item],
'Quantity' => 1,
],
]
];

$result = $this->cloudFrontConnection->createInvalidation($data);

}catch (\Exception $exception) {
echo json_encode($exception->getMessage());
}
}

Каждый раз, когда я получаю:

Error executing "CreateInvalidation" on "https://cloudfront.amazonaws.com/2017-03-25/distribution/AAABBBBCCCCD/invalidation";
AWS HTTP error: Client error: `POST https://cloudfront.amazonaws.com/2017-03-25/distribution/AAABBBBCCCCD/invalidation` resulted in a `400 Bad Request` response:
<?xml version="1.0"?>
<ErrorResponse xmlns="http://cloudfront.amazonaws.com/doc/2017-03-25/"><Error><Type>Sender</Type>< (truncated...)
MalformedInput (client): Could not parse XML - <?xml version="1.0"?>
<ErrorResponse xmlns="http://cloudfront.amazonaws.com/doc/2017-03-25/"><Error><Type>Sender</Type><Code>MalformedInput</Code><Message>Could not parse XML</Message></Error><RequestId>ad9b467c-211e-11e8-ba32-45e52ff9e8b3</RequestId></ErrorResponse>

0

Решение

Сообщение об ошибке предполагает, что могут быть и другие проблемы, но ваш $item ожидает дорожка, а не URL.

/resourcepath* ожидается здесь. Все кэшированные объекты для указанного пути будут признаны недействительными, независимо от схемы, метода, заголовков или файлов cookie, которые также могут быть частью ключа кэша.

документация кажется неоднозначным, но предполагает, что * в конце необходимо перехватить строки запроса, если ваш дистрибутив настроен на кеширование на них. (The * соответствует 0 или более символам). Нет задокументированного примера фактического включения строки запроса в указанный вами путь.

0

Другие решения

Я столкнулся с той же проблемой с плагином WordPress, который обрабатывает очистку кеша при обновлении опубликованных постов.

При вызове createInvalidation ($ data) (структура $ data в пост-вопросе такая же) я получил эту ошибку

Ошибка AWS HTTP: ошибка клиента: POST
https://cloudfront.amazonaws.com/2017-10-30/distribution/E3QES3NJL8EBYN/invalidation

привело к 400 Bad Request

(это может быть получено только из файла журнала ошибок, в то время как вывод страницы был общим

«Доступ закрыт»…)

Читая документацию CloudFront, я обнаружил, что метод createInvalidation имеет свою асинхронную версию:
createInvalidationAsync ($ данные)

Вы можете сделать это для каждого метода CloudFront, как написано в https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2016-01-28.html (добавление асинхронного слова к имени операции)

При этом все работает должным образом, и ошибки не извлекаются, потому что система возвращает ответ «хорошо, я сделаю это позже», и весь процесс публикации публикации может быть успешно выполнен.

Я знаю, что это обходной путь, потому что это не устраняет причину проблемы, но работает для меня, и я надеюсь, что это может кому-нибудь помочь.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector