Amazon’s Glacier service is great, but low-cost storage has other costs. For example, you might have a vault but not know what archives it contains. You can retrieve the vault inventory–essentially listing the contents of a directory–but like any Glacier retrieval, it may take several hours.
Using Downloading Vault Inventory using the REST API, I put this together:
C:\>aws glacier initiate-job --account-id - --vault-name my_poorly_named_vault --job-parameters '{"Type": "inventory-retrieval"}'
Which returned:
Unknown options: inventory-retrieval}'
I had taken the command directly from AWS’s example:
http://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-job.html.
(Keep in mind that I had already followed the steps at Installing the Amazon Web Services Command Line Interface and Configuring the Amazon Web Services Command Line Interface.)
According to the documentation for the job-parameters
option (http://docs.aws.amazon.com/sdkforruby/api/Aws/Glacier/Types/JobParameters.html#type-instance_method),
valid values are “archive-retrieval” and “inventory-retrieval”.
But the error message says inventory-retrieval}’. Why is it picking up the trailing curly brace and the apostrophe?
I formatted the job-parameters JSON in a file named aws-json.txt, with the curly braces on separate lines:
{ "Type": "inventory-retrieval" }
I tried this variation on the initiate-job
command:
C:\>aws glacier initiate-job --account-id - --vault-name my_poorly_named_vault --job-parameters file://aws-json.txt
That worked!
The results returned:
{ "jobId": "y8ugyoNzzusaf6Lv72G3hsjAA6O7nw5bJQ2u6J9TDnJ82_qx-lxnqrhSxIcGvOU1iiXoUhZboiojxsDu8gLQOfiJ7hR2", "location": "/123456789011/vaults/my_poorly_named_vault/jobs/y8ugyoNzzusaf6Lv72G3hsjAA6O7nw5bJQ2u6J9TDnJ82_qx-lxnqrhSxIcGvOU1iiXoUhZboiojxsDu8gLQOfiJ7hR2" }
Chris…thanks for posting this, I was banging my head against the wall with the same issue and your post saved the day.
This information was very useful. Thanks again!
Many thanks, saved me loads of time with this workaround!
Yes, this was driving me crazy also. After some mucking around with the syntax I found the issue. This is a Windows CMD/PowerShell issue as the syntax works fine in Linux. Windows is striping the quotes off. If you don’t want to make a file for this simply use two quotes:
--job-parameters '{ ""Type"": ""inventory-retrieval"" }'
Thank you!
Hi chris,
i’m unable to retrieve files through command prompt API
C:\Users\10643888>aws glacier initiate-job –account-id 768518232256 –vault-name thiruneeru –job-parameters file:///D:/ss.txt
Error parsing parameter ‘–job-parameters’: Unable to load paramfile file:///D:/ss.txt: [Errno 22] Invalid argument: ‘/D:/ss.txt’
for some reason I was not able to get this to work from a file:
I took Stan’s option and added a double quote and that worked (using aws.exe from PowerShell):
Well here we are in July 2019 and the AWS KB example still doesn’t work. Thanks for the work around. this is truly a gift that keeps on giving.
This string completely worked from a windows cmd line:
aws glacier initiate-job –vault-name xxxxxxxxx_0011321AA3E5_3_mapping –account-id 999999999 –job-parameter={\”Type\”:\”inventory-retrieval\”}
This page was the best help: https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html
And these info from the page:
– Optionally, you can optionally separate the parameter name from the value with an equals sign (=) instead of a space. This is typically necessary only if the value of the parameter starts with a hyphen.
– The Windows command prompt requires double quotation marks (” “) to enclose the JSON data structure. Also, to prevent the command processor from misinterpreting the double quotation marks embedded in the JSON, you must also escape (precede with a backslash [ \ ] character) each double quotation mark (“) within the JSON data structure itself, as in the following example.
And you may be able to replace the = and no quotes with double-quotes and no escape char (\) as per this line: Only the outermost double quotation marks are not escaped.
“{\”Type\”: \”inventory-retrieval\”}”
@Jiong Feng, using the double ” instead of the single ‘ made the difference – thank you!
Thanks – saved me quite a headache!
Even after such a long time, thank you!