我尝试调用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"'
尝试此操作时,我会收到以下信息:
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
这样的事情是可能的,还是必须诉诸于使用变量(或其他一些我没想过的方式)?
其他背景
提出这个问题的动机是使用适用于Windows PowerShell的AWS工具可以实现这样的功能;我希望用AWS CLI完成同样的事情。
等效的PowerShell示例:
New-EC2Instance -ImageId ami-1234 |
ForEach-Object Instances |
ForEach-Object InstanceId |
New-EC2Tag -Tag @{key='foo';value='bar'}
答案 0 :(得分:17)
可以通过利用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"'
请注意,与原始问题中的示例不同,将&#34; InstanceId&#34;包裹起来非常重要。括号中的--query参数值的一部分,这样如果一个调用大于一的--count的运行实例,则返回的多个实例ID将作为单独的行输出,而不是以制表符分隔。见http://docs.aws.amazon.com/cli/latest/userguide/controlling-output.html#controlling-output-format