Difference between revisions of "AWS CLI"
Michael.mast (talk | contribs) (Created page with "==Purpose== To manage AWS resources remotely with scripts. <br> <br> Initial use case is to create and manage snapshots of EC2 instances. I want to create new snapshots then d...") |
Michael.mast (talk | contribs) |
||
Line 25: | Line 25: | ||
"Code": 80, | "Code": 80, | ||
"Name": "stopped" | "Name": "stopped" | ||
+ | ... | ||
+ | "InstanceId": "i-xxxxxxxxxxad6183c", | ||
... | ... | ||
Line 34: | Line 36: | ||
], | ], | ||
</pre> | </pre> | ||
− | Since the information I need is nested, I will need to drill down.<ref>https://docs.aws.amazon.com/cli/latest/userguide/controlling-output.html#controlling-output-filter</ref> | + | Since the information I need is nested, I will need to drill down.<ref>https://docs.aws.amazon.com/cli/latest/userguide/controlling-output.html#controlling-output-filter</ref> Starting with Reservations, then Instances, I can then select the information I need. |
+ | <br> | ||
+ | NOTE: This is case sensitive | ||
+ | <br> | ||
+ | <pre> | ||
+ | [root@aws-cli ~]# aws ec2 describe-instances --query 'Reservations[].Instances[].{Instance_name:Tags[?Key==`Name`].Value,ID:InstanceId,State:State.Name}' | ||
+ | [ | ||
+ | { | ||
+ | "Instance_name": [ | ||
+ | "My-VM" | ||
+ | ], | ||
+ | "State": "stopped", | ||
+ | "ID": "i-xxxxxxxxxxad6183c" | ||
+ | }, | ||
+ | </pre> | ||
+ | To break this down: | ||
+ | *"Reservations[]" This will query ALL reservations. | ||
+ | *"Instances[]" This will query ALL instances | ||
+ | *"{}" This is creating an array, since we want multiple values found inside of Instances. | ||
+ | *"Instance_name" is an arbitrary name, you can put anything you want here without spaces. There might be a way to use spaces, but you shouldn't use them anyway. | ||
+ | *":Tags[?Key==`Name`].Value" I do not fully understand this as of yet.<ref>https://github.com/aws/aws-cli/issues/621</ref> However I needed it to parse the human readable name I gave the instance. | ||
+ | *"ID" is an arbitrary name. | ||
+ | *":InstanceId" will pull the instance ID. | ||
+ | *"State" is an arbitrary name. | ||
+ | *":State.Name" will pull the human readable state of the instance. In this case "Stopped". |
Revision as of 08:29, 2 May 2018
Purpose
To manage AWS resources remotely with scripts.
Initial use case is to create and manage snapshots of EC2 instances. I want to create new snapshots then delete old ones. This could be managed internally with AWS, but it looks like that would cost more and I don't mind learning something new.
Listing EC2 Instances
I need to list the instances and parse that list so I know what I am working with. Though not needed for creating snapshots, this was helpful in learning how aws-cli functions. I started with a serverfault post[1] and broke down the steps contained within. The example provided was
aws ec2 describe-instances --filters Name=vpc-id,Values=vpc-e2f17e8b --query 'Reservations[].Instances[].Tags[?Key==`Name`].Value[]'
But the query statement didn't make much sense to me. At this point I started to replicate this in my lab. The key here is that you want to look at the output of the standard describe-instances command
{ "Reservations": [ { "Instances": [ { "Monitoring": { "State": "disabled" }, "PublicDnsName": "ec2-xxx-xxx-xxx-xxx.us-east-2.compute.amazonaws.com", "StateReason": { "Message": "Client.UserInitiatedShutdown: User initiated shutdown", "Code": "Client.UserInitiatedShutdown" }, "State": { "Code": 80, "Name": "stopped" ... "InstanceId": "i-xxxxxxxxxxad6183c", ... "Tags": [ { "Value": "My-VM", "Key": "Name" } ],
Since the information I need is nested, I will need to drill down.[2] Starting with Reservations, then Instances, I can then select the information I need.
NOTE: This is case sensitive
[root@aws-cli ~]# aws ec2 describe-instances --query 'Reservations[].Instances[].{Instance_name:Tags[?Key==`Name`].Value,ID:InstanceId,State:State.Name}' [ { "Instance_name": [ "My-VM" ], "State": "stopped", "ID": "i-xxxxxxxxxxad6183c" },
To break this down:
- "Reservations[]" This will query ALL reservations.
- "Instances[]" This will query ALL instances
- "{}" This is creating an array, since we want multiple values found inside of Instances.
- "Instance_name" is an arbitrary name, you can put anything you want here without spaces. There might be a way to use spaces, but you shouldn't use them anyway.
- ":Tags[?Key==`Name`].Value" I do not fully understand this as of yet.[3] However I needed it to parse the human readable name I gave the instance.
- "ID" is an arbitrary name.
- ":InstanceId" will pull the instance ID.
- "State" is an arbitrary name.
- ":State.Name" will pull the human readable state of the instance. In this case "Stopped".