Este comando devuelve todas las regiones de AWS separadas por espacios en blanco:

aws ec2 describe-regions --query 'Regions[*].RegionName' --output text

eu-north-1  ap-south-1  eu-west-3   eu-west-2   eu-west-1   ap-northeast-2  ap-northeast-1  sa-east-1   ca-central-1    ap-southeast-1  ap-southeast-2  eu-central-1    us-east-1   us-east-2   us-west-1   us-west-2

Estoy tratando de canalizar esto a xargs pero lo veo como una sola cadena:

aws ec2 describe-regions --query 'Regions[*].RegionName' --output text | gxargs -I {} aws cloudformation list-stacks --region {}

Invalid endpoint: https://cloudformation.eu-north-1 ap-south-1  eu-west-3   eu-west-2   eu-west-1   ap-northeast-2  ap-northeast-1  sa-east-1   ca-central-1    ap-southeast-1  ap-southeast-2  eu-central-1    us-east-1   us-east-2   us-west-1   us-west-2.amazonaws.com
gxargs: aws: exited with status 255; aborting

Gxargs es solo gnu xargs (estoy en Mac).

Además, probé esto para usar jmespath para crear una cadena a partir de una matriz con un delimitador específico (que podría usar con xargs):

aws ec2 describe-regions --query 'Regions[*].join(",",@.RegionName)'
In function join(), invalid type for value: None, expected one of: ['string'], received: "null"

EDITAR: solo siguiendo, esto es con lo que terminé. Insiste en lanzar un error cuando no encuentra una pila, probablemente lo mismo para otros comandos de aws cli

aws ec2 describe-regions --query 'Regions[*].RegionName' --output text | gxargs -n 1 sh -c 'aws cloudformation describe-stacks --stack-name findme --region $0 || true'
0
red888 25 ago. 2020 a las 21:15

1 respuesta

La mejor respuesta

Aquí está man xargs para -I:

-I replace-str
Reemplace las apariciones de replace-str en los argumentos-iniciales con nombres leídos de la entrada estándar. Además, espacios en blanco sin comillas no finalice los elementos de entrada ; en su lugar, el separador es el carácter de nueva línea. Implica -x y -L 1.

Puedes usar xargs -n 1 aws cloudformation list-stacks --region en su lugar

2
that other guy 25 ago. 2020 a las 18:28