bash - 用于从标签设置 amazon ec2 主机名的 shell 脚本

标签 bash amazon-ec2 ec2-ami ec2-api-tools

我正在尝试从标签“Name”设置 amazon EC2 主机名

发现the answer从实例数据中提取标签。

ec2-describe-tags \
  --filter "resource-type=instance" \
  --filter "resource-id=$(ec2-metadata -i | cut -d ' ' -f2)" \
  --filter "key=Name" | cut -f5

结果是:

+------------+--------------+------+--------+
| resourceId | resourceType | key  | value  |
+------------+--------------+------+--------+
| i-1xxxxxxx | instance     | Name | dev200 |
+------------+--------------+------+--------+

我可以看到我已经快到了,但是如何从上面的结果中获取值(dev200)?然后我可以使用它:

echo $HOSTNAME > /etc/hostname

附:我的实例上有 BASH,但我完全迷失在 bash document 中。有人能指出我正确的段落吗?

最佳答案

经过一些错误和尝试,脚本开始工作:

#!/bin/bash
hostname=`ec2-describe-tags --filter "resource-type=instance" \
  --filter "resource-id=$(ec2-metadata -i | cut -d ' ' -f2)" \
  --filter "key=Name" | grep Name`

IFS="|" read -ra NAME <<< "$hostname"
hostname=${NAME[4]}
echo $hostname

使用 IFS 将字符串解析为数组,幸运的是我知道第四个元素始终是主机名。

编辑(2012 年 12 月 20 日):在本文发布后的短时间内,一些相关的 ec2 命令行工具已被修改,并且标志已更改或已弃用(例如,上面的 -i 标志不再出现)适用于当前版本的 ec2metadata)。记住这一点,这是我用来获取当前计算机的“名称”标签的命令行脚本(无法与脚本的其余部分对话):

ec2-describe-tags --filter "resource-type=instance" --filter "resource-id=$(ec2metadata --instance-id)" | awk '{print $5}'

在 Debian/Ubuntu 上,您需要 apt-get install cloud-utils ec2-api-tools 才能使这些工具正常工作(后者仅适用于 Ubuntu Multiverse)。

关于bash - 用于从标签设置 amazon ec2 主机名的 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12268986/

相关文章:

linux - 直bash空参数无法识别

linux - 备份 bash 脚本的第一个参数

mysql - 由于 MySQL 内存限制而关闭 Amazon EC2 上的 Rails 应用程序?

amazon-ec2 - 在Windows上通过Putty登录Amazon AWS EC2 SSH

amazon-web-services - 为通过 UserData 创建 AMI 准备 Windows 2016 EC2 实例

bash - 使用 AWK 将文本文件中的每个单词换行

bash - 在 Bash 中使用通配符匹配作为命令行参数

r - 如何在 Spot 实例处于事件状态时立即执行脚本?

amazon-web-services - 我可以手动将 EC2 实例添加到已运行的 cloudformation 堆栈中吗?

amazon-ec2 - 我可以从使用实例存储作为根设备的正在运行的实例创建 AMI 吗?