CodeArtifact で Cargo を設定して使用する - CodeArtifact

CodeArtifact で Cargo を設定して使用する

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

CodeArtifact で Cargo を設定する

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

コンソールの手順を使用して Cargo を設定する

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

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

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

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

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

  5. [Cargo] を選択します。

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

手動で Cargo を設定する

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

macOS and Linux

CodeArtifact で Cargo を設定するには、CodeArtifact リポジトリを Cargo 設定のレジストリとして定義し、認証情報を指定する必要があります。

  • my_registry をレジストリ名に置き換えます。

  • my_domain を CodeArtifact ドメイン名に置き換えます。

  • 111122223333 をAWS ドメインの所有者のアカウント ID に置き換えます。所有しているドメインのリポジトリにアクセスする場合は、--domain-owner を含める必要はありません。詳細については、「クロスアカウントドメイン」を参照してください。

  • 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 を含める必要はありません。詳細については、「クロスアカウントドメイン」を参照してください。

  • 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 を含める必要はありません。詳細については、「クロスアカウントドメイン」を参照してください。

    • 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"
  2. Windows でリポジトリに Cargo パッケージを公開するには、CodeArtifact get-authorization-token コマンドと Cargo login コマンドを使用して認可トークンと認証情報を取得する必要があります。

    • my_registry を、[registries.my_registry] で定義されているレジストリ名に置き換えます。

    • my_domain を CodeArtifact ドメイン名に置き換えます。

    • 111122223333 をAWS ドメインの所有者のアカウント ID に置き換えます。所有しているドメインのリポジトリにアクセスする場合は、--domain-owner を含める必要はありません。詳細については、「クロスアカウントドメイン」を参照してください。

    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-providercargo: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 クレートのインストール

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

CodeArtifact から Cargo クレートをインストールする

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

cargo を使用して CodeArtifact リポジトリから Cargo クレートをインストールする方法
  1. まだ cargo CLI を設定していない場合は、「CodeArtifact で Cargo を設定して使用する」の手順に従って、CodeArtifact リポジトリを使用するように適切な認証情報を使用して設定します。

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

    cargo add my_cargo_package@1.0.0

    詳細については、「The Cargo Book」の「cargo add」を参照してください。

CodeArtifact への Cargo クレートの公開

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

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

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

    cargo publish

    詳細については、「The Cargo Book」の「cargo publish」を参照してください。