本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
示例 9:使用亚马逊 EC2 实例
重要
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请通过 re AWS : Post 或通过 Pre
到目前为止,您一直在本地运行实例 VirtualBox。虽然这既快速又简单,但你最终会想在 Amazon EC2 实例上测试你的食谱。特别是,如果你想在亚马逊 Linux 上运行配方,则只能在亚马逊上使用 EC2。你可以使用类似的系统(例如 CentOS)进行初步实施和测试,但要在 Amazon Linux 上全面测试你的配方,唯一的方法是使用亚马逊 EC2 实例。
本主题介绍如何在 Amazon EC2 实例上运行配方。您使用 Test Kitchen 和 Vagrant 的方式与前面几节的方式大同小异,但有如下两个区别:
-
驱动程序为
kitchen-ec2
而不是 Vagrant。 -
必须使用启动 Amazon EC2 实例所需的信息来配置食谱
.kitchen.yml
文件。
注意
另一种替代方法是使用 vagrant-aws
Vagrant 插件。有关更多信息,请参阅 Vagrant AWS 提供程序
您需要有 AWS 证书才能创建亚马逊 EC2 实例。如果您还没有 Amazon Web Services account,可以按如下方式获取一个。
注册获取 AWS 账户
如果您没有 AWS 账户,请完成以下步骤来创建一个。
报名参加 AWS 账户
打开https://portal.aws.amazon.com/billing/注册。
按照屏幕上的说明操作。
在注册时,将接到电话,要求使用电话键盘输入一个验证码。
当您注册时 AWS 账户,就会创建AWS 账户根用户一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践,请为用户分配管理访问权限,并且只使用根用户来执行需要根用户访问权限的任务。
AWS 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 https://aws.amazon.com/
创建具有管理访问权限的用户
注册后,请保护您的安全 AWS 账户 AWS 账户根用户 AWS IAM Identity Center,启用并创建管理用户,这样您就不会使用 root 用户执行日常任务。
保护你的 AWS 账户根用户
-
选择 Root 用户并输入您的 AWS 账户 电子邮件地址,以账户所有者的身份登录。AWS Management Console
在下一页上,输入您的密码。 要获取使用根用户登录方面的帮助,请参阅《AWS 登录 用户指南》中的 Signing in as the root user。
-
为您的根用户启用多重身份验证(MFA)。
有关说明,请参阅 I A M 用户指南中的为 AWS 账户 根用户启用虚拟 MFA 设备(控制台)。
创建具有管理访问权限的用户
-
启用 IAM Identity Center。
有关说明,请参阅《AWS IAM Identity Center 用户指南》中的 Enabling AWS IAM Identity Center。
-
在 IAM Identity Center 中,为用户授予管理访问权限。
有关使用 IAM Identity Center 目录 作为身份源的教程,请参阅《用户指南》 IAM Identity Center 目录中的使用默认设置配置AWS IAM Identity Center 用户访问权限。
以具有管理访问权限的用户身份登录
-
要使用您的 IAM Identity Center 用户身份登录,请使用您在创建 IAM Identity Center 用户时发送到您的电子邮件地址的登录网址。
有关使用 IAM Identity Center 用户登录的帮助,请参阅AWS 登录 用户指南中的登录 AWS 访问门户。
将访问权限分配给其他用户
-
在 IAM Identity Center 中,创建一个权限集,该权限集遵循应用最低权限的最佳做法。
有关说明,请参阅《AWS IAM Identity Center 用户指南》中的 Create a permission set。
-
将用户分配到一个组,然后为该组分配单点登录访问权限。
有关说明,请参阅《AWS IAM Identity Center 用户指南》中的 Add groups。
您应该创建一个有权访问 Amazon 的 IAM 用户, EC2 并将该用户的访问权限和密钥保存到工作站上的安全位置。Test Kitchen 将使用这些凭证来创建实例。向 Test Kitchen 提供凭证的首选方法是将密钥分配给工作站上的以下环境变量。
警告
IAM 用户具有长期凭证,这会带来安全风险。为帮助减轻这种风险,我们建议仅向这些用户提供执行任务所需的权限,并在不再需要这些用户时将其移除。
-
AWS_ACCESS_KEY — 你的用户的访问密钥,看起来像 AKIAIOSFODNN7EXAMPLE.
-
AWS_SECRET_KEY — 你的用户的密钥,看起来像 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.
这种方法通过将包含您的凭证的项目上传到公共存储库,从而可减少意外泄露您的账户的几率。
设置说明书
-
要使用
kitchen-ec2
驱动程序,必须将ruby-dev
软件包安装在您的系统上。以下示例命令演示了如何使用aptitude
将软件包安装在 Ubuntu 系统上。sudo aptitude install ruby1.9.1-dev
-
kitchen-ec2
驱动程序是一个 Gem,可通过如下方法进行安装:gem install kitchen-ec2
根据您的工作站,此命令可能需要
sudo
,或者您也可以使用 Ruby 环境管理器 (如 RVM)。此过程已使用 0.8.0 版的 kitchen-ec2
驱动程序进行测试,但已推出更新版本。要安装某个特定版本,请运行 gem install kitchen-ec2 -v <
。version number
> -
您必须指定 Test Kitchen 可用于连接实例的 Amazon EC2 SSH 密钥对。如果您没有 Amazon EC2 密钥对,请参阅 Amazon EC2 密钥对,了解如何创建密钥对。请注意,该密钥对必须属于与实例相同的 Amazon Web Services Region。示例使用美国西部(北加利福尼亚)。
选定密钥对后,创建
opsworks_cookbooks
的子目录 (名为ec2_keys
),并将该密钥对的私有密钥 (.pem
) 文件复制到该子目录中。请注意,将私有密钥置于ec2_keys
中只是略微简化代码的一个便捷方法而已;它可以是您系统上的任何位置。 -
创建
opsworks_cookbooks
的名为createdir-ec2
的子目录并导航到该子目录。 -
将包含以下内容的
metadata.rb
文件添加到createdir-ec2
。name "createdir-ec2" version "0.1.0"
-
按照示例 1:安装软件包中所述初始化 Test Kitchen。以下部分介绍如何配置
.kitchen.yml
,这对于Amazon EC2 实例来说要复杂得多。 -
将
recipes
子目录添加createdir-ec2
中。
为亚马逊配置.kitchen.yml EC2
您可以使用kitchen-ec2
驱动程序启动适当配置.kitchen.yml
的 Amazon EC2 实例所需的信息进行配置。以下是面向美国西部(北加利福尼亚)区域中 Amazon Linux 实例的 .kitchen.yml
文件示例。
driver: name: ec2 aws_ssh_key_id: US-East1 region: us-west-1 availability_zone: us-west-1c require_chef_omnibus: true security_group_ids:
sg........
subnet_id:subnet-.........
associate_public_ip: true interface: dns provisioner: name: chef_solo platforms: -name: amazon driver: image_id:ami-xxxxxxxx
transport: username: ec2-user ssh_key: ../ec2_keys/US-East1.pem suites: - name: default run_list: - recipe[createdir-ec2::default] attributes:
您可以使用 provisioner
和 suites
部分的默认设置,但必须修改默认的 driver
和 platforms
设置。此示例使用了最少的设置列表,并接受了其余部分的默认值。有关kitchen-ec2
设置的完整列表,请参阅 Kitche n:: Ec2:适用于亚马逊 EC2的测试厨房驱动程序
此示例设置了以下 driver
属性。它假设您已将用户的访问密钥和秘密密钥分配给标准环境变量 (如前所述)。默认情况下,该驱动程序将使用这些密钥。否则,您必须通过将 aws_access_key_id
和 aws_secret_access_key
添加至 driver
属性中来显式指定密钥,并设置为适当的密钥值。
- 名称
-
(必选) 必须将此属性设置为
ec2
。 - aws_ssh_key_id
-
(必填)Amazon EC2 SSH 密钥对名称,在本示例
US-East1
中命名。 - transport.ssh_key
-
(必选) 您为
aws_ssh_key_id
指定的密钥的私有密钥 (.pem
) 文件。对于本示例,该文件名为US-East1.pem
,且位于../opsworks/ec2_keys
目录中。 - 区域
-
(必选) 实例的 Amazon Web Services Region。示例使用美国西部(北加利福尼亚),用
us-west-1
)表示。 - availability_zone
-
(可选) 实例的可用区。如果您忽略了此设置,则 Test Kitchen 将使用指定区域的默认可用区,为美国西部(北加利福尼亚)的
us-west-1b
。但是,默认区域可能不适用于您的账户。在这种情况下,您必须显式指定一个可用区。如果发生这种情况,用于准备相应示例的账户不支持us-west-1b
,因此示例会显式指定us-west-1c
。 - require_chef_omnibus
-
如果设置为
true
,此设置可确保使用 omnibus 安装程序将chef-client
安装至所有平台实例。 - security_group_ids
-
(可选) IDs 要应用于实例的安全组列表。此设置会将
default
安全组应用于实例。确保安全组入口规则允许入站 SSH 连接,否则 Test Kitchen 无法与实例进行通信。如果您使用default
安全组,则可能需要对其进行相应编辑。有关更多信息,请参阅 Amazon EC2 安全组。 - subnet_id
-
实例的目标子网的 ID (如果适用)。
- associate_public_ip
-
如果您希望能够从互联网访问实例,可以让 Amazon 将公有 IP 地址与该实例 EC2 相关联。
- 接口
-
您用于访问实例的主机名配置类型。有效值为
dns
、public
、private
或private_dns
。如果您不指定此属性的值,则kitchen-ec2
会按如下顺序设置主机名配置。如果您忽略此属性,则不会设置配置类型。-
DNS 名称
-
公有 IP 地址
-
私有 IP 地址
-
私有 DNS 名称
-
重要
您不用将您的账户凭证用于访问密钥和秘密密钥,而应该创建一个用户,并向 Test Kitchen 提供这些凭证。有关更多信息,请参阅管理 AWS 访问密钥的最佳实践。
注意不要将其.kitchen.yml
放在可公开访问的位置,例如将其上传到公共存储库 GitHub 或 Bitbucket 存储库。这样做会暴露您的凭证,并可能危及您的账户安全。
kitchen-ec2
驱动程序为以下平台提供默认支持:
-
ubuntu-10.04
-
ubuntu-12.04
-
ubuntu-12.10
-
ubuntu-13.04
-
ubuntu-13.10
-
ubuntu-14.04
-
centos-6.4
-
debian-7.1.0
-
windows-2012r2
-
windows-2008r2
如果您要使用这些平台中的一个或多个,请将相应的平台名称添加至 platforms
。kitchen-ec2
驱动程序将自动选择适当的 AMI,并生成一个 SSH 用户名。您可以使用其他平台 (此示例使用 Amazon Linux),但是必须显式指定如下 platforms
属性。
- 名称
-
平台名称。此示例使用 Amazon Linux,因此
name
设置为amazon
。 - driver
-
driver
属性,它包括以下内容:-
image_id
-平台的 AMI,必须属于指定区域。该示例使用ami-ed8e9284
,这是来自美国西部(北加利福尼亚)区域的 Amazon Linux AMI。 -
transport.username
- Test Kitchen 将用于与实例进行通信的 SSH 用户名。将
ec2-user
用于 Amazon Linux。其他人 AMIs 可能有不同的用户名。
-
将 .kitchen.yml
中的代码替换为示例,并将相应值分配给特定于账户的属性,例如 aws_access_key_id
。
运行配方
此示例使用来自迭代的配方。
运行配方
-
使用以下代码创建名为
default.rb
的文件,并将其保存至说明书的recipes
文件夹。directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
-
运行
kitchen converge
以执行该配方。请注意,由于启动和初始化 Amazon EC2 实例需要时间,因此完成此命令所需的时间比前面的示例长。 -
前往 Amazon EC2 控制台
,选择美国西部(加利福尼亚北部)区域,然后在导航窗格中点击实例。您将会在列表中看到新创建的实例。 -
运行
kitchen login
以登录实例,就像您对正在运行的实例所做的那样 VirtualBox。您将在/srv
下看到新创建的目录。也可以使用您常用的 SSH 客户端连接到实例。