84

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

我如何知道该用户数据是否执行?

4

7 回答 7

133

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

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

你可以看到你的用户数据脚本的所有日志,它也会创建/etc/cloud文件夹。

于 2015-09-08T14:47:32.153 回答
57

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

在新界面中:监控和故障排除 > 获取系统日志

在此处输入图像描述

在旧界面中: 实例设置 > 获取系统日志

在此处输入图像描述

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

在此处输入图像描述

于 2017-01-19T19:13:59.853 回答
9

在实例的引导过程中查看用户数据在执行时的样子可能对您也很有用。如果您从 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

2. 从实例外部

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

"#!/bin/bash\n",
"set -x\n",

从 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

如果 UserData 配置如下:

"#!/bin/bash\n",
"set -x\n",
"echo hello world"
于 2021-07-22T09:25:48.860 回答
3

在Amazon EC2上调试用户数据脚本确实有点尴尬,因为通常没有办法主动挂钩该过程,因此理想情况下希望获得对用户数据脚本输出的实时访问权限,正如 Eric Hammond 的文章Logging user中所总结的那样EC2 实例上的 -data 脚本输出

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

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

于 2013-04-09T14:35:31.470 回答
1

为您的用户数据启用日志记录

Eric Hammond 在“记录 EC2 实例上的用户数据脚本输出 (2010, Hammond) ”中建议:

exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1

注意> >在语句开头的两个字符之间放置一个空格。

这是一个完整的用户数据脚本作为示例:

#!/bin/bash -ex
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
echo BEGIN
date '+%Y-%m-%d %H:%M:%S'
echo END

于 2019-03-06T08:07:26.187 回答
0

Have your user data create a file in your ec2's /tmp directory to see if it works:

bob.txt:

#!/bin/sh
echo 'Woot!' > /home/ec2-user/user-script-output.txt

Then launch with:

ec2-run-instances -f bob.txt -t t1.micro -g ServerPolicy ami-05cf5c6d -v
于 2013-04-09T19:26:15.160 回答
0

把它放在用户数据中

touch /tmp/file2.txt

实例启动后,您可以检查文件是否已创建。基于此,您可以判断用户数据是否已执行。

于 2022-02-24T11:44:03.977 回答