

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# アップストリームリポジトリを持つパッケージバージョンのリクエスト
<a name="repo-upstream-behavior"></a>

 クライアント (例: npm) が、複数のアップストリームリポジトリを持つ `my_repo` という名前の CodeArtifact リポジトリからパッケージバージョンをリクエストすると、以下のことが起こります。
+  リクエストされたパッケージバージョンが`my_repo`に含まれる場合、クライアントにリターンされます。
+  リクエストされたパッケージバージョンが`my_repo`に含まれない場合、CodeArtifactは`my_repo`のアップストリームリポジトリでそれを検索します。パッケージバージョンが見つかると、そのバージョンへのリファレンスが`my_repo`にコピーされます、そしてパッケージのバージョンがクライアントに返されます。
+  `my_repo`にもそのアップストリームリポジトリにもパッケージバージョンがない場合、HTTP404`Not Found`レスポンスがクライアントには返されます。

 `create-repository`または`update-repository`コマンドを使ってアップストリームリポジトリを追加した場合、`--upstreams`パラメータに渡された順番によって、パッケージバージョンがリクエストされた時の優先順位が決まります。パッケージバージョンがリクエストされた時、CodeArtifact に使用させたい順番で`--upstreams`を使ってアップストリームリポジトリを指定します。詳細については、「[アップストリームリポジトリの優先順位](repo-upstream-search-order.md)」を参照してください。

 1 つのリポジトリに許可される直接アップストリームリポジトリの最大数は 10 です。直接アップストリームリポジトリは独自の直接アップストリームリポジトリを持つこともできるため、CodeArtifact は 10 を超えるリポジトリでパッケージバージョンを検索できます。パッケージバージョンがリクエストされた時にCodeArtifactが検索するリポジトリの最大数は25です。

## アップストリームリポジトリからのパッケージの保持
<a name="package-retention-upstream-repos"></a>

 リクエストされたパッケージバージョンが、アップストリームリポジトリで見つかった場合、そのバージョンのリファレンスは保持され、ダウンストリームリポジトリから常時利用できます。保持されたパッケージバージョンは、次のいずれの影響も受けません: 
+  アップストリームリポジトリの削除。
+  アップストリームリポジトリのダウンストリームリポジトリからの切断。
+  アップストリームリポジトリからのパッケージバージョンの削除。
+  アップストリームリポジトリのパッケージバージョンの編集（例えば、新しいアセットを追加するなど）。

## アップストリームの関係を通じてパッケージを取得する
<a name="fetching-packages-through-an-upstream-relationship"></a>

CodeArtifactリポジトリに外部接続を持つリポジトリとのアップストリーム関係がある場合、アップストリームリポジトリにないパッケージのリクエストは外部リポジトリからコピーされます。例えば、次の設定を考えてみます。`repo-A`という名前のリポジトリが、`repo-B`という名のアップストリームリポジトリを持っています。`repo-B`は [https://npmjs.com](https://npmjs.com)に外部接続しています。

![簡略な3つの連結したリポジトリを示すアップストリームリポジトリの図。](http://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/images/upstream-with-external.png)


もし`npm`が`repo-A`リポジトリを使用するよう設定されていた場合、`npm install`の実行により[https://npmjs.com](https://npmjs.com)から`repo-B`へのパッケージのコピーが開始されます。インストールされているバージョンも`repo-A`プルされます。次の例では、`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
```

`npm install`の実行後、`repo-A` には最新バージョン (`lodash 4.17.20`)のみが含まれますが、その理由はそのバージョンが`repo-A`から`npm`により取得されたためです。

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

出力例:

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

 `repo-B`は[https://npmjs.com](https://npmjs.com)に外部接続するため、[https://npmjs.com](https://npmjs.com)からインポートされるすべてのパッケージバージョンは`repo-B`に保存されます。これらのパッケージバージョンは、`repo-B`とのアップストリーム関係を持つ任意のダウンストリームリポジトリによって取得されている可能性があります。

`repo-B`のコンテンツは、[https://npmjs.com](https://npmjs.com)からインポートされたすべてのパッケージとパッケージバージョンを段階的に確認する方法を紹介します。例えば、段階的にインポートされた`lodash`パッケージのすべてのバージョンを見るためには、以下のように`list-package-versions`を使用します。

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

出力例:

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

## 中間リポジトリでのパッケージの保持
<a name="package-retention-intermediate-repositories"></a>

 CodeArtifactは、アップストリームリポジトリを連結できます。例えば、`repo-A`は`repo-B`を、`repo-B`は`repo-C`をアップストリームとして持つことができます。この設定により、`repo-B`と`repo-C`にあるパッケージバージョンが`repo-A`から入手可能になります。

![簡略な3 つの連結したリポジトリを示すアップストリームリポジトリの図。](http://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/images/upstream-chaining.png)


 パッケージマネージャーがリポジトリ`repo-A`に接続し、リポジトリ`repo-C`からパッケージバージョンを取得する場合、そのパッケージバージョンはリポジトリ`repo-B`に保持されません。パッケージバージョンは、最も下流のリポジトリにのみ保持されます、この例では、`repo-A`にのみ保持されます。中間リポジトリには保持されません。これは、長いチェーンにも当てはまります。例えば、`repo-A`、`repo-B`、`repo-C` および `repo-D` という4 つのリポジトリがあり、`repo-A` に接続しているパッケージマネージャーが、`repo-D` からパッケージバージョンを取得した場合、そのパッケージバージョンは `repo-A` に保持されますが、`repo-B` また `repo-C` には保持されません。

 パッケージ保持に関する動作は、外部リポジトリからパッケージバージョンをプルする場合と同様ですが、パッケージバージョンは常に外部接続を持つリポジトリに保持されます。例えば、`repo-A` のアップストリームとして `repo-B` があり、`repo-B` のアップストリームとして `repo-C` があり、`repo-C` は **npmjs.com** を外部接続として持っています。次の図を参照してください。

![npmjs.com への外部接続に連結された3つのリポジトリを示すアップストリームリポジトリ図。](http://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/images/upstream-chaining-external.png)


 `repo-A` に接続しているパッケージマネージャーが、例えば *lodash 4.17.20* というパッケージバージョンをリクエストし、そのパッケージバージョンが 3 つのリポジトリのいずれにも存在しない場合は、**npmjs.com** から取得されます。*lodash 4.17.20* が取得されると、最も下流のリポジトリである `repo-A` と、**npmjs.com** への外部接続がある `repo-C` に保持されます。*lodash 4.17.20* は中間リポジトリである `repo-B` には保持されません。