View a markdown version of this page

将包发布到 Amazon S3 conda 频道 - 截止日期云

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

将包发布到 Amazon S3 conda 频道

您可以将 conda 包发布到亚马逊简单存储服务 (Amazon S3) 存储桶,这样 AWS Deadline Cloud(Deadline Cloud)工作人员就可以安装它们来运行作业。该rattler-build publish命令在 Amazon S3 上的使用方式与使用本地文件系统通道的方式相同。该命令可以生成配方并发布结果,也可以发布您已经构建的包文件。在这两种情况下,该命令都会将包上传到存储桶,并一步为频道编制索引。

rattler-build publish命令 AWS 使用标准凭证链进行身份验证,因此它像使用任何 AWS 工具一样使用您的 AWS 配置。有关配置凭据的更多信息,请参阅 AWS Command Line Interface (AWS CLI) 用户指南中的配置和凭据文件设置

先决条件

在将包发布到 Amazon S3 之前,请完成以下先决条件:

  • pixi 和 rattler-build — 从 pixi.sh 安装 pixi,然后安装。 rattler-build

    pixi global install rattler-build
  • git — 克隆示例存储库所必需的。在Windows,git f or Windows 还提供了一个bash外壳,这是一些Windows示例配方所需要的。

  • 亚马逊 S3 存储桶 — 用作 conda 通道的亚马逊 S3 存储桶。您可以使用 Deadline Cloud 场中的任务附件存储桶,也可以创建单独的存储桶。

  • AWS 凭证-使用aws configure命令或命令在您的工作站上配置凭据。aws login有关更多信息,请参阅 AWS Command Line Interface 用户指南中的设置 AWS CLI

  • IAM 权限 —(可选)要缩小您的证书所拥有的权限范围,您可以使用 AWS Identity and Access Management (IAM) 策略,该策略仅授予对 Amazon S3 存储桶和您使用的频道前缀的以下权限(例如,/Conda/*):

    • s3:GetObject

    • s3:PutObject

    • s3:DeleteObject

    • s3:ListBucket

    • s3:GetBucketLocation

将包裹发布到 Amazon S3 频道

s3://目标rattler-build publish一起使用,将包发布到您的 Amazon S3 conda 频道。如果存储桶中不存在该频道,则会自动rattler-build初始化该频道。在开始之前,请确保您已完成先决条件

以下示例发布了 Deadline Cloud 示例存储库中的 Blender 4.5 示例配方GitHub。您可以替换样本存储库中的其他食谱,也可以使用自己的食谱。

注意

大型应用程序可能需要数十 GB 的可用磁盘空间来存放源存档、提取的文件和生成输出。请确保使用具有足够可用空间的磁盘,用于软件包生成输出。

将包发布到 Amazon S3 频道
  1. 克隆截止日期云示例存储库。

    git clone https://github.com/aws-deadline/deadline-cloud-samples.git
  2. 切换到 conda_recipes 目录。

    cd deadline-cloud-samples/conda_recipes
  3. 运行如下命令。将 amzn-s3-demo-bucket替换为存储桶名称。

    rattler-build publish blender-4.5/recipe/recipe.yaml --to s3://amzn-s3-demo-bucket/Conda/Default --build-number=+1

    /Conda/Default缀组织存储桶内的频道。您可以使用不同的前缀,但该前缀在引用该频道的所有命令和队列配置中必须一致。

关于内部版本号

--build-number=+1选项会根据目标频道中已有的版本号自动选择下一个内部版本号。最佳做法是永远不要覆盖频道中的软件包。如果软件包在其他情况下会有相同的文件名,请务必使用新的内部版本号进行构建。当你构建到制作频道或过渡频道时,使用可以--build-number=+1实现这一点。

如果要直接控制内部版本号,则可以使用特定值对其进行设置,例如--build-number=7。如果省略该选项,则rattler-build使用recipe.yaml文件中定义的内部版本号。

如果你的包配方依赖于来自特定渠道(例如 conda-forge)的软件包,请-c conda-forge添加到命令中。

您也可以发布已经生成的包文件,例如,来自本地版本的.conda文件。将 amzn-s3-demo-bucket替换为存储桶名称。

rattler-build publish output/linux-64/blender-4.5.0-hb0f4dca_0.conda \ --to s3://amzn-s3-demo-bucket/Conda/Default

初始化频道或重新索引频道

当您使用rattler-build publish发布包时,如果频道尚不存在,则该命令会自动初始化该频道。在大多数情况下,您无需手动初始化频道或重新索引频道。

在以下情况下,您可能需要手动初始化频道或重新索引频道:

  • 例如,您希望在发布任何包之前创建一个空频道,以验证您的 Deadline Cloud 队列环境是否可以连接到该频道。

  • 您直接使用 Amazon S3 工具上传或删除.conda文件rattler-build publish,而不是使用,并且频道索引已过期。

初始化空频道

要初始化空频道,请创建一个repodata.json文件并将其上传到频道前缀的noarch子目录。将 amzn-s3-demo-bucket替换为存储桶名称。

echo '{"info":{"subdir":"noarch"},"packages":{},"packages.conda":{},"removed":[],"repodata_version":1}' > empty_channel_repodata.json aws s3api put-object --body empty_channel_repodata.json --key Conda/Default/noarch/repodata.json --bucket amzn-s3-demo-bucket

/Conda/Default缀必须与您的队列环境使用的频道前缀匹配。初始化频道后,您可以使用将包发布到频道rattler-build publish

为频道重新编制索引

如果频道索引已过期,则rattler-index使用从频道中的包文件中重建索引。首先,安装rattler-index

pixi global install rattler-index

然后重新索引频道。将 amzn-s3-demo-bucket替换为存储桶名称。

rattler-index s3 s3://amzn-s3-demo-bucket/Conda/Default

测试软件包

发布软件包后,创建一个临时 pixi 项目以验证软件包是否正常运行。该项目通过 Amazon S3 渠道安装软件包。

测试软件包
  1. 创建临时测试目录并使用 Amazon S3 通道初始化一个 pixi 项目。将 amzn-s3-demo-bucket替换为存储桶名称。

    mkdir package-test-env cd package-test-env pixi init --channel s3://amzn-s3-demo-bucket/Conda/Default
  2. 将软件包添加到项目中。

    pixi add blender=4.5
  3. 验证软件包是否正常运行。

    pixi run blender --version

    pixi run命令激活项目目录的 conda 环境,并在其中运行指定的命令。环境保留在项目目录中,因此您可以从其他终端使用相同的pixi run命令。

从频道中移除软件包

避免从用于生产的渠道中删除软件包,因为锁文件通过哈希引用特定的软件包。删除软件包会阻止从这些锁文件中重新创建环境。对于开发和测试频道,您可以移除特定软件包,方法是从存储桶中删除该.conda文件,然后重新索引该频道。

删除包文件,然后重新索引频道。将 amzn-s3-demo-bucket替换为存储桶名称。

aws s3 rm s3://amzn-s3-demo-bucket/Conda/Default/linux-64/blender-4.5.0-hb0f4dca_1.conda

删除文件后,重新索引频道以更新频道元数据。有关说明,请参阅为频道重新编制索引。

Package 文件存储在平台特定的子目录中linux-64,例如、win-64或。osx-arm64要列出子目录中的软件包,请运行以下命令。

aws s3 ls s3://amzn-s3-demo-bucket/Conda/Default/linux-64/

清理

测试完成后,移除测试项目目录。

清理测试资源
  • 移除测试项目目录。

    在 Linux and 上macOS,运行以下命令。

    rm -rf package-test-env

    在 Windows (cmd) 上,运行以下命令。

    rmdir /s /q package-test-env

调试版本

如果构建失败,则rattler-build保留构建目录以便您可以进行调查。运行以下命令在构建环境中打开一个交互式 shell,其中所有环境变量都与生成期间一样设置。

rattler-build debug shell

在调试 shell 中,您可以修改文件、运行单独的构建命令以及添加依赖关系以隔离问题。有关更多信息,请参阅 rattler-build 文档中的调试构建

为其他平台构建软件包

rattler-build publish命令为运行该命令的工作站的操作系统生成软件包。如果您的 Deadline Cloud 队列使用的操作系统与您的工作站不同,或者您的软件包有其他主机要求,则您可以选择以下选项:

  • rattler-build publish在与目标操作系统匹配的主机上运行。例如,使用Linux正在运行的亚马逊弹性计算云 (Amazon EC2) 实例为Linux队列构建软件包。

  • 使用 Deadline Cloud 软件包生成队列在目标平台上自动构建。请参见创建包生成队列

  • (高级)使用交叉编译为不同于工作站的不同平台构建软件包。有关更多信息,请参阅 rattler-build 文档中的交叉编译

后续步骤

将包发布到 Amazon S3 conda 频道后,将您的 Deadline Cloud 队列配置为使用该频道: