【问题标题】:Unable to CloudFront Create Invalidation [ AWS PHP SDK 3.X ]无法 CloudFront 创建失效 [AWS PHP SDK 3.X]
【发布时间】:2018-05-24 20:17:52
【问题描述】:

无法理解我在使用 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>

【问题讨论】:

    标签: php amazon-web-services aws-sdk amazon-cloudfront cdn


    【解决方案1】:

    错误消息表明可能还有其他问题,但您的$item 需要路径,而不是 URL。

    /resourcepath* 应该在这里。指定路径的所有缓存对象都将失效,无论方案、方法、标头或 cookie 也可能是缓存键的一部分。

    documentation 似乎模棱两可,但如果您的发行版配置为缓存查询字符串,则需要最后的* 来捕获查询字符串。 (* 匹配 0 个或多个字符)。没有记录在案的示例实际上在您提交的路径中包含查询字符串。

    【讨论】:

      【解决方案2】:

      我在更新已发布帖子时处理清理缓存的 Wordpress 插件遇到了同样的问题。

      当调用 createInvalidation($data) 时($data 结构与 post question 中的相同)我得到了那个错误

      AWS HTTP 错误:客户端错误:POST https://cloudfront.amazonaws.com/2017-10-30/distribution/E3QES3NJL8EBYN/invalidation 导致400 Bad Request

      (只能在日志错误文件中检索,而页面输出是通用的

      “拒绝访问”...)

      阅读 CloudFront 文档后,我发现 createInvalidation 方法有其异步版本,即: createInvalidationAsync($data)

      您确实可以为每个 CloudFront 方法执行此操作,因为它是在 https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-cloudfront-2016-01-28.html 中编写的(将 Async 字附加到操作名称)

      有了这个,一切正常,没有错误被检索到,因为系统返回“好的,我稍后会做”响应,所有发布帖子的过程都可以成功进行。

      我知道这是一种解决方法,因为这并不能消除问题的根本原因,但它对我有用,我希望这可以帮助任何人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 2018-11-17
        • 2021-01-19
        • 1970-01-01
        • 1970-01-01
        • 2019-02-22
        • 2019-11-23
        相关资源
        最近更新 更多