

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Meminta versi paket dengan repositori hulu
<a name="repo-upstream-behavior"></a>

 Ketika klien (misalnya, npm) meminta versi paket dari repositori bernama `my_repo` yang memiliki beberapa CodeArtifact repositori upstream, berikut ini dapat terjadi: 
+  Jika `my_repo` berisi versi paket yang diminta, akan dikembalikan ke klien. 
+  Jika `my_repo` tidak berisi versi paket yang diminta, CodeArtifact cari di `my_repo` repositori upstream. Jika versi paket ditemukan, referensi untuk itu akan disalin ke `my_repo`, dan versi paket dikembalikan ke klien. 
+  Jika `my_repo` atau repositori hulu tidak berisi versi paket, respons HTTP 404 `Not Found` dikembalikan ke klien.

 Ketika Anda menambahkan repositori hulu menggunakan perintah `create-repository` atau `update-repository`, urutan penerusan ke parameter `--upstreams` menentukan prioritas ketika versi paket diminta. Tentukan repositori upstream dengan `--upstreams` urutan yang CodeArtifact ingin Anda gunakan saat versi paket diminta. Untuk informasi selengkapnya, lihat [Urutan prioritas repositori hulu](repo-upstream-search-order.md). 

 Jumlah maksimum repositori hulu langsung yang diizinkan untuk satu repositori adalah 10. Karena repositori hulu langsung juga dapat memiliki repositori hulu langsung sendiri, CodeArtifact dapat mencari lebih dari 10 repositori untuk versi paket. Jumlah maksimum repositori yang CodeArtifact terlihat ketika versi paket diminta adalah 25. 

## Retensi paket dari repositori hulu
<a name="package-retention-upstream-repos"></a>

 Jika versi paket yang diminta ditemukan di repositori hulu, referensi untuk itu dipertahankan dan selalu tersedia dari repositori hilir. Versi paket yang dipertahankan tidak terpengaruh oleh salah satu dari berikut ini: 
+  Menghapus repositori hulu. 
+  Memutuskan koneksi repositori hulu dari repositori hilir. 
+  Menghapus versi paket dari repositori hulu. 
+  Mengedit versi paket di repositori hulu (misalnya, dengan menambahkan aset baru ke dalamnya). 

## Mengambil paket melalui hubungan hulu
<a name="fetching-packages-through-an-upstream-relationship"></a>

Jika CodeArtifact repositori memiliki hubungan hulu dengan repositori yang memiliki koneksi eksternal, permintaan paket yang tidak ada di repositori upstream disalin dari repositori eksternal. Misalnya, pertimbangkan konfigurasi berikut: repositori bernama `repo-A` memiliki repositori upstream bernama. `repo-B` `repo-B`memiliki koneksi eksternal ke [https://npmjs.com](https://npmjs.com).

![Diagram repositori hulu sederhana menunjukkan tiga repositori yang dirangkai bersama.](http://docs.aws.amazon.com/id_id/codeartifact/latest/ug/images/upstream-with-external.png)


Jika `npm` dikonfigurasi untuk menggunakan `repo-A` repositori, menjalankan `npm install` memicu penyalinan paket dari ke dalam. [https://npmjs.com](https://npmjs.com)`repo-B` Versi yang dipasang juga ditarik ke dalam `repo-A`. Contoh berikut menginstal `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
```

Setelah menjalankan `npm install`, `repo-A` hanya berisi versi terbaru (`lodash 4.17.20`) karena itu adalah versi yang diambil oleh `npm` dari `repo-A`.

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

Contoh output:

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

 Karena `repo-B` memiliki koneksi eksternal ke [https://npmjs.com](https://npmjs.com), semua versi paket yang diimpor dari [https://npmjs.com](https://npmjs.com)disimpan di`repo-B`. Versi paket ini bisa saja diambil oleh repositori hilir mana pun dengan hubungan hulu ke `repo-B`. 

Isi `repo-B` menyediakan cara untuk melihat semua paket dan versi paket yang diimpor dari waktu [https://npmjs.com](https://npmjs.com)ke waktu. Misalnya, untuk melihat semua versi paket `lodash` yang diimpor dari waktu ke waktu, Anda dapat menggunakan `list-package-versions`, sebagai berikut.

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

Contoh output:

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

## Retensi paket dalam repositori menengah
<a name="package-retention-intermediate-repositories"></a>

 CodeArtifact memungkinkan rantai repositori hulu. Misalnya, `repo-A` dapat memiliki `repo-B` sebagai hulu dan `repo-B` dapat memiliki `repo-C` sebagai hulu. Konfigurasi ini membuat versi paket di `repo-B` dan `repo-C` tersedia dari `repo-A`. 

![Diagram repositori hulu sederhana menunjukkan tiga repositori yang dirangkai bersama.](http://docs.aws.amazon.com/id_id/codeartifact/latest/ug/images/upstream-chaining.png)


 Ketika manajer paket terhubung ke repositori `repo-A` dan mengambil versi paket dari repositori `repo-C`, versi paket tidak akan disimpan dalam repositori `repo-B`. Versi paket hanya akan disimpan di repositori paling hilir, dalam contoh ini, `repo-A`. Versi paket tidak akan disimpan dalam repositori menengah. Hal ini juga berlaku untuk rantai yang lebih panjang; misalnya jika ada empat repositori `repo-A`, `repo-B`, `repo-C`, dan `repo-D` dan manajer paket yang terhubung ke `repo-A` mengambil versi paket dari `repo-D`, versi paket akan disimpan di `repo-A` tapi tidak di `repo-B` atau `repo-C`. 

 Perilaku penyimpanan paket serupa dengan saat menarik versi paket dari repositori eksternal, kecuali bahwa versi paket selalu disimpan di repositori yang memiliki koneksi eksternal terpasang. Misalnya, `repo-A` memiliki `repo-B` sebagai hulu. `repo-B` memiliki `repo-C` sebagai hulu, dan `repo-C` juga memiliki **npmjs.com** yang dikonfigurasi sebagai koneksi eksternal; lihat diagram berikut.

![Diagram repositori hulu menunjukkan tiga repositori yang dirangkai bersama-sama dengan koneksi eksternal ke npmjs.com.](http://docs.aws.amazon.com/id_id/codeartifact/latest/ug/images/upstream-chaining-external.png)


 Jika manajer paket yang terhubung ke `repo-A` meminta versi paket, *lodash 4.17.20* misalnya, dan versi paket tidak ada di salah satu dari tiga repositori, akan diambil dari **npmjs.com**. Saat *lodash 4.17.20* diambil, akan disimpan di `repo-A` karena itu adalah repositori paling hilir dan `repo-C` karena memiliki koneksi eksternal ke **npmjs.com** terlampir. *lodash 4.17.20* tidak akan disimpan di `repo-B` karena merupakan repositori menengah. 