

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

# リポジトリ間でのパッケージのコピー
<a name="copy-package"></a>

CodeArtifact で、あるリポジトリから別のリポジトリにパッケージバージョンをコピーできます。これは、パッケージプロモーションワークフローや、チームやプロジェクト間でパッケージバージョンを共有するなどのシナリオに役立ちます。パッケージバージョンをコピーするには、ソースリポジトリと送信先リポジトリが同じドメインにある必要があります。

## パッケージをコピーするのに必要な IAM 権限
<a name="copypackageversions-iam-actions"></a>

CodeArtifact でパッケージバージョンをコピーするには、呼び出し元のユーザーが必要な IAM 権限を持ち、ソースリポジトリと送信先のリポジトリに添付されたリソースベースのポリシーが必要な権限を持っていることが必要です。リソースベースの権限ポリシーと CodeArtifact リポジトリの詳細については、[リポジトリポリシー](repo-policies.md)を参照してください。

`copy-package-versions`を呼び出しているユーザーには、ソースリポジトリに関する`ReadFromRepository`許可および`CopyPackageVersions`送信先リポジトリに関する許可が必要です。

ソースリポジトリには、`ReadFromRepository`許可が必要で、送信先リポジトリには IAM アカウントまたはユーザーによるパッケージのコピーに割り当てられた`CopyPackageVersions`許可が必要です。次のポリシーは、`put-repository-permissions-policy`コマンドでソースリポジトリまたは送信先リポジトリに追加されるリポジトリポリシーの例です。*[111122223333]* をコール元のアカウントの ID `copy-package-versions`に置換する。

**注記**  
現在のリポジトリポリシーが存在する場合、`put-repository-permissions-policy`をコールすると、そのポリシーは置換されます。`get-repository-permissions-policy`コマンドを使用して、ポリシーが存在するかどうかを確認することができます。詳細については、[ポリシーを読み込む](repo-policies.md#reading-a-policy)を参照してください。ポリシーが存在する場合は、そのポリシーを置換する代わりにこれらの権限をポリシーに追加することをお勧めします。

**ソースリポジトリの権限ポリシーの例**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:ReadFromRepository"
            ],
            "Effect": "Allow",
            "Principal": {
                 "AWS": "arn:aws:iam::111122223333:root"
            },
            "Resource": "*"
        }
    ]
}
```

------

**送信先リポジトリの権限ポリシーの例**

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "codeartifact:CopyPackageVersions"
            ],
            "Effect": "Allow",
            "Principal": {
                 "AWS": "arn:aws:iam::111122223333:root"
            },
            "Resource": "*"
        }
    ]
}
```

------

## パッケージバージョンをコピーする
<a name="copy-package-versions"></a>

CodeArtifact の`copy-package-versions`コマンドを使用して、ひとつまたはそれ以上のパッケージバージョンをソースリポジトリから同じドメイン内のコピー先リポジトリにコピーすることができます。次の例では、`my-package`という名前の npm パッケージのバージョン 6.0.2 と 4.0.0 を`my_repo`リポジトリから`repo-2`リポジトリへコピーします。

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository my_repo \
 --destination-repository repo-2 --package my-package --format npm \
 --versions 6.0.2 4.0.0
```

一度のオペレーションで、同じパッケージ名の複数のバージョンをコピーできます。異なるパッケージ名のバージョンをコピーするには、それぞれについて`copy-package-versions`を呼び出す必要があります。

前のコマンドでは、両方のバージョンが正常にコピーできると仮定して、次の出力が生成されます。

```
{
   "successfulVersions": {
        "6.0.2": {
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        },
        "4.0.0": {
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

## アップストリームリポジトリからパッケージをコピーする
<a name="copy-package-upstream"></a>

通常、`copy-package-versions`はコピーするバージョンの`--source-repository`のオプションで指定されたリポジトリ内だけを検索します。ただ、`--include-from-upstream`オプションを使用してソースリポジトリとそのアップストリームリポジトリの両方からバージョンをコピーすることはできます。CodeArtifact SDK を使用する場合は、`CopyPackageVersions`APIと`includeFromUpstream`パラメータを true に設定します。詳細については、「[CodeArtifact でアップストリームリポジトリを操作する](repos-upstream.md)」を参照してください。

## スコープ指定された npm パッケージをコピーする
<a name="copying-a-scoped-npm-package"></a>

 スコープ内の npm パッケージバージョンをコピーするには、`--namespace`オプションを使用して、スコープを指定します。例えば、パッケージ`@types/react`をコピーするには、`--namespace types`を使用します。`--namespace`を使用するときは、`@`記号を省略する必要があります。

```
aws codeartifact copy-package-versions  --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \
 --destination-repository repo-2 --format npm --namespace types \
 --package react --versions 0.12.2
```

## Maven パッケージのバージョンをコピーする
<a name="copying-a-maven-package"></a>

リポジトリ間で Maven パッケージのバージョンをコピーするには、Maven グループ ID を `--namespace` オプションで、また Maven ArtifactID を `--name` オプションで渡して、コピーするパッケージを指定します。例えば、`com.google.guava:guava` の単一のバージョンをコピーするには:

```
 aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333  \
 --source-repository my_repo --destination-repository repo-2 --format maven --namespace com.google.guava \
 --package guava --versions 27.1-jre
```

パッケージのバージョンが正常にコピーされると、出力は以下のようになります。

```
{
    "successfulVersions": {
        "27.1-jre": {
            "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

## ソースリポジトリに存在しないバージョン
<a name="versions-that-do-not-exist-in-the-source-repository"></a>

ソースリポジトリに存在しないバージョンを指定すると、コピーは失敗します。ソースリポジトリにいくつかのバージョンが存在したり、存在しないバージョンがある場合、すべてのバージョンのコピーが失敗します。次の例では、`array-unique` npm パッケージのバージョン 0.2.0 はソースリポジトリに存在しますが、バージョン 5.6.7 は存在しません。

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \
         --source-repository my_repo --destination-repository repo-2 --format npm \
         --package array-unique --versions 0.2.0 5.6.7
```

出力は以下のようになります。

```
{
    "successfulVersions": {},
    "failedVersions": {
        "0.2.0": {
            "errorCode": "SKIPPED",
            "errorMessage": "Version 0.2.0 was skipped"
        },
        "5.6.7": {
            "errorCode": "NOT_FOUND",
            "errorMessage": "Could not find version 5.6.7"
        }
    }
}
```

`SKIPPED`エラーコードは、別のバージョンをコピーできなかったために、このバージョンがコピー先のリポジトリにコピーされなかったことを示すために使用されます。

## 送信先リポジトリにすでに存在するバージョン
<a name="versions-that-already-exist-in-the-destination-repository"></a>

 パッケージバージョンがすでに存在するリポジトリにコピーされると、CodeArtifact は二つのリポジトリ内のパッケージアセットとパッケージバージョンレベルのメタデータを比較します。

 パッケージバージョンのアセットとメタデータがソースリポジトリと送信先リポジトリで同一である場合、コピーは実行されませんが、オペレーションは成功したと見なされます。つまり、`copy-package-versions` は冪等性です。この場合、ソースリポジトリと送信先のリポジトリの両方にすでに存在していたバージョンは、`copy-package-versions`の出力には表示されません。

次の例では、npm パッケージの二つのバージョンを示します。`array-unique`はソースリポジトリ`repo-1`に存在します。バージョン 0.2.1 は送信先のリポジトリにも存在します`dest-repo`バージョン 0.2.0 はそうではありません。

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \
         --source-repository my_repo --destination-repository repo-2 --format npm --package array-unique \
         --versions 0.2.1 0.2.0
```

出力は以下のようになります。

```
{
    "successfulVersions": {
        "0.2.0": {
            "revision": "Yad+B1QcBq2kdEVrx1E1vSfHJVh8Pr61hBUkoWPGWX0=",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

バージョン 0.2.0 が`successfulVersions`に一覧表示されているのは、ソースから送信先リポジトリに正常にコピーされたためです。バージョン 0.2.1 は、宛先リポジトリにすでに存在していたため、出力には表示されません。

 パッケージバージョンのアセットまたはメタデータがソースリポジトリと送信先のリポジトリで異なる場合、コピー操作は失敗します。`--allow-overwrite`パラメータを使用して、強制的に上書きすることができます。

ソースリポジトリにいくつかのバージョンが存在したり、存在しないバージョンがある場合、すべてのバージョンのコピーが失敗します。次の例では、`array-unique`npm package パッケージのバージョン 0.3.2 は、ソースと送信先のリポジトリの両方に存在しますが、パッケージバージョンの内容は異なります。バージョン 0.2.1 はソースリポジトリに存在しますが、送信先には存在しません。

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \
         --source-repository my_repo --destination-repository repo-2 --format npm --package array-unique \
         --versions 0.3.2 0.2.1
```

出力は以下のようになります。

```
{
    "successfulVersions": {},
    "failedVersions": {
        "0.2.1": {
            "errorCode": "SKIPPED",
            "errorMessage": "Version 0.2.1 was skipped"
        },
        "0.3.2": {
            "errorCode": "ALREADY_EXISTS",
            "errorMessage": "Version 0.3.2 already exists"
        }
    }
}
```

バージョン 0.2.1 が`SKIPPED`としてマークされている理由は、コピー先のリポジトリにコピーされていないからです。バージョン 0.3.2 のコピーが送信先リポジトリにすでに存在していたが、ソースリポジトリと送信先のリポジトリでは同一ではないため、コピーは実行されませんでした。

## パッケージバージョンリビジョンの指定
<a name="specify-package-version-revision"></a>

 パッケージバージョンリビジョンは、パッケージバージョンの特定のアセットとメタデータのセットを指定する文字列です。パッケージバージョンリビジョンを指定して、特定の状態にあるパッケージバージョンをコピーできます。パッケージバージョンのリビジョンを指定するには、`--version-revisions`パラメータを使用して、1 つ以上のカンマ区切りパッケージバージョンとパッケージバージョンリビジョンのペアを`copy-package-versions`コマンドに渡します。

**注記**  
`--versions` または `--version-revisions` パラメータを`copy-package-versions`で指定する必要があります。両方を指定することはできません。

次の例では、パッケージのバージョン 0.3.2 がパッケージバージョンリビジョン`REVISION-1-SAMPLE-6C81EFF7DA55CC`のソースリポジトリに存在する場合、そのバージョン 0.3.2 `my-package` のみをコピーします。

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \
 --destination-repository repo-2 --format npm --namespace my-namespace \
 --package my-package --version-revisions 0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC
```

次の例では、パッケージの二つのバージョンをコピーしています :`my-package`、0.3.2と0.3.13。このコピーは、`my-package`のソースリポジトリバージョン 0.3.2 にリビジョン`REVISION-1-SAMPLE-6C81EFF7DA55CC`があり、バージョン0.3.13にはリビジョン`REVISION-2-SAMPLE-55C752BEE772FC`がある場合にのみ成功します。

```
aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \
 --destination-repository repo-2 --format npm --namespace my-namespace \
 --package my-package --version-revisions 0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC,0.3.13=REVISION-2-SAMPLE-55C752BEE772FC
```

 パッケージバージョンのリビジョンを見つけるには、`describe-package-version`または`list-package-versions`コマンドを使用してください。

 詳細については、[パッケージバージョンリビジョン](codeartifact-concepts.md#welcome-concepts-package-version-revision)および *[CodeArtifact API リファレンス]* の [[パッケージバージョンのコピー]](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_CopyPackageVersions.html) を参照してください。

## npm パッケージをコピーする
<a name="copying-npm-packages"></a>

 npm パッケージでの`copy-package-versions`動作の詳細については、[[npm タグ と CopyPackageVersions API]](npm-tags.md#tags-and-cpv) を参照してください。