AWS CLI CloudFront Invalidate All Files
I am attempting to invalidate an entire static website. The following command does not seem to invalidate /index.html
and gives an odd output of items to be invalided, as shown below. Is this AWS CLI behaviour normal or am I missing something? Thanks!
aws cloudfront create-invalidation --distribution-id $DISTRIBUTION_ID --paths /*
Output:
{
"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
},
Solution 1:
That's your shell doing expansion of local filenames.
That's what you're essentially asking for since the *
isn't quoted.
Either Specifying --paths '*'
or--paths '/*'
¹ will do what you intend. Quoting the wildcard keeps it as a literal string rather than what you're seeing.
¹The CloudFront console allows you to specify either *
or /*
to invalidate the entire distribution; by contrast, the CLI expects /*
. This, in turn, is because the underlying API also expects /*
. When you use *
in the console, the leading slash is silently added by the console before the console makes the request to the CloudFront API.
Solution 2:
Example of invalidation of cloudfront distribution via aws cli :
aws cloudfront create-invalidation --distribution-id <DistributionID> --paths "/*"
Example :
aws cloudfront create-invalidation --distribution-id E1B1A4GHK9TTE --paths "/*"
To list or get cloudfront distribution id you can use console or via cli :
aws cloudfront list-distributions
aws cloudfront list-distributions | grep Id
Solution 3:
Maybe on windows (using cmd) you can use the path without quotes, but on bash environment (linux, mac) the character *
it's a special char.
You need to pass the path inside quotes to work cross-platform:
aws cloudfront create-invalidation --distribution-id $DISTRIBUTION_ID --paths '/*'