

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Uso de CodeArtifact con Cargo
<a name="using-cargo"></a>

Estos temas describen cómo usar Cargo, el administrador de paquetes Rust, con CodeArtifact.

**nota**  
CodeArtifact solo es compatible con Cargo 1.74.0 y versiones posteriores. Cargo 1.74.0 es la primera versión que admite la autenticación en un repositorio de CodeArtifact.

**Topics**
+ [Configuración y uso de Cargo](configure-use-cargo.md)
+ [Compatibilidad con comandos de Cargo](cargo-commands.md)

# Configuración y uso de Cargo con CodeArtifact
<a name="configure-use-cargo"></a>

Cargo puede utilizarse para publicar y descargar cajas desde repositorios de CodeArtifact o para obtener cajas de [crates.io](https://crates.io/), el registro de cajas de la comunidad de Rust. En este tema, se describe cómo configurar Cargo para que se autentique y use un repositorio de CodeArtifact.

## Configuración de Cargo con CodeArtifact
<a name="configure-cargo"></a>

Para usar Cargo a fin de instalar y publicar cajas desde AWS CodeArtifact, primero tiene que configurarlas con la información del repositorio de CodeArtifact. Siga los pasos de alguno de los siguientes procedimientos para configurar Cargo con la información y las credenciales del punto de conexión del repositorio de CodeArtifact.

### Configuración de Cargo con las instrucciones de la consola
<a name="configure-cargo-console"></a>

Puede usar las instrucciones de configuración de la consola para conectar Cargo a su repositorio de CodeArtifact. Las instrucciones de la consola brindan una configuración de Cargo personalizada para el repositorio de CodeArtifact. Puede emplear esta configuración personalizada para configurar Cargo sin tener que buscar ni introducir la información de CodeArtifact.

1. Abra la consola de AWS CodeArtifact en [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home).

1. En el panel de navegación, seleccione **Repositorios** y, después, elija uno para conectarlo a Cargo.

1. Seleccione **Ver instrucciones de conexión**.

1. Elija su sistema operativo.

1. Seleccione **Cargo**.

1. Siga las instrucciones generadas para conectar Cargo a su repositorio de CodeArtifact.

### Configuración manual de Cargo
<a name="configure-cargo-manual"></a>

Si no puede o no quiere usar las instrucciones de configuración de la consola, puede recurrir a las siguientes instrucciones para conectar Cargo al repositorio de CodeArtifact manualmente. 

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

Para configurar Cargo con CodeArtifact, debe definir el repositorio de CodeArtifact como registro en la configuración de Cargo y facilitar las credenciales.
+ Sustituya *my\$1registry* por el nombre del registro en cuestión.
+ Sustituya *my\$1domain* por su nombre de dominio de CodeArtifact.
+ Sustituya *111122223333* por el ID de la cuenta de AWS del propietario del dominio. Si va a acceder a un repositorio de un dominio de su propiedad, no tiene que incluir `--domain-owner`. Para obtener más información, consulte [Dominios entre cuentas](domain-overview.md#domain-overview-cross-account).
+ Sustituya *my\$1repo* por el nombre de su repositorio de CodeArtifact.

Copie la configuración para publicar y descargar los paquetes Cargo en el repositorio y guárdela en el archivo `~/.cargo/config.toml` para una configuración a nivel de sistema o en `.cargo/config.toml` para una configuración a nivel de proyecto:

```
[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 ]

Para configurar Cargo con CodeArtifact, debe definir el repositorio de CodeArtifact como registro en la configuración de Cargo y facilitar las credenciales.
+ Sustituya *my\$1registry* por el nombre del registro en cuestión.
+ Sustituya *my\$1domain* por su nombre de dominio de CodeArtifact.
+ Sustituya *111122223333* por el ID de la cuenta de AWS del propietario del dominio. Si va a acceder a un repositorio de un dominio de su propiedad, no tiene que incluir `--domain-owner`. Para obtener más información, consulte [Dominios entre cuentas](domain-overview.md#domain-overview-cross-account).
+ Sustituya *my\$1repo* por el nombre de su repositorio de CodeArtifact.

Copie la configuración para descargar los paquetes Cargo desde el repositorio y guárdela en el archivo `%USERPROFILE%\.cargo\config.toml` para una configuración a nivel de sistema o en `.cargo\config.toml` para una configuración a nivel de proyecto:

```
[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. Para configurar Cargo con CodeArtifact, debe definir el repositorio de CodeArtifact como registro en la configuración de Cargo y facilitar las credenciales.
   + Sustituya *my\$1registry* por el nombre del registro en cuestión.
   + Sustituya *my\$1domain* por su nombre de dominio de CodeArtifact.
   + Sustituya *111122223333* por el ID de la cuenta de AWS del propietario del dominio. Si va a acceder a un repositorio de un dominio de su propiedad, no tiene que incluir `--domain-owner`. Para obtener más información, consulte [Dominios entre cuentas](domain-overview.md#domain-overview-cross-account).
   + Sustituya *my\$1repo* por el nombre de su repositorio de CodeArtifact.

   Copie la configuración para publicar y descargar los paquetes Cargo al repositorio y guárdela en el archivo `%USERPROFILE%\.cargo\config.toml` para una configuración a nivel de sistema o en `.cargo\config.toml` para una configuración a nivel de proyecto.

   Se recomienda utilizar el proveedor de credenciales `cargo:token`, que utiliza las credenciales almacenadas en el archivo `~/.cargo/credentials.toml`. Si usa `cargo:token-from-stdout`, es probable que ocurran errores durante `cargo publish`. El motivo es que el cliente Cargo no recorta el token de autorización correctamente durante `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. Si quiere publicar paquetes Cargo en el repositorio con Windows, debe usar el comando `get-authorization-token` de CodeArtifact y el comando `login` de Cargo para obtener un token de autorización y las credenciales.
   + Sustituya *my\$1registry* por el nombre del registro definido en `[registries.my_registry]`.
   + Sustituya *my\$1domain* por su nombre de dominio de CodeArtifact.
   + Sustituya *111122223333* por el ID de la cuenta de AWS del propietario del dominio. Si va a acceder a un repositorio de un dominio de su propiedad, no tiene que incluir `--domain-owner`. Para obtener más información, consulte [Dominios entre cuentas](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
   ```
**nota**  
El token de autorización generado es válido durante 12 horas. Deberá crear uno nuevo si han pasado 12 horas desde que se creó el token.

------

La sección `[registries.my_registry]` del ejemplo anterior define un registro con `my_registry` y brinda información sobre `index` y `credential-provider`.
+ `index` especifica la URL del índice del registro, que es el punto de conexión del repositorio de CodeArtifact que termina por `/`. El prefijo `sparse+` es obligatorio para los registros que no son repositorios Git.
**nota**  
Si quiere utilizar un punto de conexión de pila doble, use el punto de conexión `codeartifact.region.on.aws`.
+ `credential-provider` especifica el proveedor de credenciales para el registro en cuestión. Si no se ha definido `credential-provider`, se utilizarán los proveedores incluidos en `registry.global-credential-providers`. Al configurar `credential-provider` como `cargo:token-from-stdout`, el cliente Cargo obtendrá el token de autorización nuevo automáticamente cuando se publique o se descargue desde el repositorio de CodeArtifact. Por tanto, no tendrá que actualizar manualmente el token de autorización cada 12 horas.

La sección `[registry]` define el registro predeterminado utilizado.
+ `default` especifica el nombre del registro definido en `[registries.my_registry]`, que se utilizará de forma predeterminada al publicar o descargar desde el repositorio de CodeArtifact.

La sección `[source.crates-io]` define el registro predeterminado utilizado cuando no se ha especificado ninguno.
+ `replace-with = "my_registry"` reemplaza el registro público (crates.io) por el repositorio de CodeArtifact definido en `[registries.my_registry]`. Esta configuración se recomienda si necesita solicitar paquetes desde una conexión externa, como crates.io.

  Para sacar el máximo partido a las funciones de CodeArtifact, como el control del origen de los paquetes que evita los ataques de confusión de dependencias, se recomienda utilizar el reemplazo del origen. Con el reemplazo del origen, CodeArtifact actúa como proxy para todas las solicitudes a la conexión externa y copia el paquete de la conexión externa a su repositorio. Si no se reemplaza el origen, el cliente Cargo recupera el paquete directamente en función de la configuración del archivo `Cargo.toml` del proyecto. Si una dependencia no está marcada con `registry=my_registry`, el cliente Cargo la recuperará directamente de crates.io sin comunicarse con el repositorio de CodeArtifact.
**nota**  
Es posible que se produzcan errores si empieza a usar el reemplazo del origen y, después, actualiza el archivo de configuración para que no se utilice esta opción. La situación opuesta también puede causar errores. Por lo tanto, se recomienda evitar modificar la configuración del proyecto.

## Instalación de cajas de Cargo
<a name="install-cargo-crates"></a>

Utilice los siguientes procedimientos para instalar cajas de Cargo desde un repositorio de CodeArtifact o desde [crates.io](https://crates.io/).

### Instalación de cajas de Cargo desde CodeArtifact
<a name="install-cargo-crates-aca"></a>

Puede usar la CLI de Cargo (`cargo`) para instalar rápidamente una versión específica de una caja de Cargo desde su repositorio de CodeArtifact.

**Cómo instalar cajas de Cargo desde un repositorio de CodeArtifact con `cargo`**

1. Si no lo ha hecho, siga los pasos de [Configuración y uso de Cargo con CodeArtifact](#configure-use-cargo) para configurar la CLI de `cargo` y usar su repositorio de CodeArtifact con las credenciales adecuadas.

1. Utilice el siguiente comando para instalar cajas de Cargo desde CodeArtifact:

   ```
   cargo add my_cargo_package@1.0.0
   ```

   Para obtener más información, consulte el apartado [cargo add](https://doc.rust-lang.org/cargo/commands/cargo-add.html) de *The Cargo Book*.

## Publicación de cajas de Cargo en CodeArtifact
<a name="publish-cargo-crates"></a>

Utilice el siguiente procedimiento para publicar cajas de Cargo en un repositorio de CodeArtifact con la CLI de `cargo`.

1. Si no lo ha hecho, siga los pasos de [Configuración y uso de Cargo con CodeArtifact](#configure-use-cargo) para configurar la CLI de `cargo` y usar su repositorio de CodeArtifact con las credenciales adecuadas.

1. Utilice el siguiente comando para publicar cajas de Cargo en un repositorio de CodeArtifact:

   ```
   cargo publish
   ```

   Para obtener más información, consulte el apartado [cargo publish](https://doc.rust-lang.org/cargo/commands/cargo-publish.html) de *The Cargo Book*.

# Compatibilidad con comandos de Cargo
<a name="cargo-commands"></a>

En las siguientes secciones se resumen los comandos de Cargo que admiten los CodeArtifact repositorios, además de los comandos específicos que no son compatibles.

**Contents**
+ [Comandos compatibles que requieren acceder al registro](#supported-commands-access-the-registry)
+ [Comandos no admitidos](#unsupported-commands)

## Comandos compatibles que requieren acceder al registro
<a name="supported-commands-access-the-registry"></a>

En esta sección se enumeran los comandos de Cargo para los que el cliente de Cargo necesita acceso al registro con el que se ha configurado. Se ha comprobado que estos comandos funcionan correctamente cuando se invocan en un CodeArtifact repositorio.


****  

| Comando | Description (Descripción) | 
| --- | --- | 
|   [build](https://doc.rust-lang.org/cargo/commands/cargo-build.html)   |  Crea paquetes locales y sus dependencias.  | 
|   [check](https://doc.rust-lang.org/cargo/commands/cargo-check.html)   |  Comprueba si hay errores en los paquetes locales y sus dependencias.  | 
|   [fetch](https://doc.rust-lang.org/cargo/commands/cargo-fetch.html)   |  Recupera las dependencias de un paquete.  | 
|   [publish](https://doc.rust-lang.org/cargo/commands/cargo-publish.html)   |  Publica un paquete en el registro.  | 

## Comandos no admitidos
<a name="unsupported-commands"></a>

Los CodeArtifact repositorios no admiten estos comandos de Cargo.


****  

| Comando | Description (Descripción) | 
| --- | --- | 
|   [owner](https://doc.rust-lang.org/cargo/commands/cargo-owner.html)   |  Administra los propietarios de la caja en el registro.  | 
|   [search](https://doc.rust-lang.org/cargo/commands/cargo-search.html)   |  Busca paquetes en el registro.  | 