Search code examples
amazon-web-serviceswindows-10aws-cligit-bashxargs

Combining AWS cli commands with xargs not working


I want to have a one liner for setting properties to AWS Cloudwatch loggroups. I came across the xargs command. But I do not understand what am I doing wrong:

aws logs describe-log-groups \
--query "logGroups[*].logGroupName" \
--output text \ 
| xargs -I {} -n 1 \
 aws logs put-retention-policy \
--log-group-name {} \
--retention-in-days 14

As far as I understood {} takes the first command's output as list and pipes each element to the second command via xargs.

However, I result in this:

An error occurred (InvalidParameterException) when calling the PutRetentionPolicy operation: Member must have length less than or equal to 512

I am assuming that it passed the list to xargs, not just one element of the first command's output.


I am using Windows 10 with git bash


Solution

  • aws logs describe-log-groups | \
     jq ".logGroups[].logGroupName" \
     |xargs -I {} -n 1  aws logs put-retention-policy \
      --log-group-name {} --retention-in-days 14
    
    aws logs describe-log-groups \
    --query "logGroups[].logGroupName" \
    --output text \
    | xargs -I {} -n 1 \
     aws logs put-retention-policy \
    --log-group-name {} \
    --retention-in-days 14
    

    OS : Mac OSX