AWS CLI CloudFront 使所有文件无效

AWS CLI CloudFront Invalidate All Files

我正试图使整个静态网站失效。以下命令似乎没有使 /index.html 无效,并给出了要无效的项目的奇数输出,如下所示。这种 AWS CLI 行为是正常的还是我遗漏了什么?谢谢!

aws cloudfront create-invalidation --distribution-id $DISTRIBUTION_ID --paths /*

输出:

{
    "Invalidation": {
    "Status": "InProgress", 
    "InvalidationBatch": {
        "Paths": {
            "Items": [
                "/lib32", 
                "/home", 
                "/vmlinuz", 
                "/core", 
                "/proc", 
                "/var", 
                "/dev", 
                "/usr", 
                "/etc", 
                "/initrd.img", 
                "/cdrom", 
                "/lost+found", 
                "/root", 
                "/tmp", 
                "/lib", 
                "/dead.letter", 
                "/lib64", 
                "/boot", 
                "/sys", 
                "/run", 
                "/bin", 
                "/sbin", 
                "/mnt", 
                "/opt", 
                "/snap", 
                "/media", 
                "/copyright", 
                "/srv"
            ], 
            "Quantity": 28
        }, 

那是你 shell 在做 expansion of local filenames

这就是您真正要求的,因为 * 未被引用。

--paths '*' 指定 --paths '/*'¹ 将按照您的意图进行。引用通配符会将其保留为文字字符串,而不是您所看到的内容。


¹CloudFront 控制台允许您指定 */* 以使整个分配无效;相比之下,CLI 期望 /*。反过来,这是因为基础 API 也期望 /*。当您在控制台中使用 * 时,在控制台向 CloudFront API.

发出请求之前,控制台会自动添加前导斜杠

通过 aws cli 使云端分发失效的示例:

aws cloudfront create-invalidation --distribution-id <DistributionID> --paths "/*"

示例:

aws cloudfront create-invalidation --distribution-id E1B1A4GHK9TTE --paths "/*"

要列出或获取云端分发 ID,您可以使用控制台或通过 cli:

aws cloudfront list-distributions 
aws cloudfront list-distributions | grep Id

也许在 windows 上(使用 cmd)你可以使用不带引号的 path,但在 bash 环境中(linux,mac) 字符 * 这是一个特殊的字符。 您需要在引号内传递 path 才能跨平台工作:

aws cloudfront create-invalidation --distribution-id $DISTRIBUTION_ID --paths '/*'