有没有办法将一个AWS CLI命令的输出作为输入传递给另一个?

Raf*_*man 10 amazon-web-services aws-cli

我正在尝试调用run-instances并将生成的实例ID作为create-tags的输入传递为单行,如下所示:

aws ec2 run-instances \
    --image-id ami-1234 \
    --output text \
    --query Instances[*].InstanceId | \
aws ec2 create-tags \
    --tags 'Key="foo",Value="bar"'
Run Code Online (Sandbox Code Playgroud)

尝试这个时,我得到以下内容:

usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help
aws: error: argument --resources is required
Run Code Online (Sandbox Code Playgroud)

这样的事情是可能的,还是一个人不得不求助于使用变量(或其他一些我没想过的方式)?

附加背景

提出这个问题的动机是使用适用于Windows PowerShell的AWS工具可以实现这样的功能; 我希望用AWS CLI完成同样的事情.

等效的PowerShell示例:

New-EC2Instance -ImageId ami-1234 |
    ForEach-Object Instances |
    ForEach-Object InstanceId |
    New-EC2Tag -Tag @{key='foo';value='bar'}
Run Code Online (Sandbox Code Playgroud)

Fré*_*nri 19

可以通过利用xargs {}捕获实例ID以将其提供给create-tags的--resources参数来完成.

aws ec2 run-instances \
    --image-id ami-1234 \
    --output text \
    --query Instances[*].[InstanceId] | \
xargs -I {} aws ec2 create-tags \
    --resources {} \
    --tags 'Key="foo",Value="bar"'
Run Code Online (Sandbox Code Playgroud)

请注意,与原始问题中的示例不同,将--query参数值的"InstanceId"部分包含在括号中非常重要,这样,如果调用大于1的--count的运行实例,则会获得多个实例ID return将作为单独的行输出,而不是以制表符分隔.见http://docs.aws.amazon.com/cli/latest/userguide/controlling-output.html#controlling-output-format

  • FWIW,多个实例不工作的原因与--query参数值有关:在我的示例中,它返回以制表符分隔的多个实例ID.在--query参数值中括起括号中的"InstanceId"可以解决问题.我会更新答案.谢谢你的帮助@Frédéric (4认同)