从外部连接请求程序包 - CodeArtifact

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

从外部连接请求程序包

以下各节介绍如何通过外部连接请求程序包以及请求程序包时的预期 CodeArtifact 行为。

从外部连接提取程序包

将 CodeArtifact 仓库连接到公共仓库中所述,将程序包添加到 CodeArtifact 存储库后,要从外部连接提取程序包,请将程序包管理器配置为使用您的存储库并安装这些程序包。

注意

以下说明使用 npm,要查看其他程序包类型的配置和使用说明,请参阅将 CodeArtifact 与 Maven 结合使用将 CodeArtifact 与 NuGet 结合使用 CodeArtifact 与 Python 一起使用

从外部连接提取程序包
  1. 使用您的 CodeArtifact 存储库配置程序包管理器并对其进行身份验证。对于 npm,使用以下 aws codeartifact login 命令。

    aws codeartifact login --tool npm --domain my_domain --domain-owner 111122223333 --repository my_repo
  2. 从公有存储库请求程序包。对于 npm,请使用以下 npm install 命令,将 lodash 替换为要安装的程序包。

    npm install lodash
  3. 将程序包复制到您的 CodeArtifact 存储库后,您可以使用 list-packageslist-package-versions 命令来查看程序包。

    aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo

    输出示例:

    { "packages": [ { "format": "npm", "package": "lodash" } ] }

    list-package-versions 命令列出了已复制到您的 CodeArtifact 存储库中的程序包的所有版本。

    aws codeartifact list-package-versions --domain my_domain --domain-owner 111122223333 --repository my_repo --format npm --package lodash

    输出示例:

    { "defaultDisplayVersion: "1.2.5" "format": "npm", "package": "lodash", "namespace": null, "versions": [ { "version": "1.2.5", "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC", "status": "Published" } ] }

外部连接延迟

使用外部连接从公有存储库提取程序包时,从公有存储库提取软件包到将其存储在 CodeArtifact 存储库中存在一定的延迟。例如,假设您已经安装了 npm 程序包“lodash”的版本 1.2.5,如从外部连接提取程序包中所述。尽管 npm install lodash lodash 命令成功完成,但程序包版本可能尚未出现在您的 CodeArtifact 存储库中。程序包版本通常需要大约 3 分钟才会出现在您的存储库中,但偶尔可能需要更长的时间。

由于存在这种延迟,您可能已经成功取回了程序包版本,但在 CodeArtifact 控制台的存储库中或调用 ListPackages 和 ListPackageVersions API 操作时可能还无法看到该版本。CodeArtifact 异步保存了程序包版本之后,即可在控制台中以及通过 API 请求来显示该版本。

外部存储库不可用时的 CodeArtifact 行为

有时,外部存储库会出现中断,这意味着 CodeArtifact 无法从存储库中提取程序包,或者提取程序包的速度比平时慢得多。发生这种情况时,已经从外部存储库(例如 npmjs.com)提取并存储在 CodeArtifact 存储库中的程序包版本将继续可供从 CodeArtifact 下载。但是,即使配置了与该存储库的外部连接,尚未存储在 CodeArtifact 中的程序包也可能不可用。例如,您的 CodeArtifact 存储库可能包含 npm 程序包版本 lodash 4.17.19 ,因为这是您迄今为止在应用程序中使用的版本。当您想升级到 4.17.20 时,CodeArtifact 通常会从 npmjs.com 提取新版本并将其存储在您的 CodeArtifact 存储库中。但是,如果 npmjs.com 发生中断,则这个新版本将不可用。唯一的解决方法是等 npmjs.com 恢复后再试。

外部存储库中断也会影响将新程序包版本发布到 CodeArtifact。在配置了外部连接的存储库中,CodeArtifact 不允许发布外部存储库中已存在的程序包版本。有关更多信息,请参阅程序包概览。但在极少数情况下,外部存储库中断可能意味着 CodeArtifact 不了解有关外部存储库中存在哪些程序包和程序包版本的最新信息。在这种情况下,CodeArtifact 可能允许发布它通常会拒绝的程序包版本。

新程序包版本的可用性

要使公有存储库(例如 npmjs.com)中的程序包版本可通过 CodeArtifact 存储库来提供,必须先将其添加到区域程序包元数据缓存中。此缓存由 CodeArtifact 在每个 AWS 区域中维护,并包含描述受支持公有存储库内容的元数据。由于存在这个缓存,在将新程序包版本发布到公有存储库和从 CodeArtifact 提供新程序包版本之间会有延迟。延迟时间因程序包类型而异。

对于 npm、Python 和 Nuget 程序包,从将新程序包版本发布到 npmjs.com、pypi.org 或 nuget.org 到可以从 CodeArtifact 存储库进行安装为止,最长可能有 30 分钟的延迟。CodeArtifact 会自动同步来自这两个存储库的元数据,从而确保缓存是最新的。

对于 Maven 程序包,从将新程序包版本发布到公有存储库到可以从 CodeArtifact 存储库进行安装为止,最长可能有 3 小时的延迟。CodeArtifact 至多每 3 小时检查一次程序包的新版本。在 3 小时缓存寿命到期后首次请求给定程序包名称会导致该程序包的所有新版本都导入到区域缓存中。

对于常用的 Maven 程序包,通常每 3 小时导入一次新版本,因为高请求率意味着缓存通常会在缓存寿命到期后立即更新。对于不常使用的程序包,在从 CodeArtifact 存储库请求程序包版本之前,缓存将不会有最新版本。在第一个请求中,CodeArtifact 只能提供之前导入的版本,但此请求会导致缓存更新。在随后的请求中,程序包的新版本将添加到缓存中并可供下载。

导入包含多个资产的程序包版本

Maven 和 Python 程序包的每个程序包版本中都可以有多个资产。因为 npm 和 NuGet 程序包的每个版本只有一个资产,这使得导入这些格式的程序包比导入 npm 和 NuGet 程序包更加复杂。有关为这些程序包类型导入哪些资产以及如何提供新添加资产的说明,请参阅从上游和外部连接请求 Python 程序包从上游和外部连接请求 Maven 程序包