如何检查我的用户数据是否传递给EC2实例?

Pra*_*vin 27 amazon-ec2 amazon-web-services user-data

在使用EC2命令行API创建新的AWS EC2实例时,我将一些用户数据传递给新实例.

现在我怎么知道用户数据是否被执行了?

我该如何检查?

小智 32

您可以使用以下步骤进行验证

  1. SSH启动EC2实例
  2. 检查用户数据脚本的日志
    • /var/log/cloud-init.log
    • /var/log/cloud-init-output.log

您可以查看用户数据脚本的所有日志,它还将创建/etc/cloud文件夹.

  • 好答案。我必须使用“sudo”来访问 cloud-init-output.log。 (6认同)
  • 这应该是正确的答案。这是最可靠的方法。 (4认同)
  • 我发现 `/var/log/cloud-init-output.log` 包含输出 (3认同)

Unb*_*ess 22

对于您来说,查看在实例引导期间执行用户数据时的情况也可能很有用。如果您从 CloudFormation 模板传递环境变量或标志,则尤其如此。您可以看到 UserData 是如何以两种不同的方式执行的:


1. 从实例内部:

# Get instance ID
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)

# Print user data 
sudo cat /var/lib/cloud/instances/$INSTANCE_ID/user-data.txt
Run Code Online (Sandbox Code Playgroud)

2. 从实例外部

注意:只有当您配置 UserData shell 使其输出所运行的命令时,这才有效。对于 bash,您可以按如下方式执行此操作:

"#!/bin/bash\n",
"set -x\n",
Run Code Online (Sandbox Code Playgroud)

从 EC2 控制台右键单击 EC2 实例 -> 监控和故障排除 -> 获取系统日志。下载日志文件并查找如下所示的部分:

ip-172-31-76-56 login: 2021/10/25 17:13:47Z: Amazon SSM Agent v3.0.529.0 is running
2021/10/25 17:13:47Z: OsProductName: Ubuntu
2021/10/25 17:13:47Z: OsVersion: 20.04
[   45.636562] cloud-init[856]: Cloud-init v. 21.2-3...
[   47.749983] cloud-init[896]: + echo hello world
Run Code Online (Sandbox Code Playgroud)

如果 UserData 配置如下,您将看到以下内容:

"#!/bin/bash\n",
"set -x\n",
"echo hello world"
Run Code Online (Sandbox Code Playgroud)


jet*_*com 15

仅供参考,您可以通过从EC2控制台查看系统日志来检查用户数据是否已执行.右键单击您的实例 - 实例设置 - 获取系统日志

在此输入图像描述

这应该打开一个带有系统日志的模态窗口

在此输入图像描述

  • @falsePockets,不,它有效。请注意,他写道您应该单击“获取系统日志”,而不是“查看/更改用户数据”(由于某些原因在屏幕截图中突出显示)。 (3认同)
  • 亚马逊必须再次改变它.我没有看到日志.我只看到剧本. (2认同)
  • 检查一下:“右键单击实例 > 监控和故障排除 > 获取系统日志” (2认同)

Ste*_*pel 4

在Amazon EC2上调试用户数据脚本确实有点尴尬,因为通常没有办法主动连接到该进程,因此理想情况下,人们希望实时访问用户数据脚本输出,如 Eric Hammond 的文章记录用户中所总结的那样EC2 实例上的 -data 脚本输出

最新的 Ubuntu AMI 仍然将用户数据脚本发送到控制台输出,因此您可以远程查看它,但它在实例的 syslog 中不再可用。控制台输出仅在实例启动、重新引导或终止后几分钟更新,这迫使您等待查看用户数据脚本的输出,并且不捕获快照后可能出现的输出。

根据您的设置,您可能希望立即将日志发送到像Loggly这样的远程日志记录工具,但是尽早安装它显然是一种先有鸡还是先有蛋的问题(尽管如果 AMI 碰巧配置为像这样的话,它会很好用)已经这样了)。