2016-07-01 76 views
5

我試圖調用運行情況,並通過所產生的實例ID作爲輸入如下創建標籤作爲一個班輪:有沒有辦法將一個AWS CLI命令的輸出作爲輸入流向另一個?

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 

是這樣的可能或者不得不求助於使用變量(或其他方式我沒有考慮)?

其他背景

的問這個問題的動機是,這樣的事情是可能的AWS工具適用於Windows PowerShell;我希望能用AWS CLI完成同樣的事情。

等效PowerShell的例子:

New-EC2Instance -ImageId ami-1234 | 
    ForEach-Object Instances | 
    ForEach-Object InstanceId | 
    New-EC2Tag -Tag @{key='foo';value='bar'} 
+1

您需要編寫腳本來捕獲第一個命令的輸出並將其作爲參數提供給第二個命令。你正在使用的管道沒有辦法工作,它怎麼知道如何將文本輸入到管道中? –

+0

這就是我所懷疑的,我只是想確定。使用AWS PowerShell工具(命令聲明「來自管道的值」屬性),FWIW可以實現這種功能,但這更多的是PowerShell的功能,而不是AWS命令。 –

+0

@MarkB'create-tags'需要一個'resources'參數,它是實例Id(可以是一個列表,但在這種情況下它將是單個值)來標記哪個是剛剛啓動並從'run-instnace'命令的查詢結果。我錯過了什麼嗎? –

回答

9

它可以通過利用xargs的{}捕捉實例ID將其送入創建標籤的--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"' 

注意,與原來的問題的例子中,在括號包裹--query參數值的「實例ID」部分是很重要的,所以如果一個調用與--count大於一個運行實例,返回的多個實例ID將作爲單獨的行輸出,而不是製表符分隔。請參閱http://docs.aws.amazon.com/cli/latest/userguide/controlling-output.html#controlling-output-format

+0

真誠感謝殼課程;恐怕我在這個上顯示了我的Linux無知。只要我每次輪換一個實例(這符合我的問題的公平性),這很有效。當--count大於1時(再次顯示我的Linux無知),我無法確定如何使其正常工作。如果您有時間/傾向,您是否可以更新答案來解釋多個實例? –

+2

FWIW,多個實例無法正常工作的原因與--query參數值有關:在我的示例中,它返回多個實例ID製表符分隔。使用--query參數值中的括號中的「InstanceId」來解決問題。我會更新答案。感謝您的幫助@Frédéric –

+0

謝謝拉斐爾 - 我根據您的建議更新了答案,因爲我看到它被拒絕了,但認爲它是完全合理的 –

相關問題