I'm trying to collect all the Instances in an AWS region (describe-instances) and then grep certain lines out of the specific AMI's (describe-images) for each instance found with the first command. I don't want to dump it to a file first.
for AMI in "aws ec2 describe-instances --region=us-west-2 |grep ImageId |grep -o -P 'ami.{0,18}'";
do "aws ec2 describe-images --image-ids $AMI |grep '"Name"\|ProductCodeId\|ProductCodeType'";done
What is wrong with my syntax? Thank you!
The Error:
ec2-user@ip-172-31-20-000:~> ./Get-Instance-Meta.sh
./Get-Instance-Meta.sh: line 4: syntax error near unexpected token aws'
./Get-Instance-Meta.sh: line 4:
aws ec2 describe-instances --region=us-west-2 |grep ImageId |grep -o -P 'ami.{0,18}';'
First command output expected:
ec2-user@ip-172-31-20-000:~> grep ImageId | aws ec2 describe-instances --region=us-west-2 |grep -o -P 'ami.{0,18}'
ami-02bf6f88fab67448b
ami-0d59109fccbbc4da2
ami-01a80cb1b7a431fb9
ami-0d86f04dd6dfc89df
Second command output expected:
ec2-user@ip-172-31-20-214:~> aws ec2 describe-images --image-ids ami-01a80cb1b7a431fb9 |grep '"Name"\|ProductCodeId\|ProductCodeType'
"ProductCodeId": "51luq5gebk3opt7gcvkdrrm89",
"ProductCodeType": "marketplace"
"Name": "OpenSUSE_Leap15.1TaskcatPython3_",
I'm basically looking across all instances for ProductCodeID or ProductCodeType of 'null'
Alternative to your first command using --query:
aws ec2 describe-instances \
--region=us-east-1 \
--query 'Reservations[*].Instances[*].ImageId' \
--output text
Then for the for
loop:
AMIs=$(aws ec2 describe-instances \
--region=us-east-1 \
--query 'Reservations[*].Instances[*].ImageId' \
--output text)
for AMI in ${AMIs};
do
echo ${AMI}
aws ec2 describe-images \
--image-ids ${AMI} \
--query 'Images[*].[Name, ProductCodeId, ProductCodeType]' \
--output text
done