

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# CodeArtifact で Cargo を設定して使用する
<a name="configure-use-cargo"></a>

Cargo を使用して、CodeArtifact リポジトリからクレートを公開およびダウンロードしたり、Rust コミュニティのクレートレジストリである [crates.io](https://crates.io/) からクレートを取得したりできます。このトピックでは、CodeArtifact リポジトリの認証と使用のために Cargo を設定する方法について説明します。

## CodeArtifact で Cargo を設定する
<a name="configure-cargo"></a>

Cargo を使用して AWS CodeArtifact からクレートをインストールして公開するには、まず CodeArtifact リポジトリ情報を使用してクレートを設定する必要があります。次のいずれかの手順に沿って、CodeArtifact リポジトリのエンドポイント情報と認証情報を使用して Cargo を設定します。

### コンソールの手順を使用して Cargo を設定する
<a name="configure-cargo-console"></a>

コンソールの設定手順を使用して、Cargo を CodeArtifact リポジトリに接続できます。コンソールの手順では、お使いの CodeArtifact リポジトリ用にカスタマイズされた Cargo 設定を提供します。このカスタム設定を使用すれば、CodeArtifact 情報を検索して入力する必要なく、Cargo をセットアップできます。

1. [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home) で AWS CodeArtifact コンソールを開きます。

1. ナビゲーションペインで、**[リポジトリ]** を選択し、Cargo に接続するリポジトリを選びます。

1. **[接続手順の表示]** を選択します。

1. オペレーティングシステムを選択します。

1. **[Cargo]** を選択します。

1. 生成された手順に沿って、Cargo を CodeArtifact リポジトリに接続します。

### 手動で Cargo を設定する
<a name="configure-cargo-manual"></a>

コンソールの設定手順を使用できない場合、または使用しない場合は、次の手順を使用して、手動で Cargo を CodeArtifact リポジトリに接続できます。

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

CodeArtifact で Cargo を設定するには、CodeArtifact リポジトリを Cargo 設定のレジストリとして定義し、認証情報を指定する必要があります。
+ {{my\_registry}} をレジストリ名に置き換えます。
+ {{my\_domain}} を CodeArtifact ドメイン名に置き換えます。
+ {{111122223333}} をAWS ドメインの所有者のアカウント ID に置き換えます。所有しているドメインのリポジトリにアクセスする場合は、`--domain-owner` を含める必要はありません。詳細については、「[クロスアカウントドメイン](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 ]

CodeArtifact で Cargo を設定するには、CodeArtifact リポジトリを Cargo 設定のレジストリとして定義し、認証情報を指定する必要があります。
+ {{my\_registry}} をレジストリ名に置き換えます。
+ {{my\_domain}} を CodeArtifact ドメイン名に置き換えます。
+ {{111122223333}} をAWS ドメインの所有者のアカウント ID に置き換えます。所有しているドメインのリポジトリにアクセスする場合は、`--domain-owner` を含める必要はありません。詳細については、「[クロスアカウントドメイン](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. CodeArtifact で Cargo を設定するには、CodeArtifact リポジトリを Cargo 設定のレジストリとして定義し、認証情報を指定する必要があります。
   + {{my\_registry}} をレジストリ名に置き換えます。
   + {{my\_domain}} を CodeArtifact ドメイン名に置き換えます。
   + {{111122223333}} をAWS ドメインの所有者のアカウント ID に置き換えます。所有しているドメインのリポジトリにアクセスする場合は、`--domain-owner` を含める必要はありません。詳細については、「[クロスアカウントドメイン](domain-overview.md#domain-overview-cross-account)」を参照してください。
   + {{my\_repo}} を CodeArtifact リポジトリ名で置き換えます。

   設定をコピーして、Cargo パッケージをリポジトリに公開してダウンロードし、`%USERPROFILE%\.cargo\config.toml` ファイル (システム単位の設定の場合) または `.cargo\config.toml` (プロジェクト単位の設定の場合) に保存します。

   `~/.cargo/credentials.toml` ファイルに保存されている認証情報を使用する、認証情報プロバイダー `cargo:token` を使用することをお勧めします。Cargo クライアントが `cargo publish` 中に認可トークンを適切にトリミングしないため、`cargo:token-from-stdout` を使用すると `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` を含める必要はありません。詳細については、「[クロスアカウントドメイン](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 リポジトリのエンドポイントです。`sparse+` プレフィックスは、Git リポジトリではないレジストリに必要です。
**注記**  
デュアルスタックエンドポイントを使用するには、`codeartifact.{{region}}.on.aws` エンドポイントを使用してください。
+ `credential-provider` は、指定レジストリの認証情報プロバイダーを指定します。`credential-provider` が設定されていない場合は、`registry.global-credential-providers` のプロバイダーが使用されます。`credential-provider` を `cargo:token-from-stdout` に設定することで、Cargo クライアントは、CodeArtifact リポジトリから公開またはダウンロードするときに新しい認可トークンを自動的に取得するため、12 時間ごとに認可トークンを手動で更新する必要はありません。

`[registry]` セクションは、使用するデフォルトのレジストリを定義します。
+ `default` は、CodeArtifact リポジトリから公開またはダウンロードするときにデフォルトで使用する、`[registries.{{my_registry}}]` で定義されたレジストリの名前を指定します。

`[source.crates-io]` セクションは、レジストリが指定されていない場合に使用する、デフォルトのレジストリを定義します。
+ `replace-with = "{{my_registry}}"` は、パブリックレジストリ crates.io を、`[registries.{{my_registry}}]` で定義された CodeArtifact リポジトリに置き換えます。crates.io などの外部接続からパッケージをリクエストする必要がある場合、この設定が推奨されます。

  依存関係撹乱攻撃を防ぐパッケージオリジンコントロールなど、CodeArtifact の利点を最大限に得るには、ソース置換を使用することが推奨されます。ソースを置換する場合、CodeArtifact は、外部接続へのすべてのリクエストをプロキシし、外部接続からリポジトリにパッケージをコピーします。ソースを置換しない場合、Cargo クライアントはプロジェクトの `Cargo.toml` ファイルの設定に基づいてパッケージを直接取得します。依存関係が `registry={{my_registry}}` でマークされていない場合、Cargo クライアントは CodeArtifact リポジトリと通信せずに crates.io から直接取得します。
**注記**  
ソース置換の使用を開始してから、ソース置換を使用しないように設定ファイルを更新すると、エラーが発生する可能性があります。また、逆のシナリオでもエラーが発生する可能性があります。そのため、プロジェクトの設定は変更しないことをお勧めします。

## Cargo クレートのインストール
<a name="install-cargo-crates"></a>

次の手順に沿って、CodeArtifact リポジトリまたは [crates.io](https://crates.io/) から Cargo クレートをインストールします。

### CodeArtifact から Cargo クレートをインストールする
<a name="install-cargo-crates-aca"></a>

Cargo (`cargo`) CLI を使用すると、CodeArtifact リポジトリから特定のバージョンの Cargo クレートをすばやくインストールできます。

**`cargo` を使用して CodeArtifact リポジトリから Cargo クレートをインストールする方法**

1. まだ `cargo` CLI を設定していない場合は、「[CodeArtifact で Cargo を設定して使用する](#configure-use-cargo)」の手順に従って、CodeArtifact リポジトリを使用するように適切な認証情報を使用して設定します。

1. 次のコマンドを使用して、CodeArtifact から Cargo クレートをインストールします。

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

   詳細については、「*The Cargo Book*」の「[cargo add](https://doc.rust-lang.org/cargo/commands/cargo-add.html)」を参照してください。

## CodeArtifact への Cargo クレートの公開
<a name="publish-cargo-crates"></a>

`cargo` CLI を使用して Cargo クレートを CodeArtifact リポジトリに公開するには、次の手順に従います。

1. まだ `cargo` CLI を設定していない場合は、「[CodeArtifact で Cargo を設定して使用する](#configure-use-cargo)」の手順に従って、CodeArtifact リポジトリを使用するように適切な認証情報を使用して設定します。

1. 次のコマンドを使用して、Cargo を CodeArtifact リポジトリに公開します。

   ```
   cargo publish
   ```

   詳細については、「*The Cargo Book*」の「[cargo publish](https://doc.rust-lang.org/cargo/commands/cargo-publish.html)」を参照してください。