示例 9:使用亚马逊EC2实例 - AWS OpsWorks

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

示例 9:使用亚马逊EC2实例

重要

这些区域有: AWS OpsWorks Stacks 该服务已于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请联系 AWS Support 团队开启 AWS re: post 或通过 AWS 高级支持

到目前为止,您一直在本地运行实例 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凭证才能创建 Amazon EC2 实例。如果您没有AWS帐户,则可以按如下方式获取一个帐户。

注册获取 AWS 账户

如果你没有 AWS 账户,请完成以下步骤来创建一个。

要注册 AWS 账户
  1. 打开https://portal.aws.amazon.com/billing/注册。

  2. 按照屏幕上的说明进行操作。

    在注册时,将接到一通电话,要求使用电话键盘输入一个验证码。

    当你注册时 AWS 账户,一个 AWS 账户根用户已创建。root 用户可以访问所有内容 AWS 服务 以及账户中的资源。作为安全最佳实践,请为用户分配管理访问权限,并且只使用根用户来执行需要根用户访问权限的任务

AWS 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 https://aws.amazon.com/并选择 “我的账户”,查看您当前的账户活动并管理您的账户

创建具有管理访问权限的用户

在你注册之后 AWS 账户,保护你的 AWS 账户根用户,启用 AWS IAM Identity Center,然后创建一个管理用户,这样你就不会使用 root 用户来执行日常任务。

保护你的 AWS 账户根用户
  1. 登录 。AWS Management Console以账户所有者的身份选择 Root 用户并输入你的 AWS 账户 电子邮件地址。在下一页上,输入您的密码。

    有关使用 root 用户登录的帮助,请参阅中以 root 用户身份登AWS 登录 用户指南

  2. 为您的 root 用户开启多重身份验证 (MFA)。

    有关说明,请参阅为您的MFA设备启用虚拟设备 AWS 账户 用户指南中的 root IAM 用户(控制台)。

创建具有管理访问权限的用户
  1. 启用 “IAM身份中心”。

    有关说明,请参阅启用 AWS IAM Identity Center中的 AWS IAM Identity Center 用户指南

  2. 在 IAM Identity Center 中,向用户授予管理访问权限。

    有关使用教程 IAM Identity Center 目录 作为您的身份来源,请参阅使用默认设置配置用户访问权限 IAM Identity Center 目录中的 AWS IAM Identity Center 用户指南

以具有管理访问权限的用户身份登录
  • 要使用您的 Ident IAM ity Center 用户登录URL,请使用您在创建 Ident IAM ity Center 用户时发送到您的电子邮件地址的登录信息。

    有关使用 Ident IAM ity Center 用户登录的帮助,请参阅登录 AWS 访问中的门户 AWS 登录 用户指南

将访问权限分配给其他用户
  1. 在 IAM Identity Center 中,创建一个遵循应用最低权限权限的最佳实践的权限集。

    有关说明,请参阅中的创建权限集 AWS IAM Identity Center 用户指南

  2. 将用户分配到一个组,然后为该组分配单点登录访问权限。

    有关说明,请参阅中的添加群组 AWS IAM Identity Center 用户指南

您应该创建一个有权访问 Amazon 的IAM用户,EC2并将该用户的访问权限和密钥保存到工作站上的安全位置。Test Kitchen 将使用这些凭证来创建实例。向 Test Kitchen 提供凭证的首选方法是将密钥分配给工作站上的以下环境变量。

警告

IAM用户拥有长期凭证,这会带来安全风险。为帮助减轻这种风险,我们建议仅向这些用户提供执行任务所需的权限,并在不再需要这些用户时将其移除。

  • AWS_ACCESS_ KEY — 用户的访问密钥,看起来像AKIAIOSFODNN7EXAMPLE。

  • AWS_SECRET_ KEY — 你的用户的密钥,看起来像 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY.

这种方法通过将包含您的凭证的项目上传到公共存储库,从而可减少意外泄露您的账户的几率。

设置说明书
  1. 要使用 kitchen-ec2 驱动程序,必须将 ruby-dev 软件包安装在您的系统上。以下示例命令演示了如何使用 aptitude 将软件包安装在 Ubuntu 系统上。

    sudo aptitude install ruby1.9.1-dev
  2. kitchen-ec2 驱动程序是一个 Gem,可通过如下方法进行安装:

    gem install kitchen-ec2

    根据您的工作站,可能需要使用此命令sudo,或者您也可以使用 Ruby 环境管理器,例如RVM。此过程已使用 0.8.0 版的 kitchen-ec2 驱动程序进行测试,但已推出更新版本。要安装某个特定版本,请运行 gem install kitchen-ec2 -v <version number>

  3. 您必须指定 Test Kitchen 可用于连接实例的 Amazon EC2 SSH 密钥对。如果您没有 Amazon EC2 密钥对,请参阅 Amazon EC2 密钥对,了解如何创建密钥对。请注意,key pair 必须与实例属于同一AWS区域。示例使用美国西部(北加利福尼亚)。

    选定密钥对后,创建 opsworks_cookbooks 的子目录 (名为 ec2_keys),并将该密钥对的私有密钥 (.pem) 文件复制到该子目录中。请注意,将私有密钥置于 ec2_keys 中只是略微简化代码的一个便捷方法而已;它可以是您系统上的任何位置。

  4. 创建 opsworks_cookbooks 的名为 createdir-ec2 的子目录并导航到该子目录。

  5. 将包含以下内容的 metadata.rb 文件添加到 createdir-ec2

    name "createdir-ec2" version "0.1.0"
  6. 按照示例 1:安装软件包中所述初始化 Test Kitchen。以下部分介绍如何配置.kitchen.yml,这对于Amazon EC2 实例来说要复杂得多。

  7. 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:

您可以使用 provisionersuites 部分的默认设置,但必须修改默认的 driverplatforms 设置。此示例使用了最少的设置列表,并接受了其余部分的默认值。有关kitchen-ec2设置的完整列表,请参阅 Kitche n:: Ec2:适用于亚马逊EC2的测试厨房驱动程序

此示例设置了以下 driver 属性。它假设您已将用户的访问密钥和秘密密钥分配给标准环境变量 (如前所述)。默认情况下,该驱动程序将使用这些密钥。否则,您必须通过将 aws_access_key_idaws_secret_access_key 添加至 driver 属性中来显式指定密钥,并设置为适当的密钥值。

name

(必选) 必须将此属性设置为 ec2

aws_ssh_key_id

(必填)Amazon EC2 SSH 密钥对名称,在本示例US-East1中命名。

transport.ssh_key

(必选) 您为 aws_ssh_key_id 指定的密钥的私有密钥 (.pem) 文件。对于本示例,该文件名为 US-East1.pem,且位于 ../opsworks/ec2_keys 目录中。

region

(必需)实例的AWS区域。示例使用美国西部(北加利福尼亚),用 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相关联。

接口

您用于访问实例的主机名配置类型。有效值为 dnspublicprivateprivate_dns。如果您不指定此属性的值,则 kitchen-ec2 会按如下顺序设置主机名配置。如果您忽略此属性,则不会设置配置类型。

  1. DNS名字

  2. 公有 IP 地址

  3. 私有 IP 地址

  4. 私人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

如果您要使用这些平台中的一个或多个,请将相应的平台名称添加至 platformskitchen-ec2驱动程序会自动选择适当的用户名AMI并生成一个SSH用户名。您可以使用其他平台 (此示例使用 Amazon Linux),但是必须显式指定如下 platforms 属性。

name

平台名称。此示例使用 Amazon Linux,因此 name 设置为 amazon

driver

driver 属性,它包括以下内容:

  • image_id— 平台的AMI,必须属于指定区域。该示例使用的是ami-ed8e9284AMI来自美国西部(加利福尼亚北部)地区的 Amazon Linux。

  • transport.username— Test Kitchen 用于与实例通信的SSH用户名。

    ec2-user 用于 Amazon Linux。其他人AMIs可能有不同的用户名。

.kitchen.yml 中的代码替换为示例,并将相应值分配给特定于账户的属性,例如 aws_access_key_id

运行配方

此示例使用来自迭代的配方。

运行配方
  1. 使用以下代码创建名为 default.rb 的文件,并将其保存至说明书的 recipes 文件夹。

    directory "/srv/www/shared" do mode 0755 owner 'root' group 'root' recursive true action :create end
  2. 运行 kitchen converge 以执行该配方。请注意,由于启动和初始化 Amazon EC2 实例需要时间,因此完成此命令所需的时间比前面的示例长。

  3. 前往 Amazon EC2 控制台,选择美国西部(加利福尼亚北部)区域,然后在导航窗格中点击实例。您将会在列表中看到新创建的实例。

  4. 运行kitchen login登录实例,就像您对正在运行的实例所做的那样 VirtualBox。您将在 /srv 下看到新创建的目录。您也可以使用自己喜欢的SSH客户端连接到实例。