

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.

# Solicitar una versión de paquete con repositorios ascendentes
<a name="repo-upstream-behavior"></a>

 Cuando un cliente (por ejemplo, npm) solicita una versión de paquete de un CodeArtifact repositorio denominado `my_repo` que tiene varios repositorios ascendentes, puede ocurrir lo siguiente: 
+  Si `my_repo` contiene la versión del paquete solicitada, se devuelve al cliente. 
+  Si `my_repo` no contiene la versión del paquete solicitada, la CodeArtifact busca en `my_repo` los repositorios originales. Si se encuentra la versión del paquete, se copia una referencia a la misma en `my_repo` y la versión del paquete se devuelve al cliente. 
+  Si `my_repo` ni sus repositorios ascendentes contienen la versión del paquete, se devuelve una respuesta HTTP 404 `Not Found` al cliente.

 Al añadir repositorios ascendentes mediante el comando `create-repository` o `update-repository`, el orden en que se pasan al parámetro `--upstreams` determina su prioridad cuando se solicita una versión de paquete. Especifique los repositorios ascendentes `--upstreams` en el orden en que desee usarlos cuando se CodeArtifact solicite una versión de paquete. Para obtener más información, consulte [Orden de prioridad del repositorio ascendente](repo-upstream-search-order.md). 

 El número máximo de repositorios ascendentes directos permitidos para un repositorio es 10. Como los repositorios ascendentes directos también pueden tener sus propios repositorios ascendentes directos, CodeArtifact pueden buscar versiones de paquetes en más de 10 repositorios. El número máximo de repositorios consultados cuando CodeArtifact se solicita una versión de paquete es 25. 

## Retención de paquetes de repositorios ascendentes
<a name="package-retention-upstream-repos"></a>

 Si la versión de un paquete solicitada se encuentra en un repositorio ascendente, se conserva una referencia a la misma y siempre está disponible en el repositorio descendente. La versión del paquete retenida no se ve afectada por ninguno de los siguientes factores: 
+  Eliminar el repositorio ascendente. 
+  Desconectar el repositorio ascendente del repositorio descendente. 
+  Eliminar la versión del paquete del repositorio ascendente. 
+  Editar la versión del paquete en el repositorio ascendente (por ejemplo, añadiéndole un nuevo activo). 

## Obtener paquetes a través de una relación ascendente
<a name="fetching-packages-through-an-upstream-relationship"></a>

Si un CodeArtifact repositorio tiene una relación ascendente con un repositorio que tiene una conexión externa, las solicitudes de paquetes que no estén en el repositorio ascendente se copian del repositorio externo. Por ejemplo, considere la siguiente configuración: un repositorio denominado `repo-A` tiene un repositorio ascendente denominado. `repo-B` `repo-B`tiene una conexión externa a. [https://npmjs.com](https://npmjs.com)

![Diagrama sencillo de un repositorio ascendente que muestra tres repositorios encadenados.](http://docs.aws.amazon.com/es_es/codeartifact/latest/ug/images/upstream-with-external.png)


Si `npm` está configurado para usar el `repo-A` repositorio, la ejecución `npm install` desencadena la copia de paquetes de [https://npmjs.com](https://npmjs.com)a`repo-B`. También se incluyen las versiones instaladas`repo-A`. El siguiente ejemplo instala `lodash`.

```
$ npm config get registry
https://{{my_domain}}-{{111122223333}}.d.codeartifact.{{us-west-2}}.amazonaws.com/npm/my-downstream-repo/
$ npm install lodash
+ lodash@4.17.20
added 1 package from 2 contributors in 6.933s
```

Después de ejecutarse `npm install`, `repo-A` contiene solo la versión más reciente (`lodash 4.17.20`), ya que es la versión de la que `npm` obtuvo de `repo-A`.

```
aws codeartifact list-package-versions --repository {{repo-A}} --domain {{my_domain}} \
            --domain-owner {{111122223333}} --format {{npm}} --package {{lodash}}
```

Ejemplo de código de salida:

```
{
    "package": "{{lodash}}",
    "format": "{{npm}}",
    "versions": [
        {
            "version": "4.17.15",
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        }
    ]
}
```

 Como `repo-B` tiene una conexión externa a [https://npmjs.com](https://npmjs.com), todas las versiones de los paquetes desde las que se importan se [https://npmjs.com](https://npmjs.com)almacenan en él`repo-B`. Estas versiones de paquetes podrían haber sido recuperadas por cualquier repositorio descendente con una relación ascendente con `repo-B`. 

El contenido de `repo-B` proporciona una forma de ver todos los paquetes y las versiones de los paquetes que se han importado a [https://npmjs.com](https://npmjs.com)lo largo del tiempo. Por ejemplo, para ver todas las versiones del paquete `lodash` importadas a lo largo del tiempo, puede utilizar `list-package-versions` de la siguiente manera.

```
aws codeartifact list-package-versions --repository {{repo-B}} --domain {{my_domain}} \
            --domain-owner {{111122223333}} --format {{npm}} --package {{lodash}} --max-results 5
```

Ejemplo de código de salida:

```
{
    "package": "{{lodash}}",
    "format": "{{npm}}",
    "versions": [
        {
            "version": "0.10.0",
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        },
        {
            "version": "0.2.2",
            "revision": "REVISION-2-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        },
        {
            "version": "0.2.0",
            "revision": "REVISION-3-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        },
        {
            "version": "0.2.1",
            "revision": "REVISION-4-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        },
        {
            "version": "0.1.0",
            "revision": "REVISION-5-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        }
    ],
    "nextToken": "eyJsaXN0UGFja2FnZVZlcnNpb25zVG9rZW4iOiIwLjIuMiJ9"
}
```

## Retención de paquetes en repositorios intermedios
<a name="package-retention-intermediate-repositories"></a>

 CodeArtifact permite encadenar repositorios ascendentes. Por ejemplo, `repo-A` puede tener `repo-B` como un flujo ascendente y `repo-B` puede tener `repo-C` como un flujo ascendente. Esta configuración hace que las versiones del paquete en `repo-B` y `repo-C` estén disponibles de `repo-A`. 

![Diagrama sencillo de un repositorio ascendente que muestra tres repositorios encadenados.](http://docs.aws.amazon.com/es_es/codeartifact/latest/ug/images/upstream-chaining.png)


 Cuando un administrador de paquetes se conecta al repositorio `repo-A` y obtiene una versión del paquete del repositorio `repo-C`, la versión del paquete no se conservará en el repositorio `repo-B`. La versión del paquete solo se conservará en el repositorio más descendente, en este ejemplo, `repo-A`. No se conservará en ningún repositorio intermedio. Esto también es válido para cadenas más largas; por ejemplo, si hubiera cuatro repositorios `repo-A`, `repo-B`, `repo-C` y `repo-D` y un administrador de paquetes conectado a `repo-A` extrajo una versión de paquete de `repo-D`, la versión del paquete se conservaría en `repo-A`, pero no en `repo-B` ni `repo-C`. 

 El comportamiento de retención de paquetes es similar cuando se extrae una versión de paquete de un repositorio externo, excepto que la versión del paquete siempre se conserva en el repositorio que tiene la conexión externa adjunta. Por ejemplo, `repo-A` tiene `repo-B` como flujo ascendente. `repo-B` tiene `repo-C` como conexión ascendente y `repo-C` también tiene **npmjs.com** configurado como una conexión externa; consulte el siguiente diagrama.

![Diagrama de repositorios ascendentes que muestra tres repositorios encadenados entre sí con una conexión externa a npmjs.com.](http://docs.aws.amazon.com/es_es/codeartifact/latest/ug/images/upstream-chaining-external.png)


 Si un administrador de paquetes conectado a `repo-A` solicita una versión de paquete, por ejemplo, *lodash 4.17.20*, y la versión del paquete no está presente en ninguno de los tres repositorios, se obtendrá de **npmjs.com**. Cuando se extraiga *lodash 4.17.20*, se conservará en `repo-A`, ya que es el repositorio más avanzado y `repo-C` ya que tiene conectada la conexión externa a **npmjs.com**. *lodash 4.17.20* no se conservará en `repo-B` porque se trata de un repositorio intermedio. 