リポジトリ間でのパッケージのコピー - CodeArtifact

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

リポジトリ間でのパッケージのコピー

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

パッケージをコピーするのに必要な IAM 権限

でパッケージバージョンをコピーするには CodeArtifact、呼び出し元のユーザーに必要な IAM アクセス許可が必要であり、ソースリポジトリと宛先リポジトリにアタッチされたリソースベースのポリシーに必要なアクセス許可が必要です。リソースベースのアクセス許可ポリシーと CodeArtifact リポジトリの詳細については、「」を参照してください リポジトリポリシー

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コマンドを使用して、ポリシーが存在するかどうかを確認することができます。詳細については、ポリシーを読み込むを参照してください。ポリシーが存在する場合は、そのポリシーを置換する代わりにこれらの権限をポリシーに追加することをお勧めします。

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

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

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

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

パッケージバージョンをコピーする

copy-package-versions コマンドを使用して CodeArtifact 、ソースリポジトリから同じドメイン内の宛先リポジトリに 1 つ以上のパッケージバージョンをコピーします。次の例では、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": {} }

アップストリームリポジトリからパッケージをコピーする

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

スコープ指定された npm パッケージをコピーする

スコープ内の 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 パッケージのバージョンをコピーする

リポジトリ間で 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": {} }

ソースリポジトリに存在しないバージョン

ソースリポジトリに存在しないバージョンを指定すると、コピーは失敗します。ソースリポジトリにいくつかのバージョンが存在したり、存在しないバージョンがある場合、すべてのバージョンのコピーが失敗します。次の例では、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エラーコードは、別のバージョンをコピーできなかったために、このバージョンがコピー先のリポジトリにコピーされなかったことを示すために使用されます。

送信先リポジトリにすでに存在するバージョン

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

パッケージバージョンのアセットとメタデータがソースリポジトリと送信先リポジトリで同一である場合、コピーは実行されませんが、オペレーションは成功したと見なされます。つまり、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-uniquenpm 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 のコピーが送信先リポジトリにすでに存在していたが、ソースリポジトリと送信先のリポジトリでは同一ではないため、コピーは実行されませんでした。

パッケージバージョンリビジョンの指定

パッケージバージョンリビジョンは、パッケージバージョンの特定のアセットとメタデータのセットを指定する文字列です。パッケージバージョンリビジョンを指定して、特定の状態にあるパッケージバージョンをコピーできます。パッケージバージョンのリビジョンを指定するには、--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コマンドを使用してください。

詳細については、 API リファレンスCopyPackageVersionパッケージバージョンリビジョン「」および「」を参照してください。 CodeArtifact

npm パッケージをコピーする

npm パッケージcopy-package-versionsの動作の詳細については、「npm tags」および「 API CopyPackageVersions」を参照してください。