

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

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

 以下是您在使用时需要了解的一些概念和术语 CodeArtifact。

**Topics**
+ [资产](#welcome-concepts-asset)
+ [域：](#welcome-concepts-domain)
+ [Repository](#welcome-concepts-repository)
+ [程序包](#welcome-concepts-package)
+ [程序包组](#welcome-concepts-package-group)
+ [程序包命名空间](#welcome-concepts-package-namespace)
+ [Package 版本](#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 （KMS 密钥）进行加密。 AWS Key Management Service AWS KMS

每个存储库都是单个域的成员，不能移动到另一个域。

借助域，您可以将组织策略应用于多个存储库。通过这种方法，您可以确定哪些账户可以访问域中的存储库，以及哪些公有存储库可以用作程序包的来源。

尽管一个组织可以有多个域，但我们建议使用一个包含所有已发布构件的生产域。这样，团队就可以找到和共享整个组织中的程序包。

## Repository
<a name="welcome-concepts-repository"></a>

 CodeArtifact *存储库*包含一组[软件包版本](#welcome-concepts-package-version)，每个版本都映射到一组[资源](#welcome-concepts-asset)。存储库是多种语言的，单个存储库可以包含任何受支持类型的程序包。每个存储库都公开端点，用于使用 nuget CLI、npm CLI、Maven CLI (mvn) 和 pip 等工具来提取和发布程序包。您最多可以为每个域创建 1000 个存储库。

## 程序包
<a name="welcome-concepts-package"></a>

*程序包* 是解析依赖关系和安装软件所需的软件和元数据的捆绑包。在中 CodeArtifact，软件包由软件包名称、可选[命名空间](#welcome-concepts-package-namespace)（如`@types`在）`@types/node`、一组软件包版本以及包级元数据（例如 npm 标签）组成。

AWS CodeArtifact [[支持 C [argo、g](using-cargo.md) enerial、[Maven](using-maven.md)、[npm](using-npm.md)、、[NuGet](using-nuget.md)p [yPI、[Ruby](using-ruby.md)、Sw](using-python.md) ift 包格式。](using-swift.md)](using-generic.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 的分层名称。如果无法对程序包名称进行分组，则可能更难避免名称冲突。

## Package 版本
<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** 添加到同一个版本中。当您发布 **wheel** 时，会创建一个新的程序包版本修订。

## 上游存储库
<a name="welcome-concepts-upstream"></a>

当可以从下游存储库的存储库端点访问其中的程序包版本时，则一个存储库位于另一个存储库的*上游*。从客户的角度来看，这种方法有效地合并了两个存储库的内容。使用 CodeArtifact，可以在两个存储库之间创建上游关系。