

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Lavorare con i repository upstream in CodeArtifact
<a name="repos-upstream"></a>

*Un repository può avere altri repository come AWS CodeArtifact repository upstream.* Ciò consente a un client di gestione dei pacchetti di accedere ai pacchetti contenuti in più di un repository utilizzando un singolo endpoint del repository.

È possibile aggiungere uno o più repository upstream a un AWS CodeArtifact repository utilizzando, o SDK. Console di gestione AWS AWS CLI Per associare un repository a un repository upstream, è necessario disporre dell'autorizzazione per l'azione sul repository upstream. `AssociateWithDownstreamRepository` Per ulteriori informazioni, consultare [Crea un repository con un repository upstream](create-repo.md#creating-a-repository-with-an-upstream) e [Aggiungere o rimuovere i repository upstream](repo-upstream-add.md). 

Se un repository upstream ha una connessione esterna a un repository pubblico, i repository che ne derivano possono estrarre i pacchetti da quel repository pubblico. Ad esempio, supponiamo che il repository abbia un repository upstream denominato e `my_repo` `upstream` abbia una connessione esterna a un repository `upstream` npm pubblico. In questo caso, un gestore di pacchetti a cui è collegato `my_repo` può estrarre pacchetti dal repository pubblico npm. Per ulteriori informazioni sulla richiesta di pacchetti da repository upstream o connessioni esterne, vedere o. [Richiesta di una versione del pacchetto con repository upstream](repo-upstream-behavior.md) [Richiesta di pacchetti da connessioni esterne](external-connection-requesting-packages.md)

**Topics**
+ [Qual è la differenza tra gli archivi upstream e le connessioni esterne?](#repos-external-connections)
+ [Aggiungere o rimuovere i repository upstream](repo-upstream-add.md)
+ [Connect un CodeArtifact repository a un repository pubblico](external-connection.md)
+ [Richiesta di una versione del pacchetto con repository upstream](repo-upstream-behavior.md)
+ [Richiesta di pacchetti da connessioni esterne](external-connection-requesting-packages.md)
+ [Ordine di priorità del repository upstream](repo-upstream-search-order.md)
+ [Comportamento delle API con i repository upstream](upstream-repo-api-behavior.md)

## Qual è la differenza tra gli archivi upstream e le connessioni esterne?
<a name="repos-external-connections"></a>

In CodeArtifact, i repository upstream e le connessioni esterne si comportano per lo più allo stesso modo, ma ci sono alcune differenze importanti.

1. È possibile aggiungere fino a 10 repository upstream a un repository. CodeArtifact È possibile aggiungere solo una connessione esterna.

1. Esistono chiamate API separate per aggiungere un repository upstream o una connessione esterna.

1. Il comportamento di conservazione dei pacchetti è leggermente diverso, in quanto i pacchetti richiesti dagli archivi upstream vengono conservati in tali repository. Per ulteriori informazioni, consulta [Conservazione dei pacchetti in repository intermedi](repo-upstream-behavior.md#package-retention-intermediate-repositories).

# Aggiungere o rimuovere i repository upstream
<a name="repo-upstream-add"></a>

Segui i passaggi indicati nelle seguenti sezioni per aggiungere o rimuovere repository upstream da o verso un repository. CodeArtifact Per ulteriori informazioni sui repository upstream, consulta. [Lavorare con i repository upstream in CodeArtifact](repos-upstream.md)

Questa guida contiene informazioni sulla configurazione di altri CodeArtifact repository come repository upstream. [Per informazioni sulla configurazione di una connessione esterna a repository pubblici come npmjs.com, Nuget Gallery, Maven Central o PyPI, consulta Aggiungere una connessione esterna.](https://docs.aws.amazon.com/codeartifact/latest/ug/external-connection.html)

## Aggiungi o rimuovi repository upstream (console)
<a name="repo-upstream-add-console"></a>

Esegui i passaggi della procedura seguente per aggiungere un repository come repository upstream utilizzando la console. CodeArtifact Per informazioni sull'aggiunta di un repository upstream con, vedere. AWS CLI[Aggiungi o rimuovi i repository upstream ()AWS CLI](#repo-upstream-add-cli)

**Per aggiungere un repository upstream utilizzando la console CodeArtifact**

1. [Apri la AWS CodeArtifact console su codeartifact/homehttps://console.aws.amazon.com/codesuite/.](https://console.aws.amazon.com/codesuite/codeartifact/home)

1.  Nel riquadro di navigazione, scegli **Domini**, quindi scegli il nome di dominio che contiene il tuo repository. 

1.  Scegli il nome del tuo repository.

1.  Scegli **Modifica**.

1.  Nei **repository upstream, scegli Associa repository** **upstream e aggiungi il repository** che desideri aggiungere come repository upstream. Puoi aggiungere repository solo nello stesso dominio dei repository upstream.

1.  **Scegli Aggiorna repository.**

**Per rimuovere un repository upstream utilizzando la console CodeArtifact**

1. [Apri la AWS CodeArtifact console su codeartifact/homehttps://console.aws.amazon.com/codesuite/.](https://console.aws.amazon.com/codesuite/codeartifact/home)

1.  Nel riquadro di navigazione, scegli **Domini**, quindi scegli il nome di dominio che contiene il tuo repository. 

1.  Scegli il nome del tuo repository.

1.  Scegli **Modifica**.

1.  **Nei **repository upstream**, trova la voce dell'elenco del repository upstream che desideri rimuovere e scegli Dissocia.**
**Importante**  
Una volta rimosso un repository upstream da un CodeArtifact repository, i gestori di pacchetti non avranno accesso ai pacchetti nel repository upstream o in nessuno dei suoi repository upstream.

1.  **Scegliete Aggiorna repository.**

## Aggiungi o rimuovi i repository upstream ()AWS CLI
<a name="repo-upstream-add-cli"></a>

 È possibile aggiungere o rimuovere i CodeArtifact repository upstream di un repository utilizzando (). AWS Command Line Interface AWS CLI A tale scopo, utilizzate il `update-repository` comando e specificate i repository upstream utilizzando il parametro. `--upstreams` 

È possibile aggiungere repository solo nello stesso dominio dei repository upstream.

**Per aggiungere repository upstream ()AWS CLI**

1. In caso contrario, segui i passaggi indicati [Configurazione con AWS CodeArtifact](get-set-up-for-codeartifact.md) per configurare e configurare il AWS CLI con. CodeArtifact

1. Usa il `aws codeartifact update-repository` comando con il `--upstreams` flag per aggiungere repository upstream.
**Nota**  
La chiamata al `update-repository` comando sostituisce i repository upstream configurati esistenti con l'elenco di repository fornito con il flag. `--upstreams` Se desideri aggiungere repository upstream e mantenere quelli esistenti, devi includere i repository upstream esistenti nella chiamata.

   Il comando di esempio seguente aggiunge due repository upstream a un repository denominato che si trova in un dominio denominato`my_repo`. `my_domain` L'ordine dei repository upstream nel `--upstreams` parametro determina la priorità di ricerca quando CodeArtifact richiede un pacchetto dal repository. `my_repo` Per ulteriori informazioni, consulta [Ordine di priorità del repository upstream](repo-upstream-search-order.md). 

   Per informazioni sulla connessione a repository pubblici ed esterni come npmjs.com o Maven Central, consulta. [Connect un CodeArtifact repository a un repository pubblico](external-connection.md)

   ```
   aws codeartifact update-repository \
      --repository my_repo \
      --domain my_domain \
      --domain-owner 111122223333 \
      --upstreams repositoryName=upstream-1 repositoryName=upstream-2
   ```

    L'output contiene i repository upstream, come segue.

   ```
   {
          "repository": {
              "name": "my_repo",
              "administratorAccount": "123456789012",
              "domainName": "my_domain",
              "domainOwner": "111122223333",
              "arn": "arn:aws:codeartifact:us-east-2:111122223333:repository/my_domain/my_repo",
              "upstreams": [
                  {
                      "repositoryName": "upstream-1"
                  },
                  {
                      "repositoryName": "upstream-2"
                  }
              ],
              "externalConnections": []
          }
      }
   ```

**Per rimuovere un repository upstream ()AWS CLI**

1. In caso contrario, segui i passaggi indicati [Configurazione con AWS CodeArtifact](get-set-up-for-codeartifact.md) per configurare e configurare il AWS CLI con. CodeArtifact

1. Per rimuovere i repository upstream da un CodeArtifact repository, usa il `update-repository` comando con il flag. `--upstreams` L'elenco dei repository fornito al comando sarà il nuovo set di repository upstream per il repository. CodeArtifact Includi i repository upstream esistenti che desideri conservare e ometti i repository upstream che desideri rimuovere.

   Per rimuovere tutti i repository upstream da un repository, usa il comando e includi senza argomenti. `update-repository` `--upstreams` Quanto segue rimuove i repository upstream da un repository denominato contenuto in un `my_repo` dominio denominato. `my_domain`

   ```
   aws codeartifact update-repository \
      --repository my_repo \
      --domain my_domain \
      --domain-owner 111122223333 \
      --upstreams
   ```

    L'output mostra che l'elenco di `upstreams` è vuoto.

   ```
   {
          "repository": {
              "name": "my_repo",
              "administratorAccount": "123456789012",
              "domainName": "my_domain",
              "domainOwner": "111122223333",
              "arn": "arn:aws:codeartifact:us-east-2:111122223333:repository/my_domain/my_repo",
              "upstreams": [],
              "externalConnections": []
          }
      }
   ```

# Connect un CodeArtifact repository a un repository pubblico
<a name="external-connection"></a>

[Puoi aggiungere una connessione esterna tra un repository e un CodeArtifact repository pubblico esterno come [https://npmjs.com](https://npmjs.com)o il repository Maven Central.](https://repo.maven.apache.org/maven2/) Quindi, quando richiedi un pacchetto dal CodeArtifact repository che non è già presente nel repository, il pacchetto può essere recuperato dalla connessione esterna. In questo modo è possibile utilizzare le dipendenze open source utilizzate dall'applicazione.

Nel CodeArtifact, il modo previsto di utilizzare le connessioni esterne consiste nell'avere un repository per dominio con una connessione esterna a un determinato archivio pubblico. Ad esempio, se desideri connetterti a npmjs.com, configura un repository nel tuo dominio con una connessione esterna a npmjs.com e configura tutti gli altri repository con una connessione upstream. In questo modo, tutti i repository possono utilizzare i pacchetti che sono già stati recuperati da npmjs.com, anziché recuperarli e archiviarli nuovamente.

**Topics**
+ [Connect a un repository esterno (console)](#adding-an-external-connection-console)
+ [Connect a un repository esterno (CLI)](#adding-an-external-connection)
+ [Archivi di connessioni esterne supportati](#supported-public-repositories)
+ [Rimuovere una connessione esterna (CLI)](#removing-an-external-connection)

## Connect a un repository esterno (console)
<a name="adding-an-external-connection-console"></a>

Quando si utilizza la console per aggiungere una connessione a un repository esterno, si verifica quanto segue:

1. Un `-store` repository per il repository esterno verrà creato nel tuo CodeArtifact dominio se non ne esiste già uno. Questi `-store` repository si comportano come repository intermedi tra il tuo repository e il repository esterno e consentono di connetterti a più di un repository esterno.

1. Il `-store` repository appropriato viene aggiunto come repository a monte del repository.

L'elenco seguente contiene ogni `-store` repository presente CodeArtifact e il rispettivo repository esterno a cui si connettono.

1. `cargo-store`è collegato a crates.io.

1. `clojars-store`è collegato a Clojars Repository.

1. `commonsware-store`è connesso ad Android Repository. CommonsWare 

1. `google-android-store`è connesso a Google Android.

1. `gradle-plugins-store`è collegato ai plugin Gradle.

1. `maven-central-store`è collegato a Maven Central Repository.

1. `npm-store`è collegato a npmjs.com.

1. `nuget-store`è collegato a nuget.org.

1. `pypi-store`è collegato alla Python Packaging Authority.

1. `rubygems-store`è connesso RubyGems a.org.

**Per connettersi a un repository esterno (console)**

1. Apri la AWS CodeArtifact console su [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home).

1.  Nel riquadro di navigazione, scegli **Domini**, quindi scegli il nome di dominio che contiene il tuo repository. 

1.  Scegli il nome del tuo repository.

1.  Scegli **Modifica**.

1. Nei **repository upstream, scegli Associa repository** **upstream e aggiungi il repository** appropriato collegato come `-store` repository upstream.

1.  **Scegli Aggiorna repository.**

Dopo che il `-store` repository è stato aggiunto come repository upstream, i gestori di pacchetti collegati al repository possono recuperare i pacchetti dal CodeArtifact rispettivo repository esterno.

## Connect a un repository esterno (CLI)
<a name="adding-an-external-connection"></a>

È possibile utilizzare il AWS CLI per connettere il CodeArtifact repository a un repository esterno aggiungendo una connessione esterna direttamente al repository. Ciò consentirà agli utenti connessi al CodeArtifact repository, o a uno qualsiasi dei suoi repository a valle, di recuperare i pacchetti dal repository esterno configurato. Ogni CodeArtifact repository può avere solo una connessione esterna.

Si consiglia di avere un repository per dominio con una connessione esterna a un determinato repository pubblico. Per connettere altri repository all'archivio pubblico, aggiungi il repository con la connessione esterna come upstream. Se tu o qualcun altro nel tuo dominio avete già configurato connessioni esterne nella console, è probabile che il dominio disponga già di un `-store` repository con una connessione esterna all'archivio pubblico a cui desideri connetterti. Per ulteriori informazioni sugli `-store` archivi e sulla connessione con la console, consulta. [Connect a un repository esterno (console)](#adding-an-external-connection-console)

**Per aggiungere una connessione esterna a un CodeArtifact repository (CLI)**
+ Utilizzare `associate-external-connection` per aggiungere una connessione esterna. L'esempio seguente collega un repository al registro pubblico npm, npmjs.com. Per un elenco dei repository esterni supportati, vedere. [Archivi di connessioni esterne supportati](#supported-public-repositories)

  ```
  aws codeartifact associate-external-connection --external-connection public:npmjs \
      --domain my_domain --domain-owner 111122223333 --repository my_repo
  ```

  Output di esempio:

  ```
  {
      "repository": {
          "name": my_repo
          "administratorAccount": "123456789012",
          "domainName": "my_domain",
          "domainOwner": "111122223333",
          "arn": "arn:aws:codeartifact:us-west-2:111122223333:repository/my_domain/my_repo",
          "description": "A description of my_repo",
          "upstreams": [],
          "externalConnections": [
              {
                  "externalConnectionName": "public:npmjs",
                  "packageFormat": "npm",
                  "status": "AVAILABLE"
              }
          ]
      }
  }
  ```

Dopo aver aggiunto una connessione esterna, consulta [Richiesta di pacchetti da connessioni esterne](external-connection-requesting-packages.md) per informazioni sulla richiesta di pacchetti da un repository esterno con una connessione esterna.

## Archivi di connessioni esterne supportati
<a name="supported-public-repositories"></a>

 CodeArtifact supporta una connessione esterna ai seguenti archivi pubblici. Per utilizzare la CodeArtifact CLI per specificare una connessione esterna, utilizzate il valore nella colonna **Nome** per il `--external-connection` parametro quando eseguite il `associate-external-connection` comando. 


| Repository type (Tipo di repository) | Description | Nome | 
| --- | --- | --- | 
| Maven | Repository Clojars | public:maven-clojars | 
| Maven | CommonsWare Archivio Android | public:maven-commonsware | 
| Maven | Archivio Google Android | public:maven-googleandroid | 
| Maven | Archivio di plugin Gradle | public:maven-gradleplugins | 
| Maven | Maven Central | public:maven-central | 
| npm | registro pubblico npm | public:npmjs | 
| NuGet | NuGet Galleria | public:nuget-org | 
| Python | Indice dei pacchetti Python | public:pypi | 
| Ruby | RubyGems.org | public:ruby-gems-org | 
| Rust | Crates.io | public:crates-io | 

## Rimuovere una connessione esterna (CLI)
<a name="removing-an-external-connection"></a>

Per rimuovere una connessione esterna che è stata aggiunta utilizzando il `associate-external-connection` comando in AWS CLI, utilizzare`disassociate-external-connection`.

```
aws codeartifact disassociate-external-connection --external-connection public:npmjs \
    --domain my_domain --domain-owner 111122223333 --repository my_repo
```

Output di esempio:

```
{
    "repository": {
        "name": my_repo
        "administratorAccount": "123456789012",
        "domainName": "my_domain",
        "domainOwner": "111122223333",
        "arn": "arn:aws:codeartifact:us-west-2:111122223333:repository/my_domain/my_repo",
        "description": "A description of my_repo",
        "upstreams": [],
        "externalConnections": []
    }
}
```

# Richiesta di una versione del pacchetto con repository upstream
<a name="repo-upstream-behavior"></a>

 Quando un client (ad esempio, npm) richiede una versione del pacchetto da un CodeArtifact repository denominato `my_repo` che ha più repository upstream, può verificarsi quanto segue: 
+  Se `my_repo` contiene la versione del pacchetto richiesta, viene restituita al client. 
+  Se `my_repo` non contiene la versione del pacchetto richiesta, la CodeArtifact cerca nei `my_repo` repository upstream. Se viene trovata la versione del pacchetto, viene copiato un riferimento ad essa e la versione del pacchetto viene restituita al client. `my_repo` 
+  Se `my_repo` né i relativi repository upstream contengono la versione del pacchetto, al client viene restituita una `Not Found` risposta HTTP 404.

 Quando si aggiungono repository upstream utilizzando il `update-repository` comando `create-repository` or, l'ordine in cui vengono passati al `--upstreams` parametro determina la loro priorità quando viene richiesta una versione del pacchetto. Specificate i repository upstream con `--upstreams` l'ordine che desiderate CodeArtifact utilizzare quando viene richiesta una versione del pacchetto. Per ulteriori informazioni, consulta [Ordine di priorità del repository upstream](repo-upstream-search-order.md). 

 Il numero massimo di repository diretti upstream consentito per un repository è 10. Poiché i repository diretti a monte possono avere anche repository diretti a monte propri, è CodeArtifact possibile cercare le versioni dei pacchetti in più di 10 repository. Il numero massimo di repository che vengono cercati quando viene CodeArtifact richiesta una versione del pacchetto è 25. 

## Package retention dai repository upstream
<a name="package-retention-upstream-repos"></a>

 Se una versione del pacchetto richiesta viene trovata in un repository upstream, viene mantenuto un riferimento ad essa ed è sempre disponibile nell'archivio downstream. La versione del pacchetto conservata non è influenzata da nessuno dei seguenti fattori: 
+  Eliminazione del repository upstream. 
+  Disconnessione del repository upstream dal repository downstream. 
+  Eliminazione della versione del pacchetto dal repository upstream. 
+  Modifica della versione del pacchetto nell'archivio upstream (ad esempio, aggiungendovi una nuova risorsa). 

## Recupera i pacchetti tramite una relazione a monte
<a name="fetching-packages-through-an-upstream-relationship"></a>

Se un CodeArtifact repository ha una relazione upstream con un repository che dispone di una connessione esterna, le richieste di pacchetti non presenti nel repository upstream vengono copiate dal repository esterno. Ad esempio, considera la seguente configurazione: un repository denominato ha un repository upstream denominato. `repo-A` `repo-B` `repo-B`ha una connessione esterna a. [https://npmjs.com](https://npmjs.com)

![\[Semplice diagramma di repository upstream che mostra tre repository concatenati tra loro.\]](http://docs.aws.amazon.com/it_it/codeartifact/latest/ug/images/upstream-with-external.png)


Se `npm` è configurato per utilizzare il `repo-A` repository, l'esecuzione `npm install` attiva la copia dei pacchetti dall'interno. [https://npmjs.com](https://npmjs.com)`repo-B` Vengono inoltre inserite le versioni installate. `repo-A` L'esempio seguente installa`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
```

Dopo l'esecuzione`npm install`, `repo-A` contiene solo la versione più recente (`lodash 4.17.20`) perché è la versione che è stata recuperata da`npm`. `repo-A`

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

Output di esempio:

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

 Perché `repo-B` dispone di una connessione esterna a [https://npmjs.com](https://npmjs.com), tutte le versioni del pacchetto da cui vengono importate [https://npmjs.com](https://npmjs.com)vengono archiviate in`repo-B`. Queste versioni del pacchetto avrebbero potuto essere recuperate da qualsiasi repository downstream con una relazione a monte con. `repo-B` 

Il contenuto di `repo-B` fornisce un modo per vedere tutti i pacchetti e le versioni dei pacchetti importati nel tempo. [https://npmjs.com](https://npmjs.com) Ad esempio, per vedere tutte le versioni del `lodash` pacchetto importate nel tempo, è possibile utilizzare `list-package-versions` quanto segue.

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

Output di esempio:

```
{
    "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"
}
```

## Conservazione dei pacchetti in repository intermedi
<a name="package-retention-intermediate-repositories"></a>

 CodeArtifact consente il concatenamento di repository upstream. Ad esempio, `repo-A` può avere `repo-B` come upstream e `repo-B` può avere `repo-C` come upstream. Questa configurazione rende le versioni del pacchetto in `repo-B` e `repo-C` disponibili da. `repo-A` 

![\[Semplice diagramma del repository upstream che mostra tre repository concatenati tra loro.\]](http://docs.aws.amazon.com/it_it/codeartifact/latest/ug/images/upstream-chaining.png)


 Quando un gestore di pacchetti si connette al repository `repo-A` e recupera una versione del pacchetto dal repository`repo-C`, la versione del pacchetto non viene conservata nell'archivio. `repo-B` La versione del pacchetto verrà conservata solo nell'archivio più a valle, in questo esempio. `repo-A` Non verrà conservata in nessun archivio intermedio. Questo vale anche per le catene più lunghe; ad esempio, se ci fossero quattro repository`repo-A`, `repo-B``repo-C`, e `repo-D` e un gestore di pacchetti collegato da cui è stata `repo-A` recuperata una versione del pacchetto`repo-D`, la versione del pacchetto verrebbe conservata in ma non in o. `repo-A` `repo-B` `repo-C` 

 Il comportamento di conservazione dei pacchetti è simile quando si estrae una versione del pacchetto da un repository esterno, tranne per il fatto che la versione del pacchetto viene sempre conservata nel repository a cui è collegata la connessione esterna. Ad esempio, `repo-A` ha `repo-B` come upstream. `repo-B`ha `repo-C` come upstream e ha `repo-C` anche **npmjs.com** configurato come connessione esterna; vedere lo schema seguente.

![\[Diagramma del repository upstream che mostra tre repository concatenati tra loro con una connessione esterna a npmjs.com.\]](http://docs.aws.amazon.com/it_it/codeartifact/latest/ug/images/upstream-chaining-external.png)


 **Se un gestore di pacchetti connesso `repo-A` richiede una versione del pacchetto, ad esempio *lodash 4.17.20*, e la versione del pacchetto non è presente in nessuno dei tre repository, verrà recuperata da npmjs.com.** **Quando *lodash 4.17.20* viene recuperato, verrà mantenuto in quanto si tratta del repository più a valle e `repo-A` poiché ha la connessione esterna a npmjs.com allegata. `repo-C`** *lodash 4.17.20* non verrà conservato in quanto si tratta di un repository intermedio. `repo-B` 

# Richiesta di pacchetti da connessioni esterne
<a name="external-connection-requesting-packages"></a>

Le sezioni seguenti descrivono come richiedere un pacchetto da una connessione esterna e CodeArtifact il comportamento previsto quando si richiede un pacchetto.

**Topics**
+ [Recupera i pacchetti da una connessione esterna](#fetching-packages-from-a-public-repository)
+ [Latenza della connessione esterna](#external-connection-latency)
+ [CodeArtifact comportamento quando un repository esterno non è disponibile](#external-connection-unavailable)
+ [Disponibilità di nuove versioni del pacchetto](#new-pv-availability)
+ [Importazione di versioni di pacchetti con più di una risorsa](#import-pv-multi-asset)

## Recupera i pacchetti da una connessione esterna
<a name="fetching-packages-from-a-public-repository"></a>

Per recuperare i pacchetti da una connessione esterna dopo averli aggiunti al CodeArtifact repository come descritto in[Connect un CodeArtifact repository a un repository pubblico](external-connection.md), configurate il gestore di pacchetti in modo che utilizzi il repository e installi i pacchetti.

**Nota**  
Le seguenti istruzioni utilizzano`npm`, per visualizzare le istruzioni di configurazione e utilizzo per altri tipi di pacchetti, vedere[Utilizzo CodeArtifact con Maven](using-maven.md), [Utilizzo CodeArtifact con NuGet](using-nuget.md) o. [Usare CodeArtifact con Python](using-python.md)

**Per recuperare i pacchetti da una connessione esterna**

1. Configura e autentica il tuo gestore di pacchetti con il tuo CodeArtifact repository. Per `npm`, utilizzare il seguente comando `aws codeartifact login`.

   ```
   aws codeartifact login --tool npm --domain my_domain --domain-owner 111122223333 --repository my_repo
   ```

1. Richiedi il pacchetto dal repository pubblico. Per`npm`, usa il seguente `npm install` comando, sostituendolo *lodash* con il pacchetto che desideri installare.

   ```
   npm install lodash
   ```

1. Dopo che il pacchetto è stato copiato nel tuo CodeArtifact repository, puoi usare i `list-package-versions` comandi `list-packages` e per visualizzarlo.

   ```
   aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo
   ```

   Output di esempio:

   ```
   {
       "packages": [
           {
               "format": "npm",
               "package": "lodash"
           }
       ]
   }
   ```

   Il `list-package-versions` comando elenca tutte le versioni del pacchetto copiate nel repository. CodeArtifact 

   ```
   aws codeartifact list-package-versions --domain my_domain --domain-owner 111122223333 --repository my_repo --format npm --package lodash
   ```

   Output di esempio:

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

## Latenza della connessione esterna
<a name="external-connection-latency"></a>

Quando si recupera un pacchetto da un archivio pubblico utilizzando una connessione esterna, si verifica un ritardo tra il momento in cui il pacchetto viene recuperato dall'archivio pubblico e il momento in cui viene archiviato nel repository dell'utente. CodeArtifact Ad esempio, supponiamo di aver installato la versione 1.2.5 del pacchetto npm «lodash» come descritto in. [Recupera i pacchetti da una connessione esterna](#fetching-packages-from-a-public-repository) Sebbene il comando `npm install lodash` lodash sia stato completato correttamente, la versione del pacchetto potrebbe non essere ancora presente nel tuo repository. CodeArtifact In genere occorrono circa 3 minuti prima che la versione del pacchetto appaia nel repository, anche se a volte può richiedere più tempo.

A causa di questa latenza, potresti aver recuperato con successo una versione del pacchetto, ma potresti non essere ancora in grado di visualizzare la versione nel tuo repository nella CodeArtifact console o durante la chiamata alle operazioni dell' ListPackages API. ListPackageVersions Una volta CodeArtifact mantenuta in modo asincrono la versione del pacchetto, sarà visibile nella console e tramite richieste API.

## CodeArtifact comportamento quando un repository esterno non è disponibile
<a name="external-connection-unavailable"></a>

Occasionalmente, un repository esterno può subire un'interruzione, il che significa che CodeArtifact non può recuperare i pacchetti da esso o che il recupero dei pacchetti è molto più lento del normale. Quando ciò si verifica, le versioni dei pacchetti già estratte da un archivio esterno (ad esempio **npmjs.com**) e archiviate in un repository continueranno a essere disponibili per il download. CodeArtifact CodeArtifact Tuttavia, i pacchetti che non sono già archiviati in CodeArtifact potrebbero non essere disponibili, anche se è stata configurata una connessione esterna a tale repository. Ad esempio, il tuo CodeArtifact repository potrebbe contenere la versione del pacchetto npm `lodash 4.17.19 ` perché è quella che hai usato finora nella tua applicazione. Quando desideri eseguire l'aggiornamento a`4.17.20`, normalmente CodeArtifact recupererai la nuova versione da **npmjs.com** e la memorizzerai nel tuo repository. CodeArtifact Tuttavia, se **npmjs.com presenta un'interruzione, questa nuova versione** non sarà disponibile. **L'unica soluzione è riprovare più tardi, una volta ripristinato npmjs.com.**

Le interruzioni del repository esterno possono influire anche sulla pubblicazione di nuove versioni del pacchetto in. CodeArtifact In un repository con una connessione esterna configurata, non CodeArtifact consentirà la pubblicazione di una versione del pacchetto che è già presente nell'archivio esterno. Per ulteriori informazioni, consulta [Panoramica dei pacchetti](packages-overview.md). Tuttavia, in rari casi, un'interruzione del repository esterno potrebbe significare che CodeArtifact non dispone di up-to-date informazioni su quali pacchetti e versioni dei pacchetti sono presenti in un repository esterno. In questo caso, CodeArtifact potrebbe consentire la pubblicazione di una versione del pacchetto che normalmente negherebbe.

## Disponibilità di nuove versioni del pacchetto
<a name="new-pv-availability"></a>

 Affinché una versione del pacchetto in un archivio pubblico come npmjs.com sia disponibile tramite un CodeArtifact repository, deve prima essere aggiunta a una cache dei metadati dei pacchetti regionali. Questa cache è gestita da CodeArtifact ogni AWS regione e contiene metadati che descrivono il contenuto degli archivi pubblici supportati. A causa di questa cache, c'è un ritardo tra la pubblicazione di una nuova versione del pacchetto in un archivio pubblico e il momento in cui è disponibile da. CodeArtifact Questo ritardo varia in base al tipo di pacchetto.

Per i pacchetti npm, Python e Nuget, potrebbe verificarsi un ritardo fino a 30 minuti dalla pubblicazione di una nuova versione del pacchetto su npmjs.com, pypi.org o nuget.org e dal momento in cui è disponibile per l'installazione da un repository. CodeArtifact CodeArtifact sincronizza automaticamente i metadati di questi due repository per garantire che la cache sia aggiornata.

Per i pacchetti Maven, potrebbe verificarsi un ritardo fino a 3 ore tra la pubblicazione di una nuova versione del pacchetto in un repository pubblico e il momento in cui è disponibile per l'installazione da un repository. CodeArtifact CodeArtifact controllerà la presenza di nuove versioni di un pacchetto al massimo una volta ogni 3 ore. La prima richiesta per un determinato nome di pacchetto dopo la scadenza della durata della cache di 3 ore farà sì che tutte le nuove versioni di quel pacchetto vengano importate nella cache regionale.

Per i pacchetti Maven di uso comune, le nuove versioni vengono in genere importate ogni 3 ore perché l'elevata frequenza di richieste significa che la cache viene spesso aggiornata non appena la durata della cache è scaduta. Per i pacchetti usati di rado, la cache non avrà la versione più recente finché non viene richiesta una versione del pacchetto da un repository. CodeArtifact Alla prima richiesta, saranno disponibili solo le versioni precedentemente importate da CodeArtifact, ma questa richiesta provocherà l'aggiornamento della cache. Nelle richieste successive, le nuove versioni del pacchetto verranno aggiunte alla cache e saranno disponibili per il download.

## Importazione di versioni di pacchetti con più di una risorsa
<a name="import-pv-multi-asset"></a>

Entrambi i pacchetti Maven e Python possono avere più risorse per versione del pacchetto. Ciò rende l'importazione di pacchetti di questi formati più complessa rispetto a npm e NuGet pacchetti, che hanno solo una risorsa per versione del pacchetto. Per le descrizioni di quali risorse vengono importate per questi tipi di pacchetti e di come vengono rese disponibili le nuove risorse aggiunte, consulta e. [Richiesta di pacchetti Python da upstream e connessioni esterne](python-upstream-external-connections-request.md) [Richiesta di pacchetti Maven da upstream e connessioni esterne](maven-upstream-external-connections-request.md)

# Ordine di priorità del repository upstream
<a name="repo-upstream-search-order"></a>

 Quando richiedi una versione del pacchetto da un repository con uno o più repository upstream, la loro priorità corrisponde all'ordine in cui erano elencati quando si chiamava il comando or. `create-repository` `update-repository` Quando viene trovata la versione del pacchetto richiesta, la ricerca si interrompe, anche se non è stata effettuata la ricerca in tutti gli archivi upstream. Per ulteriori informazioni, consulta [Aggiungi o rimuovi i repository upstream ()AWS CLI](repo-upstream-add.md#repo-upstream-add-cli). 

 Usa il `describe-repository` comando per vedere l'ordine di priorità.

```
aws codeartifact describe-repository --repository my_repo --domain my_domain --domain-owner 111122223333
```

 Il risultato potrebbe essere il seguente. Mostra che la priorità del repository upstream è la `upstream-1` prima, la `upstream-2` seconda e `upstream-3` la terza. 

```
{
    "repository": {
        "name": "my_repo",
        "administratorAccount": "123456789012",
        "domainName": "my_domain",
        "domainOwner": "111122223333",
        "arn": "arn:aws:codeartifact:us-east-1:111122223333:repository/my_domain/my_repo",
        "description": "My new repository",
        "upstreams": [
            {
                "repositoryName": "upstream-1"
            },
            {
                "repositoryName": "upstream-2"
            },
            {
                "repositoryName": "upstream-3"
            }
        ],
        "externalConnections": []
    }
}
```

## Semplice esempio di ordine di priorità
<a name="upstream-priority-order-simple"></a>

 Nel diagramma seguente, il `my_repo` repository ha tre repository upstream. L'ordine di priorità dei repository upstream è,,. `upstream-1` `upstream-2` `upstream-3` 

![\[Semplice diagramma del repository upstream che mostra my_repo con 3 repository upstream.\]](http://docs.aws.amazon.com/it_it/codeartifact/latest/ug/images/upstream-diagram-simple.png)


 Una richiesta per una versione del pacchetto `my_repo` cerca nei repository nel seguente ordine finché non viene trovata o finché non viene restituita una risposta HTTP 404 al client: `Not Found` 

1.  `my_repo` 

1.  `upstream-1` 

1.  `upstream-2` 

1.  `upstream-3` 

Se viene trovata la versione del pacchetto, la ricerca si interrompe, anche se non è stata cercata in tutti gli archivi upstream. Ad esempio, se la versione del pacchetto viene trovata in`upstream-1`, la ricerca si interrompe e CodeArtifact non viene eseguita la ricerca in `upstream-2` o. `upstream-3` 

 Quando si utilizza il AWS CLI comando `list-package-versions` per elencare le versioni del pacchetto`my_repo`, viene eseguita la ricerca solo in`my_repo`. Non elenca le versioni dei pacchetti negli archivi upstream. 

## Esempio di ordine di priorità complesso
<a name="upstream-search-order-complex"></a>

 Se un repository upstream ha i propri repository upstream, viene utilizzata la stessa logica per trovare una versione del pacchetto prima di passare al successivo repository upstream. Ad esempio, supponiamo che il repository abbia due `my_repo` repository upstream e. `A` `B` Se il repository `A` ha repository upstream, una richiesta per una versione del pacchetto viene `my_repo` dapprima inserita `my_repo``A`, poi negli archivi upstream di e così via. `A` 

 Nel diagramma seguente, il repository contiene repository upstream. `my_repo` Il repository upstream `A` ha due repository upstream e un repository upstream. `D` I repository upstream allo stesso livello del diagramma vengono visualizzati nel loro ordine di priorità, da sinistra a destra (il repository ha un ordine di priorità più elevato rispetto al repository e il repository `A` ha un ordine di priorità più elevato rispetto al repository`B`). `C` `D` 

![\[Un diagramma di repository upstream più complesso con 2 repository upstream A e B e repository upstream aggiuntivi.\]](http://docs.aws.amazon.com/it_it/codeartifact/latest/ug/images/upstream-diagram-complex.png)


In questo esempio, una richiesta per una versione del pacchetto viene visualizzata nei `my_repo` repository nell'ordine seguente finché non viene trovata o finché un gestore di pacchetti non restituisce una risposta HTTP 404 al client: `Not Found` 

1.  `my_repo` 

1.  `A` 

1.  `C` 

1.  `D` 

1.  `E` 

1.  `B` 

# Comportamento delle API con i repository upstream
<a name="upstream-repo-api-behavior"></a>

 Quando richiami determinati CodeArtifact APIs repository collegati a repository upstream, il comportamento può essere diverso a seconda che i pacchetti o le versioni dei pacchetti siano archiviati nel repository di destinazione o nel repository upstream. Il loro comportamento è documentato qui. APIs 

Per ulteriori informazioni su CodeArtifact APIs, consulta l'[CodeArtifact API Reference.](https://docs.aws.amazon.com/codeartifact/latest/APIReference/Welcome.html)

La maggior parte dei APIs riferimenti a un pacchetto o a una versione del pacchetto restituirà un `ResourceNotFound` errore se la versione del pacchetto specificata non è presente nell'archivio di destinazione. Questo è vero anche se il pacchetto o la versione del pacchetto è presente in un repository upstream. In effetti, i repository upstream vengono ignorati quando li chiamano. APIs Questi sono: APIs 
+ DeletePackageVersions
+ DescribePackageVersion
+ GetPackageVersionAsset
+ GetPackageVersionReadme
+ ListPackages
+ ListPackageVersionAssets
+ ListPackageVersionDependencies
+ ListPackageVersions
+ UpdatePackageVersionsStatus

Per dimostrare questo comportamento, abbiamo due repository: `target-repo` e`upstream-repo`. `target-repo`è vuoto ed è `upstream-repo` configurato come repository upstream. `upstream-repo`contiene il pacchetto npm. `lodash`

Quando chiamiamo l'`DescribePackageVersion`API on`upstream-repo`, che contiene il `lodash` pacchetto, otteniamo il seguente risultato:

```
{
    "packageVersion": {
        "format": "npm",
        "packageName": "lodash",
        "displayName": "lodash",
        "version": "4.17.20",
        "summary": "Lodash modular utilities.",
        "homePage": "https://lodash.com/",
        "sourceCodeRepository": "https://github.com/lodash/lodash.git",
        "publishedTime": "2020-10-14T11:06:10.370000-04:00",
        "licenses": [
            {
                "name": "MIT"
            }
        ],
        "revision": "Ciqe5/9yicvkJT13b5/LdLpCyE6fqA7poa9qp+FilPs=",
        "status": "Published"
    }
```

Quando chiamiamo la stessa API on`target-repo`, che è vuota ma è `upstream-repo` configurata come upstream, otteniamo il seguente risultato:

```
An error occurred (ResourceNotFoundException) when calling the DescribePackageVersion operation: 
Package not found in repository. RepoId: repo-id, Package = PackageCoordinate{packageType=npm, packageName=lodash},
```

 L'`CopyPackageVersions`API si comporta in modo diverso. Per impostazione predefinita, `CopyPackageVersions` l'API copia solo le versioni del pacchetto archiviate nel repository di destinazione. Se una versione del pacchetto è archiviata nel repository upstream ma non nel repository di destinazione, non verrà copiata. Per includere le versioni dei pacchetti archiviati solo nell'archivio upstream, imposta il valore di `includeFromUpstream` to nella richiesta API. `true` 

Per ulteriori informazioni sull'`CopyPackageVersions`API, consulta. [Copia i pacchetti tra i repository](copy-package.md)