[英]AWS EC2 stop all through PowerShell/CMD tools
我在AWS中使用了許多“一次性”服務器,我們正在努力降低這些服務器的成本。
最初,我們正在尋找一個相當基本的“awsec2 stop all”命令,該命令將從我們知道將全天候運行的服務器按計划運行。
在檢查AWS記錄的內容后,我們似乎需要引入所有當前運行的實例,獲取這些實例的ID,然后將它們傳遞到命令中,而不是簡單地聲明我希望所有實例都關閉。
是否有更好的方法來收集這些ID,例如只是能夠發出“全部停止”?
感謝幫助。
AWS CLI使用--query選項提供內置JSON解析。 此外,您可以使用--filter選項僅對正在運行的實例執行stop命令。
aws ec2 describe-instances \
--filter Name=instance-state-name,Values=running \
--query 'Reservations[].Instances[].InstanceId' \
--output text | xargs aws ec2 stop-instances --instance-ids
這是未經測試的,但應該使用適用於Powershell的AWS工具進行操作 :
@(Get-EC2Instance) | % {$_.RunningInstance} | % {Stop-EC2Instance $_.InstanceId}
在簡單的英語中,上面的行獲取EC2實例對象的集合(Amazon.EC2.Model.Reservation),為每個對象(與實例相關的各種屬性的集合)獲取RunningInstance屬性,並使用它來獲取每個實例的InstanceId並停止實例。
這些函數映射如下:
一定要檢查出的幫助Stop-EC2Instance
...有一些有用的參數,如-Terminate
和-Force
您可能會感興趣。
這個單行將停止所有的實例:
for i in $(aws ec2 describe-instances | jq '.Reservations[].Instances[].InstanceId'); do aws ec2 stop-instances --instance-ids $i; done
提供:
AWS-CLI
( http://aws.amazon.com/cli/ ) jq
json解析器。 ( http://stedolan.github.io/jq/ ) ..是的,上面的語法是針對Linux Bash shell特有的。 你可以在windows上模仿powershell,並找出解析json的powersehll方法。
如果有人想做Peter Moon通過AWS DataPipeline描述的內容:
aws ec2 describe-instances --region eu-west-1 --filter Name=instance-state-name,Values=running --query 'Reservations[].Instances[].InstanceId' --output text | xargs aws ec2 stop-instances --region eu-west-1 --instance-ids
它基本上是相同的命令,但你必須在describe-instances
之后和stop-instances
之后添加--region
以使其工作。 注意通常包含在區域名稱中的a / b / c。 如果包含在這里,這似乎會導致錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.