

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

# 从外部连接请求程序包
<a name="external-connection-requesting-packages"></a>

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

**Topics**
+ [从外部连接提取程序包](#fetching-packages-from-a-public-repository)
+ [外部连接延迟](#external-connection-latency)
+ [CodeArtifact 外部存储库不可用时的行为](#external-connection-unavailable)
+ [新程序包版本的可用性](#new-pv-availability)
+ [导入包含多个资产的程序包版本](#import-pv-multi-asset)

## 从外部连接提取程序包
<a name="fetching-packages-from-a-public-repository"></a>

如所述，将软件包添加到 CodeArtifact存储库后，要从外部连接获取软件包[将 CodeArtifact 仓库连接到公共仓库](external-connection.md)，请将软件包管理器配置为使用您的存储库并安装软件包。

**注意**  
以下说明使用 `npm`，要查看其他程序包类型的配置和使用说明，请参阅[将 CodeArtifact 与 Maven 结合使用](using-maven.md)、[将 CodeArtifact 与 NuGet 结合使用](using-nuget.md)或[CodeArtifact 与 Python 一起使用](using-python.md)。

**从外部连接提取程序包**

1. 使用 CodeArtifact 存储库配置软件包管理器并对其进行身份验证。对于 `npm`，请使用以下 `aws codeartifact login` 命令。

   ```
   aws codeartifact login --tool npm --domain my_domain --domain-owner 111122223333 --repository my_repo
   ```

1. 从公有存储库请求程序包。对于`npm`，请使用以下`npm install`命令，*lodash*替换为要安装的软件包。

   ```
   npm install lodash
   ```

1. 将软件包复制到存储 CodeArtifact 库后，您可以使用`list-packages`和`list-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"
           }
       ]
   }
   ```

## 外部连接延迟
<a name="external-connection-latency"></a>

使用外部连接从公共存储库获取包时，从从公共存储库中提取包到存储在存储库中会有一段延迟。 CodeArtifact 例如，假设您已经安装了 npm 程序包“lodash”的版本 1.2.5，如[从外部连接提取程序包](#fetching-packages-from-a-public-repository)中所述。尽管 l `npm install lodash` odash 命令成功完成，但软件包版本可能尚未出现在您的 CodeArtifact 存储库中。程序包版本通常需要大约 3 分钟才会出现在您的存储库中，但偶尔可能需要更长的时间。

由于这种延迟，您可能已成功检索到软件包版本，但在 CodeArtifact 控制台或调用 ListPackages 和 ListPackageVersions API 操作时，可能还无法在存储库中看到该版本。异 CodeArtifact 步保存软件包版本后，它将在控制台中以及通过 API 请求显示。

## CodeArtifact 外部存储库不可用时的行为
<a name="external-connection-unavailable"></a>

有时，外部存储库会出现故障，这意味着 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 ，不允许发布已存在于外部存储库中的软件包版本。有关更多信息，请参阅 [程序包概览](packages-overview.md)。但是，在极少数情况下，外部存储库中断可能 CodeArtifact 意味着没有关于外部存储库中存在哪些软件包和软件包版本 up-to-date的信息。在这种情况下， CodeArtifact 可能会允许发布它通常会拒绝的软件包版本。

## 新程序包版本的可用性
<a name="new-pv-availability"></a>

 要使公共存储库（例如 npmjs.com）中的软件包版本可通过 CodeArtifact 存储库获得，必须先将其添加到区域包元数据缓存中。此缓存由每个 CodeArtifact AWS 区域维护，包含描述支持的公共存储库内容的元数据。由于存在这种缓存，因此在将新的软件包版本发布到公共存储库和发布新版本之间会有延迟 CodeArtifact。延迟时间因程序包类型而异。

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

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

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

## 导入包含多个资产的程序包版本
<a name="import-pv-multi-asset"></a>

Maven 和 Python 程序包的每个程序包版本中都可以有多个资产。这使得导入这些格式的包比 npm 和 NuGet 包更加复杂，后者每个软件包版本只有一个资产。有关为这些程序包类型导入哪些资产以及如何提供新添加资产的说明，请参阅[从上游和外部连接请求 Python 程序包](python-upstream-external-connections-request.md)和[从上游和外部连接请求 Maven 程序包](maven-upstream-external-connections-request.md)。