在 AWS OpsWorks Stacks Linux 实例上使用适用于 Ruby 的 SDK - AWS OpsWorks

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

在 AWS OpsWorks Stacks Linux 实例上使用适用于 Ruby 的 SDK

重要

该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止,新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问,请通过 re AWS : Post 或通过 Pre mium Su AWS pp ort 与 AWS Support 团队联系。

本主题介绍如何在 AWS OpsWorks Stacks Linux 实例上使用适用于 Ruby 的软件开发工具包从 Amazon S3 存储桶下载文件。 AWS OpsWorks Stacks 会在每个 Linux 实例上自动安装适用于 Ruby 的 SDK。但是,当您创建服务的客户端对象时,必须为其他服务提供一组合适的 AWS 凭证 AWS::S3.new 或等效内容。

发送到 Amazon S3 存储桶的内容可能包含客户内容。有关删除敏感数据的更多信息,请参阅如何清空 S3 存储桶?如何删除 S3 存储桶?

在 Vagrant 实例上使用 SDK for Ruby说明如何通过将凭证存储在节点对象中并在配方代码中引用属性来减小公开凭证的风险。当您在 Amazon EC2 实例上运行配方时,更好的选择是 IAM 角色

IAM 角色的工作原理与 IAM 用户的很类似。它具有授权使用各种 Amazon Web Service 的附加策略。但是,您将角色分配给 Amazon EC2 实例而不是个体。随后,此实例上运行的应用程序将获取附加策略所授予的权限。使用角色,凭证绝不会显示在您的代码中,甚至不会间接显示。本主题介绍如何使用 IAM 角色在 Amazon EC2 实例上运行 在 Vagrant 实例上使用 SDK for Ruby 中的配方。

您可使用 kitchen-ec2 驱动程序来运行此配方与 Test Kitchen,如示例 9:使用 Amazon EC2 实例中所述。但是,在 Amazon EC2 实例上安装适用于 Ruby 的 SDK 有些复杂,对于 AWS OpsWorks 堆栈,您无需担心。默认情况下,所有 AWS OpsWorks Stacks Linux 实例都安装了适用于 Ruby 的 SDK。因此,为简单起见,该示例使用了 AWS OpsWorks Stacks 实例。

第一步是设置 IAM 角色。此示例采用最简单的方法,即使用 AWS OpsWorks Stacks 在创建第一个堆栈时创建的 Amazon EC2 角色。它被命名为 aws-opsworks-ec2-role。但是, AWS OpsWorks Stacks 不会为该角色附加策略,因此默认情况下它不授予任何权限。

您必须将 AmazonS3ReadOnlyAccess 策略附加到 aws-opsworks-ec2-role 角色才能授予相应的权限。有关如何将策略附加到 IAM 实体的更多信息,请参阅IAM 用户指南中的添加 IAM 身份权限(控制台)

在创建或更新堆栈时指定角色。使用自定义层设置堆栈,如在 Linux 实例上运行配方中所述,增加了一步。在添加堆栈页面上,确认默认 IAM 实例配置文件设置为aws-opsworks-ec双角色。 AWS OpsWorks 然后,堆栈会将该角色分配给堆栈的所有实例。

设置说明书的过程与在 Linux 实例上运行配方使用的过程类似。下面是一个简短摘要;您应参阅该示例以了解详细信息。

设置说明书
  1. 创建一个名为 s3bucket_ops 的目录并导航到该目录。

  2. 创建一个包含以下内容的 metadata.rb 文件,并将该文件保存到 s3bucket_ops

    name "s3bucket_ops" version "0.1.0"
  3. recipes 中创建 s3bucket_ops 目录。

  4. 创建包含以下配方的 default.rb 文件,并将该文件保存到 recipes 目录。

    Chef::Log.info("******Downloading a file from Amazon S3.******") ruby_block "download-object" do block do require 'aws-sdk' s3 = AWS::S3.new myfile = s3.buckets['cookbook_bucket'].objects['myfile.txt'] Dir.chdir("/tmp") File.open("myfile.txt", "w") do |f| f.syswrite(myfile.read) f.close end end action :run end
  5. 创建 .zips3bucket_ops 存档,然后将该存档上传到 Amazon S3 存储桶。为简单起见,请公开存档,然后记录存档的 URL 以供将来使用。您也可以将说明书存储在私有 Amazon S3 存档或几个其他存储库类型中。有关更多信息,请参阅 说明书存储库

此配方类似于上一示例使用的配方,但存在以下差别。

  • 由于 AWS OpsWorks Stacks 已经安装了适用于 Ruby 的 SDK,因此该chef_gem资源已被删除。

  • 配方不会将任何凭证传递到 AWS::S3.new

    凭证将基于实例的角色自动分配到应用程序。

  • 配方使用 Chef::Log.info 将消息添加到 Chef 日志。

按下面所示为本示例创建堆栈。您也可以使用现有 Windows 堆栈。只需更新说明书即可,如下文所述。

创建 堆栈
  1. 打开 AWS OpsWorks Stacks 控制台,然后单击 Add Stack (添加堆栈)

  2. 指定以下设置,接受其他设置的默认值,然后单击 Add Stack

    • 名称 - RubySDK

    • 默认 SSH 密钥 - Amazon EC2 密钥对

    如果您需要创建 Amazon EC2 密钥对,请参阅 Amazon EC2 密钥对。请注意,该密钥对必须属于与实例相同的 Amazon Web Services Region。本示例使用了默认的美国西部(俄勒冈州)区域。

  3. 单击 Add a layer 并将采用以下设置的自定义层添加到堆栈。

    • 名称 - S3Download

    • 短名称 - s3download

    实际上任何层类型均适用于 Linux 堆栈,但本示例不需要由其他层类型安装的任何程序包,因此自定义层是最简单的方法。

  4. 向层添加全天候实例 (采用默认设置) 并启动该实例

您现在可以安装并运行配方

运行配方
  1. 编辑堆栈以启用自定义说明书,然后指定以下设置。

    • 存储库类型 -Http 存档

    • 存储库 URL -您之前记录的说明书存档 URL。

    对其他设置使用默认值,然后单击 Save 更新堆栈配置。

  2. 运行“Update Custom Cookbooks”堆栈命令,这会将当前版本的自定义说明书安装到堆栈的实例上。如果您的说明书存在早期版本,此命令会覆盖该版本。

  3. 通过在 Recipes to execute 设置为 s3bucket_ops::default 的情况下运行 Execute Recipes 堆栈命令来执行配方。此命令将使用一个包含 s3bucket_ops::default 的运行列表来启动 Chef 运行。

    注意

    通常,您可以让 AWS OpsWorks Stacks 自动运行您的配方,方法是将它们分配给相应的生命周期事件。您可以通过手动触发事件来运行此类配方。您可以使用堆栈命令触发设置和配置事件,使用部署命令触发部署和取消部署事件。

配方成功运行后,您可以对其进行验证。

验证 s3bucket_ops
  1. 第一步是检查 Chef 日志。您的堆栈应有一个名为 opstest1 的实例。在 Instances 页面上,单击实例 Log 列中的 show,显示 Chef 日志。向下滚动以在底部附近查找您的日志消息。

    ... [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/attributes/customize.rb in the cache. [2014-07-31T17:01:45+00:00] INFO: Storing updated cookbooks/opsworks_cleanup/metadata.rb in the cache. [2014-07-31T17:01:46+00:00] INFO: ******Downloading a file from Amazon S3.****** [2014-07-31T17:01:46+00:00] INFO: Processing template[/etc/hosts] action create (opsworks_stack_state_sync::hosts line 3) ...
  2. 使用 SSH 登录实例并列出 /tmp 的内容。