使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何在每次重新启动 Amazon EC2 Linux 实例时使用用户数据自动运行脚本?

1 分钟阅读
0

我想在 Amazon Elastic Compute Cloud(Amazon EC2)实例每次重启时使用用户数据运行脚本。该如何操作?

简短描述

默认情况下,用户数据脚本和 cloud-init 指令仅在 EC2 实例启动的第一个引导周期内运行。但是,您可以使用 MIME 多部分文件配置自己的用户数据脚本和 cloud-init 指令。MIME 多部分文件允许您的脚本覆盖 cloud-init 包中用户数据的运行频率。然后,该文件将运行用户脚本。有关 MIME 多部分文件的更多信息,请参阅 cloud-init 网站上的 MIME 多部分归档

**注意:**在继续执行以下解决方案之前,最佳实践是创建实例的快照

解决方法

警告:在开始执行此操作之前,请查看以下信息:

1.    确保在 EC2 实例上安装了最新版本的 cloud-init 且正常运行。

2.    出于安全原因,请创建 IAM policy 以限制哪些用户可以通过 ModifyInstanceAttribute API 添加或删除用户数据。

3.    打开 Amazon EC2 控制台

4.    停止您的实例

5.    依次选择操作实例设置编辑用户数据

6.    将您的用户脚本复制到编辑用户数据框,然后选择保存

以下示例是个 Shell 脚本,将“Hello World”写入 testfile.txt 文件(位于 /tmp 目录中)。

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/echo "Hello World" >> /tmp/testfile.txt
--//--

默认情况下,cloud-init 每次仅允许用户数据使用一种内容类型。但是,此示例显示的是 MIME 多部分文件中的 text/cloud-configtext/x-shellscript 两种内容类型。

text/cloud-config 内容类型可以覆盖 cloud-init 包中的用户数据运行频率,方法是将 SCRIPTS-USER 参数设为 ALWAYS

text/x-shellscript 内容类型可以提供通过 cloud-init cloud_final_modules 模块运行的实际用户脚本。在此示例中,只有一行要运行,即 /bin/echo "Hello World." >> /tmp/testfile.txt

注意:请将行 /bin/echo "Hello World." >> /tmp/testfile.txt 替换为要在实例启动期间运行的 Shell 脚本。

7.    重新启动您的 EC2 实例,并验证脚本是否正确运行。


相关信息

启动时在 Linux 实例上运行命令

启动时在 Windows 实例上运行命令

AWS Systems Manager Automation

用户数据格式

相关视频

AWS 官方
AWS 官方已更新 2 年前