

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從外部連線請求套件
<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`，若要檢視其他套件類型的組態和使用說明，請參閱 [搭配 Maven 使用 CodeArtifact](using-maven.md)、 [搭配 NuGet 使用 CodeArtifact](using-nuget.md)或 [搭配 Python 使用 CodeArtifact](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 儲存庫時，會發生延遲。例如，假設您已安裝 1.2.5 版的 npm 套件「lodash」，如中所述[從外部連線擷取套件](#fetching-packages-from-a-public-repository)。雖然 lodash `npm install lodash` 命令已成功完成，但套件版本可能尚未出現在 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：//，以及從 CodeArtifact 儲存庫安裝時，可能會有最多 30 分鐘的延遲。CodeArtifact 會自動同步這兩個儲存庫的中繼資料，以確保快取是最新的。

對於 Maven 套件，從新套件版本發佈到公有儲存庫，以及從 CodeArtifact 儲存庫安裝時，可能會有最多 3 小時的延遲。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)。