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

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

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

重要

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

注意

此示例假定您已完成在 Windows 实例上运行配方示例。如果没有,您应该先完成该示例。具体而言,它介绍了如何启用对实例的 RDP 访问。

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

本主题介绍如何在 AWS OpsWorks Stacks Windows 实例AWS SDK for Ruby上使用从 S3 存储桶下载文件。

如果 Ruby 应用程序需要访问 AWS 资源,您必须向其提供一组具有适当权限的 AWS 凭证。对于配方,提供 AWS 证书的最佳选择是使用 AWS Identity and Access Management (I AM) 角色。IAM 角色的工作方式与 IAM 用户非常相似,它有一个附加的策略,用于授予使用各种 AWS 服务的权限。但是,您将角色分配给 Amazon Elastic Compute Cloud (Amazon EC2) 实例而不是个别用户。随后,此实例上运行的应用程序将获取附加策略所授予的权限。使用角色,凭证绝不会显示在您的代码中,甚至不会间接显示。

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

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

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

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

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

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

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

  4. 创建包含以下配方的 default.rb 文件,并将该文件保存到 recipes 目录。将 windows-cookbooks 替换为您将用于存储要下载的文件的 S3 存储桶的名称。

    Chef::Log.info("******Downloading an object from S3******") chef_gem "aws-sdk-s3" do compile_time false action :install end ruby_block "download-object" do block do require 'aws-sdk-s3' Aws.use_bundled_cert! s3_client = Aws::S3::Client.new(region:'us-west-2') s3_client.get_object(bucket: 'windows-cookbooks', key: 'myfile.txt', response_target: '/chef/myfile.txt') end action :run end
  5. 创建 s3download.zip 存档,然后将该文件上传到 S3 存储桶。公开该文件并记录 URL 以供将来使用。

  6. 创建一个名为 myfile.txt 的文本文件,然后将其上传到 S3 存储桶。这是您的配方将下载的文件,让您可以使用任何方便的存储桶。

该配方执行以下任务。

1: 安装 SDK for Ruby v2。

该示例使用 SDK for Ruby 来下载对象。但是, AWS OpsWorks Stacks 不会在 Windows 实例上安装此 SDK,因此配方的第一部分使用chef_gem资源来处理该任务。您可以使用此资源安装 Gem 以供 Chef 使用,其中包括配方。

2: 下载文件。

该配方的第三部分使用 ruby_block 资源运行 SDK for Ruby v2 代码,以将 myfile.txt 从名为 windows-cookbooks 的 S3 存储桶下载到实例的 /chef 目录。将 windows-cookbooks 更改为包含 myfile.txt 的存储桶的名称。

注意

配方是一种 Ruby 应用程序,因此您可以将 Ruby 代码放在配方的正文中;它不一定要位于 ruby_block 资源中。但是,Chef 会首先在配方的正文中执行 Ruby 代码,然后按顺序执行每个资源。在本示例中,如果您将下载代码放在配方的正文中,则此操作会失败,因为它依赖于,并且安装开发工具包的 chef_gem 资源尚未执行。ruby_block 资源中的代码会在资源执行时执行,并且这将发生在 chef_gem 资源安装 SDK for Ruby 之后。

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

创建堆栈
  1. 打开 AWS OpsWorks Stacks 控制台,然后选择 Add Stack (添加堆栈)。指定以下设置,接受其他设置的默认值,然后选择 Add Stack

    • 名称 - S3Download

    • 区域-美国西部(俄勒冈州)

      本示例在任何区域都有效,但我们建议将美国西部(俄勒冈州)用于教程。

    • 默认操作系统 - Microsoft Windows Server 2012 R2

  2. 选择 Add a layer 并将采用以下设置的自定义层添加到堆栈。

    • 名称 - S3Download

    • 短名称 - s3download

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

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

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

    • 存储库类型 - S3 存档

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

    接受其他设置的默认值,然后选择 Save 更新堆栈配置。

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

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

    注意

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

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

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

    ... [2015-05-01T21:11:04+00:00] INFO: Loading cookbooks [s3download@0.0.0] [2015-05-01T21:11:04+00:00] INFO: Storing updated cookbooks/s3download/recipes/default.rb in the cache. [2015-05-01T21:11:04+00:00] INFO: ******Downloading an object from S3****** [2015-05-01T21:11:04+00:00] INFO: Processing chef_gem[aws-sdk] action install (s3download::default line 3) [2015-05-01T21:11:05+00:00] INFO: Processing ruby_block[download-object] action run (s3download::default line 8) ...
  2. 使用 RDP 登录实例并检查 c:\chef 的内容。