从 aws 命令行工具按名称搜索 ec2 实例

Shi*_*dim 45 amazon-ec2 amazon-web-services aws-cli

我有一个名为dev-server-03. 现在如何dev-server-*从命令行搜索所有实例?

我正在使用 aws cli 工具。

Eri*_*ond 75

假设您使用的惯例是将实例的名称放在带有“名称”键的标签中(这是 AWS 控制台在您输入名称时所做的操作),那么您可以使用该--filters选项列出这些实例aws-cli:

aws ec2 describe-instances --filters 'Name=tag:Name,Values=dev-server-*'
Run Code Online (Sandbox Code Playgroud)

如果您只想要这些实例的实例 ID,则可以使用:

aws ec2 describe-instances --filters 'Name=tag:Name,Values=dev-server-*' \
  --output text --query 'Reservations[*].Instances[*].InstanceId'
Run Code Online (Sandbox Code Playgroud)

注意:--query可能需要最新版本的 aws-cli,但值得一试。

  • FWIW,`jq` 工具可用于获得与 `aws --query` 类似的结果,如下所示: `aws ec2 describe-instances | jq '.Reservations[].Instances[].PrivateIpAddress'` --注意前面的`.`点。 (5认同)
  • 天哪,我花了将近半个小时才弄清楚这个……这有多奇怪:`Name=tag:Name` (2认同)
  • 谢谢 Eric - 我使用您的查询在同一行上获取多个实例 ID,但 https://github.com/aws/aws-cli/issues/914#issuecomment-56210312 建议 `--query 'Reservations[]。 Instances[].[InstanceId]` 对我有用 (2认同)
  • 还值得添加过滤器“Name=instance-state-name,Values=running”,因为终止的实例会在结果中显示一段时间。 (2认同)

小智 10

您可以使用下面的名称、实例 ID 和私有 ip 进一步过滤,

aws ec2 describe-instances --filters "Name=tag:Name,Values=*myinstance*" --output json --query 'Reservations[*].Instances[*].[PrivateIpAddress,InstanceId,Tags[?Key==`Name`].Value]' --region us-east-1
Run Code Online (Sandbox Code Playgroud)