如何检查我的用户数据传递到 EC2 实例是否正常工作

问题描述 投票:0回答:8

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

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

amazon-web-services amazon-ec2 user-data
8个回答
266
投票

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

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

您可以看到用户数据脚本的所有日志,它还会创建

/etc/cloud
文件夹。


92
投票

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

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

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

这应该打开一个包含系统日志的模式窗口


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

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"

4
投票

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

最近的 Ubuntu AMI 仍然将用户数据脚本发送到控制台 输出,因此您可以远程查看它,但它不再可用 实例上的系统日志。控制台输出仅更新了一些 实例启动、重新启动或终止后几分钟,这会强制 您要等待查看用户数据脚本的输出,而不是 捕获快照后可能出现的输出。

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


2
投票

启用用户数据记录

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


0
投票

将其放入用户数据中

touch /tmp/file2.txt

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


0
投票

让您的用户数据在 ec2 的 /tmp 目录中创建一个文件以查看其是否有效:

鲍勃.txt:

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

然后启动:

ec2-run-instances -f bob.txt -t t1.micro -g ServerPolicy ami-05cf5c6d -v

0
投票

在 Amazon Linux 3 (2023) 上,EC2 用户数据执行日志位于

/var/log/cloud-init-output.log

运行:

/var/log/cloud-init-output.log

© www.soinside.com 2019 - 2024. All rights reserved.