

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

# 配置和使用 Cargo CodeArtifact
<a name="configure-use-cargo"></a>

你可以使用 Cargo 从 CodeArtifact 存储库发布和下载板条箱，也可以从 Rust 社区的箱子注册表 crates [.io 中获取板条箱。](https://crates.io/)本主题介绍如何将 Cargo 配置为使用存储库进行身份验证和使用 CodeArtifact 存储库。

## 使用配置货物 CodeArtifact
<a name="configure-cargo"></a>

要使用 Cargo 从中安装和发布板条箱 AWS CodeArtifact，您需要使用 CodeArtifact 存储库信息对其进行配置。按照以下过程之一中的步骤使用您的 CodeArtifact 存储库端点信息和凭据配置 Cargo。

### 按照控制台说明配置 Cargo
<a name="configure-cargo-console"></a>

您可以使用控制台中的配置说明将 Cargo 连接到您的 CodeArtifact 存储库。控制台说明提供了为您的 CodeArtifact 仓库定制的 Cargo 配置。您可以使用此自定义配置来设置 Cargo，而无需查找和填写您的 CodeArtifact 信息。

1. 打开 AWS CodeArtifact 控制台，网址为[https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home)。

1. 在导航窗格中，选择**存储库**，然后选择要连接到 Cargo 的存储库。

1. 选择**查看连接说明**。

1. 选择操作系统。

1. 选择 **Cargo**。

1. 按照生成的说明将 Cargo 连接到您的 CodeArtifact 存储库。

### 手动配置 Cargo
<a name="configure-cargo-manual"></a>

如果您无法或不想使用控制台中的配置说明，则可以按照以下说明手动将 Cargo 连接到您的 CodeArtifact 存储库。

------
#### [ macOS and Linux ]

要使用配置 Cargo CodeArtifact，您需要在 Cargo 配置中将存储 CodeArtifact 库定义为注册表并提供凭据。
+ {{my\_registry}}用您的注册表名称替换。
+ {{my\_domain}}用您的 CodeArtifact 域名替换。
+ {{111122223333}}替换为域名所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库，则无需包括 `--domain-owner`。有关更多信息，请参阅 [Cross-account 域](domain-overview.md#domain-overview-cross-account)。
+ {{my\_repo}}替换为您的 CodeArtifact 存储库名称。

复制配置以将 Cargo 程序包发布并下载到您的存储库，然后将其保存到 `~/.cargo/config.toml` 文件（对于系统级配置）或 `.cargo/config.toml`（对于项目级配置）：

```
[registries.{{my_registry}}]
index = "sparse+https://{{my_domain}}-{{111122223333}}.d.codeartifact.{{us-west-2}}.amazonaws.com/cargo/{{my_repo}}/"
credential-provider = "cargo:token-from-stdout aws codeartifact get-authorization-token --domain {{my_domain}} --domain-owner {{111122223333}} --region {{us-west-2}} --query authorizationToken --output text"

[registry]
default = "{{my_registry}}"

[source.crates-io]
replace-with = "{{my_registry}}"
```

------
#### [ Windows: Download packages only ]

要使用配置 Cargo CodeArtifact，您需要在 Cargo 配置中将存储 CodeArtifact 库定义为注册表并提供凭据。
+ {{my\_registry}}用您的注册表名称替换。
+ {{my\_domain}}用您的 CodeArtifact 域名替换。
+ {{111122223333}}替换为域名所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库，则无需包括 `--domain-owner`。有关更多信息，请参阅 [Cross-account 域](domain-overview.md#domain-overview-cross-account)。
+ {{my\_repo}}替换为您的 CodeArtifact 存储库名称。

复制配置以仅从您的存储库下载 Cargo 程序包，然后将其保存到 `%USERPROFILE%\.cargo\config.toml` 文件（对于系统级配置）或 `.cargo\config.toml`（对于项目级配置）：

```
[registries.{{my_registry}}]
index = "sparse+https://{{my_domain}}-{{111122223333}}.d.codeartifact.{{us-west-2}}.amazonaws.com/cargo/{{my_repo}}/"
credential-provider = "cargo:token-from-stdout aws codeartifact get-authorization-token --domain {{my_domain}} --domain-owner {{111122223333}} --region {{us-west-2}} --query authorizationToken --output text"

[registry]
default = "{{my_registry}}"

[source.crates-io]
replace-with = "{{my_registry}}"
```

------
#### [ Windows: Publish and download packages ]

1. 要使用配置 Cargo CodeArtifact，您需要在 Cargo 配置中将存储 CodeArtifact 库定义为注册表并提供凭据。
   + {{my\_registry}}用您的注册表名称替换。
   + {{my\_domain}}用您的 CodeArtifact 域名替换。
   + {{111122223333}}替换为域名所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库，则无需包括 `--domain-owner`。有关更多信息，请参阅 [Cross-account 域](domain-overview.md#domain-overview-cross-account)。
   + {{my\_repo}}替换为您的 CodeArtifact 存储库名称。

   复制配置以将 Cargo 程序包发布并下载到您的存储库，然后将其保存到 `%USERPROFILE%\.cargo\config.toml` 文件（对于系统级配置）或 `.cargo\config.toml`（对于项目级配置）。

   建议使用凭证提供程序 `cargo:token`，该提供程序使用存储在 `~/.cargo/credentials.toml` 文件中的凭证。如果您使用 `cargo:token-from-stdout`，在 `cargo publish` 期间可能会遇到错误，因为 Cargo 客户端在 `cargo publish` 期间未正确修剪授权令牌。

   ```
   [registries.{{my_registry}}]
   index = "sparse+https://{{my_domain}}-{{111122223333}}.d.codeartifact.{{us-west-2}}.amazonaws.com/cargo/{{my_repo}}/"
   credential-provider = "cargo:token"
   
   [registry]
   default = "{{my_registry}}"
   
   [source.crates-io]
   replace-with = "{{my_registry}}"
   ```

1. 要使用 Windows 将 Cargo 软件包发布到存储库，必须使用 CodeArtifact `get-authorization-token`命令和 Cargo `login` 命令来获取授权令牌和您的凭据。
   + {{my\_registry}}替换为中定义的注册表名称`[registries.{{my_registry}}]`。
   + {{my\_domain}}用您的 CodeArtifact 域名替换。
   + {{111122223333}}替换为域名所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库，则无需包括 `--domain-owner`。有关更多信息，请参阅 [Cross-account 域](domain-overview.md#domain-overview-cross-account)。

   ```
   aws codeartifact get-authorization-token --domain {{my_domain}} --domain-owner {{111122223333}} --region {{us-west-2}} --query authorizationToken --output text | cargo login --registry {{my_registry}}
   ```
**注意**  
生成的授权令牌有效期为 12 小时。如果自创建令牌以来已过去 12 小时，则需要创建一个新的令牌。

------

前面示例中的 `[registries.{{my_registry}}]` 部分定义了一个包含 `{{my_registry}}` 并提供 `index` 和 `credential-provider` 信息的注册表。
+ `index`为您的注册表指定索引的 URL，这是以结尾的 CodeArtifact 存储库端点`/`。对于不是 Git 存储库的注册表，需要使用 `sparse+` 前缀。
**注意**  
要使用双堆栈端点，请使用 `codeartifact.{{region}}.on.aws` 端点。
+ `credential-provider` 指定给定注册表的凭证提供程序。如果未设置 `credential-provider`，则将使用 `registry.global-credential-providers` 中的提供程序。如果设置`credential-provider`为`cargo:token-from-stdout`，Cargo 客户端将在发布或从 CodeArtifact 存储库下载时自动获取新的授权令牌，因此您无需每 12 小时手动刷新授权令牌。

`[registry]` 部分定义了使用的默认注册表。
+ `default`指定中定义的注册表的名称`[registries.{{my_registry}}]`，在发布或从 CodeArtifact 存储库下载时，默认使用该名称。

`[source.crates-io]` 部分定义了未指定注册表时使用的默认注册表。
+ `replace-with = "{{my_registry}}"`将公共注册表 crates.io 替换为中定义的存储 CodeArtifact 库。`[registries.{{my_registry}}]`如果您需要从外部连接（例如 crates.io）请求程序包，则建议采用此配置。

  要获得的所有好处 CodeArtifact，例如防止依赖混淆攻击的软件包起源控制，建议您使用源代码替换。使用源替换时， CodeArtifact 代理外部连接的所有请求，并将软件包从外部连接复制到您的存储库。如果不使用源代码替换，Cargo 客户端将根据项目的 `Cargo.toml` 文件中的配置直接检索程序包。如果依赖项未标记`registry={{my_registry}}`，则 Cargo 客户端将直接从 crates.io 中检索依赖关系，无需与您的存储库通信。 CodeArtifact 
**注意**  
如果您最初使用源代码替换，但更新配置文件后不使用源代码替换，则可能会遇到错误。相反的情况也可能会导致错误。因此，建议避免更改项目的配置。

## 安装 Cargo crate
<a name="install-cargo-crates"></a>

使用以下过程从 CodeArtifact 存储库或 crates.io 中安装 Cargo [板条箱](https://crates.io/)。

### 从中安装货箱 CodeArtifact
<a name="install-cargo-crates-aca"></a>

你可以使用 Cargo (`cargo`) CLI 从 CodeArtifact 仓库中快速安装特定版本的 Cargo crate。

**`从装有货物的 CodeArtifact 仓库中安装货箱`**

1. 如果还没有，请按照中的步骤[配置和使用 Cargo CodeArtifact](#configure-use-cargo)将 `cargo` CLI 配置为使用具有正确凭据的 CodeArtifact 仓库。

1. 使用以下命令从 CodeArtifact以下位置安装货箱：

   ```
   cargo add my_cargo_package@{{1.0.0}}
   ```

   有关更多信息，请参阅《The Cargo Book》**中的 [cargo add](https://doc.rust-lang.org/cargo/commands/cargo-add.html)。

## 将货箱发布到 CodeArtifact
<a name="publish-cargo-crates"></a>

使用以下步骤使用 C `cargo` LI 将 Crago 箱子发布到 CodeArtifact 仓库。

1. 如果还没有，请按照中的步骤[配置和使用 Cargo CodeArtifact](#configure-use-cargo)将 `cargo` CLI 配置为使用具有正确凭据的 CodeArtifact 仓库。

1. 使用以下命令将 Cargo 箱子发布到 CodeArtifact 存储库：

   ```
   cargo publish
   ```

   有关更多信息，请参阅《The Cargo Book》**中的 [cargo publish](https://doc.rust-lang.org/cargo/commands/cargo-publish.html)。