本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用自定义 AMI
重要
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请通过 re AWS : Post 或通过 Pre
AWS OpsWorks Stacks 支持两种自定义实例的方式:自定义 Amazon 机器映像 (AMI) 和 Chef 食谱。这两种方法都可以让您对安装哪个软件包和软件包版本、如何配置等进行控制。但是,每种方法都有不同优势,因此哪种方法最佳取决于您的要求。
以下是考虑使用自定义 AMI 的主要理由:
-
您希望预捆绑特定软件包,而不是在实例启动之后安装它们。
-
您想要控制软件包更新的时间,以便为您的层提供一致的基本映像。
-
您希望实例 (特别是基于负载的实例) 尽快启动。
以下是考虑使用 Chef 配方的主要理由:
-
它们比自定义 AMI 更灵活。
-
更容易更新。
-
它们可以对正在运行的实例执行更新。
实际上,最佳的解决方案可能是这两种方法的结合。有关配方的更多信息,请参阅说明书和诀窍。
自定义 AMI 如何与堆栈配合使用 AWS OpsWorks
要为您的实例指定自定义 AMI,请在创建新实例时选择使用自定义 AMI 作为实例的操作系统。 AWS OpsWorks 然后,堆栈会显示堆栈区域中的自定义 AMI 列表,您可以从列表中选择相应的自定义 AMI。有关更多信息,请参阅 将实例添加到层。
注意
此主题将讨论在创建或使用自定义 AMI 之前应考虑的一些一般问题。
启动行为
当您启动实例时, AWS OpsWorks Stacks 会使用指定的自定义 AMI 启动一个新的 Amazon EC2 实例。 AWS OpsWorks 然后,堆栈使用 c loud-init 在实例上安装 AWS OpsWorks 堆栈代理,然后代理运行实例的安装配方,然后运行部署配方。实例处于在线状态后,代理会为堆栈中的每个实例 (包括新添加的实例) 运行 Configure 配方。
选择层
AWS OpsWorks Stacks 代理通常不会与已安装的软件包发生冲突。但是,该实例必须是至少一个层的成员。 AWS OpsWorks Stacks 总是运行该层的配方,这可能会导致问题。您应准确了解在使用自定义 AMI 向层添加实例之前,该层的配方对实例要执行的操作。
要查看特定层类型在您的实例上运行哪些配方,请打开包含该层的堆栈。然后在导航窗格中单击 Layers,再单击所关注层的 Recipes。要查看实际代码,请单击配方名称。
注意
对于 Linux AMI,减少冲突可能性的一种方法是使用 AWS OpsWorks 堆栈来配置和配置作为自定义 AMI 基础的实例。有关更多信息,请参阅 从 AWS OpsWorks 堆栈实例创建自定义 Linux AMI。
处理应用程序
除了软件包,您也可能想在 AMI 中包含一个应用程序。如果您有大型复杂应用程序,在 AMI 中包含该应用程序可以缩短实例的启动时间。您可以在 AMI 中加入小型应用程序,但是与让 AWS OpsWorks Stacks 部署应用程序相比,时间优势通常很小或根本没有。
一个选择是在您的 AMI 中包含应用程序并创建一个应用程序,该应用程序从存储库向实例部署应用程序。这种方法不但可以缩短启动时间,而且能够在运行实例后提供一种更新应用程序的便捷方法。请注意,Chef 配方是幂等的,因此只要存储库中的版本与实例上的版本相同,部署配方就不会修改应用程序。
为 AWS OpsWorks 堆栈创建自定义 AMI
要将自定义 AMI 与 AWS OpsWorks 堆栈配合使用,必须先从自定义实例创建 AMI。可从两个选项中选择:
-
根据一个 64 位版本的AWS OpsWorks Stacks 支持的 AMI,使用 Amazon EC2 控制台或 API 来创建和自定义实例。
-
对于 Linux AMI,使用 OpsWorks 根据其关联层的配置创建 Amazon EC2 实例。
在创建自定义 Linux AMI 之前,请在/tmp
分区noexec
上禁用以允许 AWS OpsWorks Stacks 在自定义 Linux 实例上安装其代理。
注意
请注意,AMI 可能不适用于部分实例类型,因此请确保您启动的 AMI 与计划使用的实例类型兼容。具体而言,R3 实例类型需要硬件辅助虚拟化 (HVM) AMI。
然后,您可以使用 Amazon EC2 控制台或 API 从自定义实例创建自定义 AMI。您可以通过将实例添加到层并指定自定义 AMI 的方法在同一区域中的任一堆栈中使用自定义 AMI。有关如何使用自定义 AMI 创建实例的更多信息,请参阅 将实例添加到层。
注意
默认情况下, AWS OpsWorks Stacks 会在启动时安装所有 Amazon Linux 更新,从而为您提供最新版本。此外,Amazon Linux 大约每六个月发布一个新版本,其中可能涉及重大更改。默认情况下,基于 Amazon Linux 的自定义 AMI 会在发布后自动更新到新版本。建议的做法是,将您的自定义 AMI 锁定到特定的 Amazon Linux 版本,这样,您就可以推迟更新,直到您对新版本进行了测试。有关更多信息,请参阅如何将我的 AMI 保持在特定版本?
使用 Amazon EC2 创建自定义 AMI
使用 Amazon EC2 控制台或 API 执行整个任务是创建自定义 AMI 的最简单方法,也是 Windows AMI 的唯一选择。有关以下步骤的更多详细信息,请参阅创建您自己的 AMI。
使用 Amazon EC2 控制台或 API 创建自定义 AMI
-
通过使用一个 64 位版本的 AWS OpsWorks Stacks 支持的 AMI 来创建实例。
-
通过配置实例、安装程序包等自定义步骤 1 的实例。请记住,将根据 AMI 在每个实例上复制您安装的所有内容,因此请勿包括应特定于特定实例的项目。
-
停止实例并创建自定义 AMI。
从 AWS OpsWorks 堆栈实例创建自定义 Linux AMI
要使用自定义 AWS OpsWorks Stacks Linux 实例创建 AMI,请注意,创建的每个 Amazon EC2 实例都 OpsWorks 包含一个唯一身份。如果您通过此类实例创建自定义 AMI,它将包含该身份并且基于 AMI 的所有实例都将具有相同的身份。为了确保基于您的自定义 AMI 的实例具有唯一的身份,必须在创建 AMI 之前先删除自定义实例中的身份。
从 AWS OpsWorks Stacks 实例创建自定义 AMI
-
创建 Linux 堆栈并添加一个或多个层以定义自定义实例的配置。您可以使用内置层、根据需要自定义,以及完全自定义层。有关更多信息,请参阅 正在定制 AWS OpsWorks 堆栈。
-
编辑图层并禁用 AutoHealing。
-
利用首选 Linux 发行版向层中添加实例并启动它。我们建议使用 Amazon EBS 支持的实例。打开实例的详细信息页面并记录其 Amazon EC2 ID 以供将来使用。
-
当实例处于联机状态时,使用 SSH 登录,然后执行接下来的四个步骤之一,具体取决于您的实例操作系统。
-
对于 Chef 11 或 Chef 12 堆栈中的 Amazon Linux 实例或者 Chef 11 堆栈中的 Red Hat Enterprise Linux 7 实例,请执行以下操作。
-
sudo /etc/init.d/monit stop
-
sudo /etc/init.d/opsworks-agent stop
-
sudo rm -rf /etc/aws/opsworks/ /opt/aws/opsworks/ /var/log/aws/opsworks/ /var/lib/aws/opsworks/ /etc/monit.d/opsworks-agent.monitrc /etc/monit/conf.d/opsworks-agent.monitrc /var/lib/cloud/ /etc/chef
注意
对于 Chef 12 堆栈中的实例,请将以下两个文件夹添加到此命令中:
-
/var/chef
-
/opt/chef
-
-
sudo rpm -e opsworks-agent-ruby
-
sudo rpm -e chef
-
-
对于 Chef 12 堆栈中的 Ubuntu 16.04 LTS 或 18.04 LTS 实例,请执行以下操作。
-
sudo systemctl stop opsworks-agent
-
sudo rm -rf /etc/aws/opsworks/ /opt/aws/opsworks/ /var/log/aws/opsworks/ /var/lib/aws/opsworks/ /etc/monit.d/opsworks-agent.monitrc /etc/monit/conf.d/opsworks-agent.monitrc /var/lib/cloud/ /var/chef /opt/chef /etc/chef
-
sudo apt-get -y remove chef
-
sudo dpkg -r opsworks-agent-ruby
-
systemctl stop apt-daily.timer
-
systemctl stop apt-daily-upgrade.timer
-
rm /var/lib/systemd/timers/stamp-apt-daily.timer
-
rm /var/lib/systemd/timers/stamp-apt-daily-upgrade.timer
-
-
对于 Chef 12 堆栈中受支持的其他 Ubuntu 版本,请执行以下操作。
-
sudo /etc/init.d/monit stop
-
sudo /etc/init.d/opsworks-agent stop
-
sudo rm -rf /etc/aws/opsworks/ /opt/aws/opsworks/ /var/log/aws/opsworks/ /var/lib/aws/opsworks/ /etc/monit.d/opsworks-agent.monitrc /etc/monit/conf.d/opsworks-agent.monitrc /var/lib/cloud/ /var/chef /opt/chef /etc/chef
-
sudo apt-get -y remove chef
-
sudo dpkg -r opsworks-agent-ruby
-
-
对于 Chef 12 堆栈中的 Red Hat Enterprise Linux 7 实例,请执行以下操作。
-
sudo systemctl stop opsworks-agent
-
sudo rm -rf /etc/aws/opsworks/ /opt/aws/opsworks/ /var/log/aws/opsworks/ /var/lib/aws/opsworks/ /etc/monit.d/opsworks-agent.monitrc /etc/monit/conf.d/opsworks-agent.monitrc /var/lib/cloud/ /etc/chef /var/chef
-
sudo rpm -e opsworks-agent-ruby
-
sudo rpm -e chef
-
-
此步骤取决于实例类型:
-
对于由亚马逊 EBS 支持的实例,请使用 AWS OpsWorks Stacks 控制台停止该实例并创建 AMI,如创建由亚马逊 EBS 提供支持的 L inux AMI 中所述。
-
对于由实例存储支持的实例,请按照创建实例存储支持的 Linux AMI 中所述创建 AMI,然后使用堆栈控制台停止 AWS OpsWorks 该实例。
当您创建 AMI 时,请确保包含证书文件。例如,您可以调用
ec2-bundle-vol
命令(将-i
参数设置为-i $(find /etc /usr /opt -name '*.pem' -o -name '*.crt' -o -name '*.gpg' | tr '\n' ',')
)。请勿在绑定时删除 apt 公有密钥。默认ec2-bundle-vol
命令处理此任务。
-
-
返回堆栈控制台并从 AWS OpsWorks 堆栈中删除实例,清理堆栈。
创建自定义 Windows AMI
以下过程将创建适用于 Windows Server 2022 Base 的自定义 AMI。您可以在 Amazon EC2 管理控制台中选择其他 Windows Server 操作系统。
重要
目前,无法在 AWS OpsWorks 使用英语-美国 (en-US) 以外的系统用户界面语言的基于 Windows 的实例上安装 AWS OpsWorks Stacks 代理,Stacks 也无法管理。
使用 Sysprep
创建自定义 Windows AMI
通过使用 Sysprep 创建自定义 Windows AMI 通常会导致实例启动过程变慢,但步骤更清晰。由于Sysprep
活动、重启、堆栈配置和第一次 AWS OpsWorks AWS OpsWorks 堆栈运行(包括设置和配置),首次启动使用创建的映像创建的实例会Sysprep
花费更多时间。在 Amazon EC2 控制台中完成创建自定义 Windows AMI 的步骤。
使用 Sysprep 创建自定义 Windows AMI
-
在 Amazon EC2 控制台中,选择启动实例。
-
查找 Microsoft Windows Server 2022 Base,然后选择选择。
-
选择您需要的实例类型,然后选择 Configure Instance Details。对 AMI 进行配置更改,包括机器名称、存储和安全组设置。选择启动。
-
实例启动过程完成后,获取密码,然后连接到 Windows Remote Desktop Connection 窗口中的实例。
-
在 Windows “开始” 屏幕上,选择 “开始”,然后开始键入,
ec2configservice
直到结果显示 EC2 ConfigServiceSettings 控制台。打开 控制台。 -
在 “常规” 选项卡上,确保选中 “启用 UserData 执行” 复选框(尽管此选项不是必需的
Sysprep
,但 AWS OpsWorks Stacks 需要安装其代理)。清除 Set the computer name of the instance... (设置实例的计算机名称...) 选项对应的复选框,因为此选项可导致 AWS OpsWorks Stacks 重新启动循环。 -
在图像选项卡上,将管理员密码设置为随机以允许Amazon EC2 自动生成可以用 SSH 密钥检索的密码,或者设置为指定以指定您自己的密码。
Sysprep
将保存此设置。如果您指定自己的密码,请将密码保存在方便的位置。建议您不要选择 Keep Existing。 -
选择 Apply,然后选择 Shutdown with Sysprep。如果提示确认,请选择 Yes。
-
实例停止后,在 Amazon EC2 控制台中,右键单击实例列表中的实例,选择图像,然后选择创建图像。
-
在 Create Image 页面中,提供映像的名称和描述,并指定卷配置。完成后,选择 Create Image。
-
打开 Images 页面,等待映像从 pending 阶段变为 available。新的 AMI 已准备就绪,可供使用。
不使用 Sysprep
创建自定义 Windows AMI
在 Amazon EC2 控制台中完成创建自定义 Windows AMI 的步骤。
不使用 Sysprep 创建自定义 Windows AMI
-
在 Amazon EC2 控制台中,选择启动实例。
-
查找 Microsoft Windows Server 2022 Base,然后选择选择。
-
选择您需要的实例类型,然后选择 Configure Instance Details。对 AMI 进行配置更改,包括机器名称、存储和安全组设置。选择启动。
-
实例启动过程完成后,获取密码,然后连接到 Windows Remote Desktop Connection 窗口中的实例。
-
在实例上,打开
C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml
,更改以下两项设置,然后保存并关闭文件:-
Ec2SetPassword
到Enabled
-
Ec2HandleUserData
到Enabled
-
-
断开远程桌面会话,并返回 Amazon EC2 控制台。
-
在 Instances 列表中,停止实例。
-
实例停止后,在 Amazon EC2 控制台中,右键单击实例列表中的实例,选择图像,然后选择创建图像。
-
在 Create Image 页面中,提供映像的名称和描述,并指定卷配置。完成后,选择 Create Image。
-
打开 Images 页面,等待映像从 pending 阶段变为 available。新的 AMI 已准备就绪,可供使用。
使用自定义 Windows AMI 添加新实例
您的映像变为 available 状态后,就可以创建基于自定义 Windows AMI 的新实例。当您从 Operating system (操作系统) 列表中选择 Use custom Windows AMI (使用自定义 Windows AMI) 时, AWS OpsWorks Stacks 显示自定义 AMI 的列表。
添加基于自定义 Windows AMI 的新实例
-
当您的新 AMI 可用时,前往 AWS OpsWorks 堆栈控制台,打开 Windows 堆栈的 “实例” 页面,然后选择页面底部附近的 + Instance 来添加新实例。
-
在 New 选项卡上,选择 Advanced。
-
在 Operating system 下拉列表中,选择 Use custom Windows AMI。
-
在 Custom AMI 下拉列表中,选择您创建的 AMI,然后选择 Add Instance。
现在您就可以启动和运行该实例了。