

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

# AWS CodeArtifact 概念
<a name="codeartifact-concepts"></a>

 以下是當您使用 CodeArtifact 時需要了解的一些概念和術語。

**Topics**
+ [資產](#welcome-concepts-asset)
+ [網域](#welcome-concepts-domain)
+ [儲存庫](#welcome-concepts-repository)
+ [套件](#welcome-concepts-package)
+ [套件群組](#welcome-concepts-package-group)
+ [套件命名空間](#welcome-concepts-package-namespace)
+ [套件版本](#welcome-concepts-package-version)
+ [套件版本修訂](#welcome-concepts-package-version-revision)
+ [上游儲存庫](#welcome-concepts-upstream)

## 資產
<a name="welcome-concepts-asset"></a>

*資產*是存放在 CodeArtifact 中的個別檔案，與套件版本相關聯，例如 npm `.tgz` 檔案或 Maven POM 和 JAR 檔案。

## 網域
<a name="welcome-concepts-domain"></a>

儲存庫會彙總到稱為*網域*的更高層級實體。所有套件資產和中繼資料都會存放在網域中，但會透過儲存庫使用。指定的套件資產，例如 Maven JAR 檔案，會為每個網域儲存一次，無論它存在於多少儲存庫。網域中的所有資產和中繼資料都會使用存放在 AWS KMS key () 中的相同 AWS Key Management Service (KMS 金鑰） 進行加密AWS KMS。

每個儲存庫都是單一網域的成員，無法移至不同的網域。

您可以使用網域，將組織政策套用至多個儲存庫。透過此方法，您可以判斷哪些帳戶可以存取網域中的儲存庫，以及哪些公有儲存庫可以用作套件的來源。

雖然組織可以有多個網域，但我們建議使用包含所有已發佈成品的單一生產網域。如此一來，團隊就可以在您的組織中尋找和共用套件。

## 儲存庫
<a name="welcome-concepts-repository"></a>

CodeArtifact *儲存庫*包含一組[套件版本](#welcome-concepts-package-version)，每個版本都會對應至一組[資產](#welcome-concepts-asset)。儲存庫是多邊形 - 單一儲存庫可包含任何支援類型的套件。每個儲存庫都會公開端點，以使用 nuget CLI、npm CLI、Maven CLI (mvn) 和 pip 等工具來擷取和發佈套件。每個網域最多可以建立 1，000 個儲存庫。

## 套件
<a name="welcome-concepts-package"></a>

*套件*是軟體和中繼資料的套件，這些中繼資料是解析相依性和安裝軟體所需的。在 CodeArtifact 中，套件包含套件名稱、選用[的命名空間](#welcome-concepts-package-namespace)，例如 `@types`中的 `@types/node`、一組套件版本，以及套件層級中繼資料，例如 npm 標籤。

AWS CodeArtifact 支援[貨運](using-cargo.md)、[一般](using-generic.md)、[Maven](using-maven.md)、[npm](using-npm.md)、[NuGet](using-nuget.md)、[PyPI](using-python.md)、[Ruby](using-ruby.md)、[Swift](using-swift.md) 套件格式。

## 套件群組
<a name="welcome-concepts-package-group"></a>

*套件群組*可用於使用套件格式、套件命名空間和套件名稱，將組態套用至符合已定義模式的多個套件。您可以使用套件群組，更方便地設定多個套件的套件原始伺服器控制。套件原始伺服器控制用於封鎖或允許擷取或發佈新的套件版本，以保護使用者免受稱為相依性替代攻擊的惡意動作。

## 套件命名空間
<a name="welcome-concepts-package-namespace"></a>

有些套件格式支援階層式套件名稱，可將套件組織成邏輯群組，並協助避免名稱衝突。例如，npm 支援範圍。如需詳細資訊，請參閱 [npm 範圍文件](https://docs.npmjs.com/cli/v7/using-npm/scope)。npm 套件的範圍`@types/node`為 `@types`，名稱為 `node`。`@types` 範圍內還有許多其他套件名稱。在 CodeArtifact 中，範圍 (「類型」) 稱為套件命名空間，而名稱 (「節點」) 稱為套件名稱。對於 Maven 套件，套件命名空間對應至 Maven groupID。Maven 套件`org.apache.logging.log4j:log4j`的 groupID （套件命名空間） 為 `org.apache.logging.log4j`，而 artifactID （套件名稱） 為 `log4j`。對於一般套件，需要[命名空間](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PublishPackageVersion.html#namespace)。有些 PyPI 等套件格式不支援階層式名稱，其概念類似於 npm 範圍或 Maven groupID。如果沒有將套件名稱分組的方法，可能更難避免名稱衝突。

## 套件版本
<a name="welcome-concepts-package-version"></a>

*套件版本*可識別套件的特定版本，例如 `@types/node 12.6.9`。版本編號格式和語意因不同的套件格式而異。例如，npm 套件版本必須符合[語意版本控制規格](https://semver.org/)。在 CodeArtifact 中，套件版本包含版本識別符、套件版本層級中繼資料和一組資產。

## 套件版本修訂
<a name="welcome-concepts-package-version-revision"></a>

 *套件版本修訂*是一種字串，可識別套件版本的特定資產和中繼資料集。每次更新套件版本時，都會建立新的套件版本修訂。例如，您可以發佈 Python 套件版本的來源分佈封存 (**sdist**)，稍後再將包含編譯程式碼的 Python **滾輪**新增至相同版本。當您發佈 **wheel** 時，會建立新的套件版本修訂。

## 上游儲存庫
<a name="welcome-concepts-upstream"></a>

當可從下游儲存庫的儲存庫端點存取其中的套件版本時，一個儲存庫位於另一個儲存庫的*上游*。此方法可從用戶端的角度有效地合併兩個儲存庫的內容。使用 CodeArtifact，您可以在兩個儲存庫之間建立上游關係。