本地打包说明书依赖项 - AWS OpsWorks

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

本地打包说明书依赖项

重要

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

您可以使用 Berkshelf 本地打包说明书依赖项,将该软件包上传到 Amazon S3,并修改您的堆栈以将 Amazon S3 上的软件包用作说明书源。发送到 Amazon S3 存储桶的内容可能包含客户内容。有关删除敏感数据的更多信息,请参阅如何清空 S3 存储桶?如何删除 S3 存储桶?

以下演练描述了如何将您的食谱及其依赖项预打包到.zip 文件中,然后使用.zip 文件作为 Stacks 中 Linux 实例的食谱来源。 AWS OpsWorks 第一个演练展示了如何打包一个说明书。第二个演练展示了如何打包多个说明书。

在开始之前,请先安装 Chef 开发工具包 (也称为 Chef DK),该工具包是由 Chef 社区构建的各种工具。您需要此工具包才能使用 chef 命令行工具。

在 Chef 12 中打包依赖项

在 Chef 12 Linux 中,默认情况下,Berkshelf 不再安装在堆栈实例上。建议您在本地开发计算机上安装和使用 Berkshelf,以便在本地打包说明书依赖项。将您的程序包 (包含依赖项) 上传到 Amazon S3。最后,修改您的 Chef 12 Linux 堆栈,将已上传的程序包用作说明书源。当您在 Chef 12 中打包说明书时,请注意以下差异。

  1. 在本地计算机上,通过运行 chef 命令行工具创建说明书。

    chef generate cookbook "server-app"

    此命令会创建一个说明书、一个 Berksfile、一个 metadata.rb 文件和一个配方目录,并将它们放置在与说明书同名的文件夹中。下面的示例显示所创建项目的结构。

    server-app <-- the cookbook you've just created └── Berksfile ├── metadata.rb └── recipes
  2. 在文本编辑器中,编辑 Berksfile 以指向 server-app 说明书将依赖的说明书。在我们的示例中,我们希望 server-app 依赖于 Chef Supermarket 中的 java 说明书。我们将指定版本 1.50.0 或更新的次要版本,但您可以在单引号中输入任何发布的版本。保存更改并关闭文件。

    source 'https://supermarket.chef.io' cookbook 'java', '~> 1.50.0'
  3. 编辑 metadata.rb 文件以添加依赖项。保存更改并关闭文件。

    depends 'java' , '~> 1.50.0'
  4. 更改到 Chef 为您创建的 server-app 说明书目录,然后运行 package 创建说明书的 tar 文件。如果您要打包多个说明书,需要在存储所有说明书的根目录中运行此命令。要打包单个说明书,请在说明书目录级别运行此命令。在此示例中,我们在 server-app 目录中运行此命令。

    berks package cookbooks.tar.gz

    输出与以下内容类似。在本地目录中创建 tar.gz 文件。

    Cookbook(s) packaged to /Users/username/tmp/berks/cookbooks.tar.gz
  5. 在中 AWS CLI,将您刚刚创建的包上传到 Amazon S3。在将说明书程序包上传到 S3 后,记下此程序包的新 URL;您的堆栈设置需要此 URL。

    aws s3 cp cookbooks.tar.gz s3://bucket-name/

    输出与以下内容类似。

    upload: ./cookbooks.tar.gz to s3://bucket-name/cookbooks.tar.gz
  6. 在 AWS OpsWorks Stacks 中,修改您的堆栈以使用您上传的包作为食谱来源。

    1. Use custom Chef cookbooks 设置设为 Yes

    2. Repository type 设置为 S3 Archive

    3. Repository URL 中,粘贴您在步骤 5 中上传的说明书程序包的 URL。

    保存您的堆栈更改。

本地打包一个说明书的依赖项

  1. 在本地计算机上,使用 chef 命令行工具创建说明书:

    chef generate cookbook "server-app"

    此命令会创建一个说明书和 Berksfile,并将它们放置在与说明书同名的文件夹中。

  2. 更改到 Chef 为您创建的说明书目录,然后通过运行以下命令打包所有内容:

    berks package cookbooks.tar.gz

    该输出类似于以下示例:

    Cookbook(s) packaged to /Users/username/tmp/berks/cookbooks.tar.gz
  3. 在中 AWS CLI,将您刚刚创建的包上传到 Amazon S3:

    aws s3 cp cookbooks.tar.gz s3://bucket-name/

    该输出类似于以下示例:

    upload: ./cookbooks.tar.gz to s3://bucket-name/cookbooks.tar.gz
  4. 在 AWS OpsWorks Stacks 中,修改您的堆栈以使用您上传的包作为食谱来源。

本地打包多个说明书的依赖项

此示例将创建两个说明书,并打包它们的依赖项。

  1. 在本地计算机上,运行以下 chef 命令以生成两个说明书:

    chef generate cookbook "server-app" chef generate cookbook "server-utils"

    在本示例中,服务器应用程序说明书执行 Java 配置,因此我们需要添加对 Java 的依赖项。

  2. 编辑 server-app/metadata.rb 以添加对社区 Java 说明书的依赖项:

    maintainer "The Authors" maintainer_email "you@example.com" license "all_rights" description "Installs/Configures server-app" long_description "Installs/Configures server-app" version "0.1.0" depends "java"
  3. 通过编辑说明书根目录中的 Berksfile 文件,来告诉 Berkshelf 要打包的内容,如下所示:

    source "https://supermarket.chef.io" cookbook "server-app", path: "./server-app" cookbook "server-utils", path: "./server-utils"

    现在,您的文件结构如下所示:

    .. └── Berksfile ├── server-app └── server-utils
  4. 最后,创建一个 zip 压缩包,将其上传到 Amazon S3,然后修改您的 AWS OpsWorks Stacks 堆栈以使用新的食谱来源。为此,请执行本地打包一个说明书的依赖项中的步骤 2 到步骤 4。

其他 资源

有关打包说明书依赖项的更多信息,请参阅以下内容。