

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

# CodeArtifact でのパッケージの操作
<a name="packages"></a>

以下のトピックでは、CodeArtifact CLI と API を使用してパッケージに対するアクションを実行する方法について説明します。

**Topics**
+ [パッケージの概要](packages-overview.md)
+ [パッケージ名を一覧表示する](list-packages.md)
+ [パッケージバージョンを一覧表示する](list-packages-versions.md)
+ [パッケージバージョンのアセットを一覧表示する](list-assets.md)
+ [パッケージバージョンアセットのダウンロード](download-assets.md)
+ [リポジトリ間でのパッケージのコピー](copy-package.md)
+ [パッケージまたはパッケージバージョンを削除する](delete-package.md)
+ [パッケージのバージョンの詳細と依存関係の表示および更新](describe-package-version.md)
+ [パッケージバージョンのステータスの更新](update-package-version-status.md)
+ [パッケージオリジンコントロールの編集](package-origin-controls.md)

# パッケージの概要
<a name="packages-overview"></a>

*[パッケージ]* とは、依存関係の解決とソフトウェアのインストールに必要なソフトウェアとメタデータのバンドルです。CodeArtifact には、パッケージはパッケージ名、`@types/node`に`@types`などの [[ネームスペース]](codeartifact-concepts.md#welcome-concepts-package-namespace) (オプション) など、パッケージバージョンのセット、およびパッケージレベルのメタデータ (npm タグなど) が含まれます。

**Contents**
+ [サポートされるパッケージ形式](#supported-package-formats)
+ [メッセージの公開](#package-publishing)
  + [公開許可](#package-publishing-permissions)
  + [パッケージアセットの上書き](#package-publishing-overwrite-assets)
  + [プライベートパッケージと公開リポジトリ](#package-publishing-upstreams-direct)
  + [パッチが適用されたパッケージバージョンの公開](#package-publishing-patched-versions)
  + [公開時のアセットサイズ制限](#package-publishing-asset-size-limits)
  + [公開時のレイテンシー](#package-publishing-latency)
+ [パッケージバージョンのステータス](#package-version-status)
+ [パッケージ名、パッケージバージョン、アセット名の正規化](#package-name-normalization)

## サポートされるパッケージ形式
<a name="supported-package-formats"></a>

AWS CodeArtifact は、[Cargo](using-cargo.md)、[ジェネリック](using-generic.md)、[Maven](using-maven.md)、[npm](using-npm.md)、[NuGet](using-nuget.md)、[PyPI](using-python.md)、[Ruby](using-ruby.md)、[Swift](using-swift.md) パッケージ形式をサポートしています。

## メッセージの公開
<a name="package-publishing"></a>

 [サポートされるパッケージ形式](#supported-package-formats)はどれも新しいバージョンが、`npm`、`twine`、`Maven`、`Gradle`、`nuget`、および`dotnet`などのツールを使い、CodeArtifact リポジトリで公開することができます。

### 公開許可
<a name="package-publishing-permissions"></a>

 AWS Identity and Access Management (IAM) ユーザーまたはロールには、送信先リポジトリに発行するアクセス許可が必要です。パッケージを公開するには、以下の権限が必要です。
+ **Cargo:** `codeartifact:PublishPackageVersion`
+ **ジェネリック:** `codeartifact:PublishPackageVersion`
+ **Maven:** `codeartifact:PublishPackageVersion`そして`codeartifact:PutPackageMetadata`
+ **npm**`codeartifact:PublishPackageVersion`
+ **NuGet:** `codeartifact:PublishPackageVersion`そして`codeartifact:ReadFromRepository`
+ **Python:** `codeartifact:PublishPackageVersion`
+ **Ruby:** `codeartifact:PublishPackageVersion`
+ **Swift:** `codeartifact:PublishPackageVersion`

上記の権限リストでは、IAM ポリシーで `codeartifact:PublishPackageVersion` 権限と `codeartifact:PutPackageMetadata` 権限の `package` リソースを指定する必要があります。また、`codeartifact:ReadFromRepository` 権限の `repository` リソースも指定する必要があります。

CodeArtifact の権限の詳細については、「[AWS CodeArtifact アクセス許可リファレンス](auth-and-access-control-permissions-reference.md)」を参照してください。

### パッケージアセットの上書き
<a name="package-publishing-overwrite-assets"></a>

 別のコンテンツで既に存在するパッケージアセットを再公開することはできません。例えば、JAR アセット `mypackage-1.0.jar`を持つ Maven パッケージをすでに公開したとします。古いアセットのチェックサムと新しいアセットのチェックサムが同じである場合のみ、そのアセットを再度公開できます。新しいコンテンツで同じアセットを再公開するには、最初に**delete-package-versions**コマンドを使ってパッケージバージョンを削除してください。異なるコンテンツで同じアセット名を再公開しようとすると、HTTP 409 の競合エラーが発生します。

 複数のアセット (PyPI と Maven) をサポートするパッケージ形式の場合、必要な権限を持っていれば、いつでも既存のパッケージバージョンに異なる名前の新しいアセットを追加できます。ジェネリックパッケージの場合、パッケージバージョンが `Unfinished` 状態にある限り、新しいアセットを追加できます。npm はパッケージバージョンごとにひとつのアセットしかサポートしないため、公開されたパッケージバージョンを何らかの方法で変更するには、まず、**delete-package-versions**を使用してそれを削除する必要があります。

 すでに存在するアセットを再公開しようとした場合 (例えば、`mypackage-1.0.jar`)、公開されたアセットと新規アセットの内容が同じである場合、操作が冪等であるため、この操作は成功します。

### プライベートパッケージと公開リポジトリ
<a name="package-publishing-upstreams-direct"></a>

 CodeArtifact は、CodeArtifact リポジトリに保存されているパッケージを npmjs.com や Maven Central などの公開リポジトリに公開しません。CodeArtifact は、公開リポジトリから CodeArtifact リポジトリにパッケージをインポートしますが、パッケージを別の方向に移動することはありません。CodeArtifact リポジトリに発行するパッケージはプライベートのままで、アクセスを許可した AWS アカウント、ロール、およびユーザーのみが使用できます。

### パッチが適用されたパッケージバージョンの公開
<a name="package-publishing-patched-versions"></a>

 場合によっては、公開リポジトリで利用可能な変更パッケージバージョンを公開したい場合があります。例えば、`mydep 1.1`という重要なアプリケーション依存関係にバグが見つかった場合、パッケージベンダーがその変更をレビューして承認できるよりも早く修正する必要があるとしましょう。前述のように、CodeArtifact リポジトリで、公開リポジトリがアップストリームのリポジトリと外部接続を介して CodeArtifact リポジトリから到達可能な場合、CodeArtifact は`mydep 1.1`の公開を防ぎます。

この問題を回避するには、公開リポジトリに到達できない別の CodeArtifact リポジトリにパッケージバージョンを公開します。次に、`copy-package-versions` API を使用し、パッチが適用された `mydep 1.1` のバージョンを、使用先の CodeArtifact リポジトリにコピーします。

### 公開時のアセットサイズ制限
<a name="package-publishing-asset-size-limits"></a>

公開できるパッケージアセットの最大サイズは、「[AWS CodeArtifact のクォータ](service-limits.md)」に示されている**アセットファイルサイズの最大**クォータによって制限されます。例えば、現在のアセットファイルサイズの最大クォータを超える Maven JAR または Python ホイールを公開することはできません。より大きなアセットを CodeArtifact に保存する場合は、クォータの引き上げをリクエストしてください。

アセットファイルサイズの最大クォータに加えて、npm パッケージの公開リクエストの最大サイズは 2 GB の制限があります。この制限はアセットファイルサイズの最大クォータとは関係なく、クォータを引き上げることで増やすことはできません。npm 公開リクエスト (HTTP PUT) では、パッケージメタデータと npm パッケージ tar アーカイブのコンテンツが一緒にバンドルされます。このため、公開できる npm パッケージの実際の最大サイズは、含まれるメタデータのサイズによって異なります。

**注記**  
公開される npm パッケージの最大サイズは 2 GB 未満に制限されています。

### 公開時のレイテンシー
<a name="package-publishing-latency"></a>

CodeArtifact リポジトリに公開されたパッケージバージョンは、多くの場合 1 秒未満でダウンロードできます。例えば、`npm publish` で npm パッケージバージョンを CodeArtifact に公開した場合、そのバージョンは 1 秒以内に `npm install` コマンドで使用できるようになります。ただし、公開には一貫性がなく、時間がかかることがあります。公開後すぐにパッケージバージョンを使用する必要がある場合は、再試行を行ってダウンロードの信頼性を確保してください。例えば、パッケージバージョンを公開した後、公開したばかりのパッケージバージョンが最初にダウンロードできなかった場合は、ダウンロードを最大 3 回繰り返します。

**注記**  
通常、パブリックリポジトリからパッケージバージョンをインポートすると、公開よりも時間がかかります。詳細については、「[外部接続のレイテンシー](external-connection-requesting-packages.md#external-connection-latency)」を参照してください。

## パッケージバージョンのステータス
<a name="package-version-status"></a>

CodeArtifact のすべてのパッケージバージョンには、パッケージバージョンの現在の状態と使用可用性を示すステータスがあります。 AWS CLI と SDK で、パッケージバージョンのステータスを変更することができます。詳細については、「[パッケージバージョンのステータスの更新](update-package-version-status.md)」を参照してください。

パッケージバージョンのステータスに設定できる値は以下の通りです。
+  **[公開]** - パッケージバージョンは正常に公開され、パッケージマネージャーを使用してリクエストできます。パッケージバージョンは、`npm view <package-name> versions` の出力など、パッケージマネージャーによって返されるパッケージバージョンリストに含まれます。パッケージバージョンのすべてのアセットは、リポジトリから入手できます。
+  **[未完了]** - クライアントはパッケージバージョンの 1 つ以上のアセットをアップロードしましたが、それを `Published` 状態に移行してアップロードを完了することができませんでした。現在 `Unfinished` のステータスになり得るのは、ジェネリックパッケージバージョンと Maven パッケージバージョンのみです。これは、クライアントがパッケージバージョンの 1 つ以上のアセットをアップロードしたものの、そのバージョンを含むパッケージの `maven-metadata.xml` ファイルを公開しなかった場合に発生します。Maven パッケージバージョンが **[未完了]** の場合、`mvn` や `gradle` などのクライアントに返されるバージョンリストには含まれないため、ビルドの一部として使用することはできません。[PublishPackageVersion](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PublishPackageVersion.html) API を呼び出すときに `unfinished` フラグを指定することで、ジェネリックパッケージを意図的に `Unfinished` 状態に保つことができます。ジェネリックパッケージを `Published` 状態に変更するには、`unfinished` フラグを省略するか、[UpdatePackageVersionsStatus](https://docs.aws.amazon.com//codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html) API を呼び出します。
+  **[一覧表示されていない]** - パッケージバージョンのアセットはリポジトリからダウンロードできますが、パッケージマネージャーによって返されるパッケージバージョンのリストには含まれません。例えば、npm パッケージの場合、`npm view <package-name> versions` の出力にパッケージバージョンは含まれません。つまり、npm の依存関係解決論理は、使用可能なバージョンのリストに表示されないため、パッケージのバージョンを選択しません。ただし、**[一覧表示されていない]** パッケージバージョンがすでにすべての`npm package-lock.json`ファイルで参照されていれば、`npm ci`の実行時などに、ダウンロードしてインストールできます。
+  **[アーカイブ済み]** - パッケージバージョンのアセットはこれ以降ダウンロードできません。パッケージバージョンは、パッケージマネージャーによって返されるバージョンのリストには含まれません。アセットが使用できないため、クライアントによるパッケージバージョンの使用はブロックされます。アプリケーションのビルドが、**[アーカイブ済み]** に更新されたバージョンに依存している場合、パッケージのバージョンがローカルにキャッシュされていないと仮定されるため、構築は中断されます。**[アーカイブ済み]** パッケージバージョンがまだリポジトリに存在するため、パッケージマネージャーまたはビルドツールを使用して再度公開することはできません。しかし、パッケージバージョンのステータスを **[パッケージのバージョンステータスのアップロード API]** で **[一覧表示されていない]** または [[公開]](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html) にすることは可能です。
+  **[開放済み]** - パッケージバージョンはリストに表示されず、アセットをリポジトリからダウンロードできません。**[開放済み]** と **[アーカイブ済み]** ステータスの主な違いは、**[開放済み]** のステータス場合、パッケージバージョンのアセットは CodeArtifact によって完全に削除されることです。このため、パッケージバージョンを**[開放済み]** から**[アーカイブ済み]**、**[一覧表示されていない]**、または **[公開]** に移動することはできません。アセットが削除されているため、パッケージバージョンはこれ以降使用できません。パッケージバージョンが **[開放済み]** としてマークされた後は、パッケージアセットの保存に関する費用は、これ以降請求されなくなります。

`--status` パラメータなしで list-package-versions を呼び出すと、すべてのステータスのパッケージバージョンがデフォルトで返されます。

 上記の状態とは別に、パッケージバージョンを [DeletePackageVersions API](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_DeletePackageVersions.html) で削除することもできます。削除後、パッケージバージョンはリポジトリ内に存在しなくなり、パッケージマネージャーまたはビルドツールを使用して、そのパッケージバージョンを自由に再公開できます。パッケージバージョンが [開放済み] としてマークされた後は、パッケージアセットの保存に関する費用は、これ以降請求されなくなります。

## パッケージ名、パッケージバージョン、アセット名の正規化
<a name="package-name-normalization"></a>

CodeArtifact は、パッケージ名、パッケージバージョン、およびアセット名を保存する前に正規化します。つまり、CodeArtifact の名前またはバージョンは、パッケージが公開されたときに提供された名前やバージョンとは異なる場合があります。CodeArtifact でパッケージタイプごとに名前とバージョンを正規化する方法については、次のドキュメントを参照してください。
+ [Python パッケージ名の正規化](python-name-normalization.md)
+ [NuGet パッケージ名、バージョン、アセット名の正規化](nuget-name-normalization.md)

CodeArtifact は、他のパッケージ形式では正規化を行いません。

# パッケージ名を一覧表示する
<a name="list-packages"></a>

CodeArtifact で`list-packages`コマンドを使用し、リポジトリ内のすべてのパッケージ名のリストを取得します。このコマンドは、パッケージ名のみを返し、バージョンは返しません。

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

サンプル出力:

```
{
    "nextToken": "eyJidWNrZXRJZCI6I...",
    "packages": [
        {
            "package": "acorn",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "acorn-dynamic-import",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "ajv",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "ajv-keywords",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "anymatch",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        },
        {
            "package": "ast",
            "namespace": "webassemblyjs",
            "format": "npm",
            "originConfiguration": {
                "restrictions": {
                    "publish": "BLOCK",
                    "upstream": "ALLOW"
            }
        }
    ]
}
```

## npm パッケージ名を一覧表示する
<a name="list-packages-npm"></a>

npm パッケージの名前のみを一覧表示するには、`--format`オプションの値を`npm`に設定します。

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

ネームスペース (npm *[範囲]*) 内の npm パッケージを一覧表示するには、`--namespace`および`--format`オプションを使用してください。

**重要**  
`--namespace`オプションの値には`@`の先頭を含めないでください。ネームスペース`@types`を検索するには、値を *[タイプ]* に設定します。

**注記**  
`--namespace` オプションは名前空間のプレフィックスでフィルタリングします。`--namespace` オプションに渡された値で始まるスコープの npm パッケージは、すべて `list-packages` レスポンスで返されます。

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo  \
    --format npm --namespace types
```

サンプル出力:

```
{
    "nextToken": "eyJidWNrZXRJZ...",
    "packages": [
        {
            "package": "3d-bin-packing",
            "namespace": "types",
            "format": "npm"

        },
        {
            "package": "a-big-triangle",
            "namespace": "types",
            "format": "npm"

        },
        {
            "package": "a11y-dialog",
            "namespace": "types",
            "format": "npm"

        }
    ]
}
```

## Maven パッケージ名を一覧表示する
<a name="list-packages-maven"></a>

Maven パッケージの名前のみを一覧表示するには、`--format` オプションの値を `maven` に変更します。また、`--namespace`オプションで Maven グループ ID を指定する必要があります。

**注記**  
`--namespace` オプションは名前空間のプレフィックスでフィルタリングします。`--namespace` オプションに渡された値で始まるスコープの npm パッケージは、すべて `list-packages` レスポンスで返されます。

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo  \
    --format maven --namespace org.apache.commons
```

サンプル出力:

```
{
    "nextToken": "eyJidWNrZXRJZ...",
    "packages": [
        {
            "package": "commons-lang3",
            "namespace": "org.apache.commons",
            "format": "maven"

        },
        {
            "package": "commons-collections4",
            "namespace": "org.apache.commons",
            "format": "maven"

        },
        {
            "package": "commons-compress",
            "namespace": "org.apache.commons",
            "format": "maven"

        }
    ]
}
```

## Python パッケージ名を一覧表示する
<a name="list-packages-python"></a>

Python パッケージの名前のみを一覧表示するには、`--format`オプションの値を`pypi`に設定します。

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

## パッケージ名のプレフィックスによるフィルタリング
<a name="list-packages-package-prefix"></a>

 指定した文字列で始まるパッケージを返すには、`--package-prefix`オプションを使用できます。

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo  \
    --format npm --package-prefix pat
```

サンプル出力:

```
{
    "nextToken": "eyJidWNrZXRJZ...",
    "packages": [
        {
            "package": "path",
            "format": "npm"

        },
        {
            "package": "pat-test",
            "format": "npm"

        },
        {
            "package": "patch-math3",
            "format": "npm"

        }
    ]
}
```

## サポートされている検索オプションの組み合わせ
<a name="list-packages-option-combinations"></a>

`--format`、`--namespace`、および`--package-prefix`の任意の組み合わせのオプション (ただし、`--namespace`単独では使用できません) が使用できます。スコープが `@types` で始まるすべての npm パッケージを検索するには、`--format` オプションを指定する必要があります。`--namespace`のみを使用すると、エラーが発生します。

 三つのオプションのいずれを使用しないことも、`list-packages`によってもサポートされていて、そうすると、リポジトリ内に存在するすべてのフォーマットのパッケージを表示します。

## 出力形式
<a name="list-packages-format-output"></a>

 すべての AWS CLI コマンドで使用できるパラメータを使用して、`list-packages`レスポンスをコンパクトで読みやすくすることができます。`--query`パラメータを使用して、返される各パッケージバージョンの形式を指定します。`--output`パラメータを使用して、レスポンスをプレーンテキストとしてフォーマットします。

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo \
  --output text --query 'packages[*].[package]'
```

サンプル出力:

```
accepts
array-flatten
body-parser
bytes
content-disposition
content-type
cookie
cookie-signature
```

 詳細については、*[AWS Command Line Interface ユーザーガイド]*の [[ AWS CLIからのコマンド出力のコントロール]](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html) を参照してください。

## デフォルトおよびその他のオプション
<a name="list-packages-defaults-options"></a>

 デフォルトでは、`list-packages`によって返される結果の最大数は100に設定されています。この結果制限は、`--max-results`オプションを使って変更できます。

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

`--max-results` の許容される最大値は 1,000 です。1,000 を超えるパッケージを持つリポジトリ内のパッケージを一覧表示できるように許可するために、`list-packages`がレスポンスの`nextToken`フィールドを使ってページ割りのサポートをします。リポジトリ内のパッケージ数が`--max-results`の値より大きい場合は、`nextToken`の値を`list-packages`の別の呼び出しに渡して、結果の次のページを取得できます。

```
aws codeartifact list-packages --domain my_domain --domain-owner 111122223333 --repository my_repo \
  --next-token rO0ABXNyAEdjb...
```

# パッケージバージョンを一覧表示する
<a name="list-packages-versions"></a>

in AWS CodeArtifact `list-package-versions` コマンドを使用して、リポジトリ内のパッケージ名のすべてのバージョンのリストを取得します。

```
aws codeartifact list-package-versions --package kind-of \ 
--domain my_domain --domain-owner 111122223333 \
--repository my_repository --format npm
```

サンプル出力:

```
{
  "defaultDisplayVersion": "1.0.1",
  "format": "npm",
  "package": "kind-of",
  "versions": [
      {
          "version": "1.0.1",
          "revision": "REVISION-SAMPLE-1-C7F4S5E9B772FC",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      },
      {
          "version": "1.0.0",
          "revision": "REVISION-SAMPLE-2-C752BEEF6D2CFC",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      },
      {
          "version": "0.1.2",
          "revision": "REVISION-SAMPLE-3-654S65A5C5E1FC",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      },
      {
          "version": "0.1.1",
          "revision": "REVISION-SAMPLE-1-C7F4S5E9B772FC"",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      },
      {
          "version": "0.1.0",
          "revision": "REVISION-SAMPLE-4-AF669139B772FC",
          "status": "Published",
          "origin": {
                "domainEntryPoint": {
                    "externalConnectionName": "public:npmjs"
                },
                "originType": "EXTERNAL"
            }
      }        
  ]
}
```

`--status`パラメータを`list-package-versions`コールに追加して、パッケージバージョンのステータスに基づいて結果をフィルタリングすることができます。パッケージバージョンのステータスの詳細については、「[パッケージバージョンのステータス](packages-overview.md#package-version-status)」を参照してください。

 `list-package-versions`および`--max-results`パラメータを使用し、`--next-token`からの応答をページ分割できます。`--max-results`の場合、1 ～ 1000 の整数を指定して、単一ページに返される結果の数を指定できます。デフォルトは 50 に設定されています。後続ページを返すには、`list-package-versions`をもう一度実行し、前のコマンド出力で受信した`nextToken`の値を`--next-token`にパスします。`--next-token`オプションが使用されないと、常に結果の最初のページが返されます。

 `list-package-versions`コマンドはアップストリームリポジトリのパッケージバージョンを一覧表示しません。ただし、パッケージバージョンのリクエスト中に、リポジトリにコピーされたアップストリームリポジトリ内のパッケージバージョンへの参照が一覧表示されます。詳細については、「[CodeArtifact でアップストリームリポジトリを操作する](repos-upstream.md)」を参照してください。

## npm パッケージバージョンを一覧表示する
<a name="list-packages-versions-npm"></a>

npm パッケージのすべてのパッケージバージョンを一覧表示するには、`--format` オプションの値を `npm` に設定します。

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

特定の名前空間 (npm *scope*) の npm パッケージバージョンを一覧表示するには、`--namespace` オプションを使用します。`--namespace`オプションの値には`@`の先頭を含めないでください。ネームスペース`@types`を検索するには、値を *[タイプ]* に設定します。

```
aws codeartifact list-package-versions --package my_package --domain my_domain \
 --domain-owner 111122223333 --repository my_repo --format npm \
 --namespace types
```

## Maven パッケージバージョンを一覧表示する
<a name="list-packages-versions-maven"></a>

Maven パッケージのすべてのパッケージバージョンを一覧表示するには、`--format` オプションの値を `maven` に設定します。また、`--namespace`オプションで Maven グループ ID を指定する必要があります。

```
aws codeartifact list-package-versions --package my_package --domain my_domain \
 --domain-owner 111122223333 --repository my_repo --format maven \
 --namespace org.apache.commons
```

## バージョンを並べ替える
<a name="list-package-versions-sorting"></a>

 `list-package-versions`は、公開時間に基づいて降順にソートされたバージョンを出力できます (最近公開されたバージョンが最初に一覧表示されます)。次のように、`PUBLISHED_TIME`の値の`--sort-by`パラメータを指定します。

```
aws codeartifact list-package-versions --domain my_domain --domain-owner 111122223333 --repository my_repository  \
--format npm --package webpack --max-results 5 --sort-by PUBLISHED_TIME
```

 サンプル出力: 

```
{

  "defaultDisplayVersion": "4.41.2",
  "format": "npm",
  "package": "webpack",
  "versions": [
      { 
        "version": "5.0.0-beta.7", 
        "revision": "REVISION-SAMPLE-1-C7F4S5E9B772FC",
        "status": "Published"
      },
      { 
        "version": "5.0.0-beta.6", 
        "revision": "REVISION-SAMPLE-2-C752BEEF6D2CFC",
        "status": "Published" 
      },
      { 
        "version": "5.0.0-beta.5", 
        "revision": "REVISION-SAMPLE-3-654S65A5C5E1FC",
        "status": "Published"
      },
      { 
        "version": "5.0.0-beta.4", 
        "revision": "REVISION-SAMPLE-4-AF669139B772FC",
        "status": "Published"
      },
      { 
        "version": "5.0.0-beta.3", 
        "revision": "REVISION-SAMPLE-5-C752BEE9B772FC",
        "status": "Published"
      }
  ],
  "nextToken": "eyJsaXN0UGF...."
}
```

## デフォルトの表示バージョン
<a name="list-package-versions-default-version"></a>

 パッケージ形式によって `defaultDisplayVersion` の戻り値が異なります。
+  ジェネリック、Maven、PyPI パッケージの場合、これは最近公開されたパッケージバージョンです。
+  npm パッケージの場合、これは`latest`タグによって参照されるバージョンです。その`latest`タグが設定されていない場合は、最近公開されたパッケージバージョンとなります。

## 出力形式
<a name="list-package-versions-format-output"></a>

 すべての AWS CLI コマンドで使用できるパラメータを使用して、`list-package-versions`レスポンスをコンパクトで読みやすくすることができます。`--query`パラメータを使用して、返される各パッケージバージョンの形式を指定します。`--output` パラメータを使用して、レスポンスをプレーンテキストとしてフォーマットします。

```
aws codeartifact list-package-versions --package my-package-name --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format npm --output text --query 'versions[*].[version]'
```

サンプル出力:

```
0.1.1
0.1.2
0.1.0
3.0.0
```

 詳細については、*[AWS Command Line Interface ユーザーガイド]* の [[ AWS CLIからのコマンド出力のコントロール]](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html) を参照してください。

# パッケージバージョンのアセットを一覧表示する
<a name="list-assets"></a>

*[アセット]* とは、 npm`.tgz`ファイルや Maven POM 、または JAR ファイルのように CodeArtifact に保存されていて、パッケージバージョンに関連付けられている個々のファイルのことを指します。`list-package-version-assets`コマンドを使用して、各パッケージバージョンのアセットを一覧表示します。

`list-package-version-assets` コマンドを実行して、 AWS アカウントと現在の AWS リージョンの各アセットに関する次の情報を返します。
+  名前。
+  サイズ (バイト単位)。
+  チェックサムの検証に使用されるハッシュ値のセット。

例えば、Python パッケージ`flatten-json`、バージョン`0.1.7`のアセットを一覧表示するには、次のコマンドを使用します。

```
aws codeartifact list-package-version-assets --domain my_domain --domain-owner 111122223333 \
 --repository my_repo --format pypi --package flatten-json \
 --package-version 0.1.7
```

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

```
{
    "format": "pypi",
    "package": "flatten-json",
    "version": "0.1.7",
    "versionRevision": "REVISION-SAMPLE-1-C7F4S5E9B772FC",
    "assets": [
        {
            "name": "flatten_json-0.1.7-py3-none-any.whl",
            "size": 31520,
            "hashes": {
                "MD5": "41bba98d5b9219c43089eEXAMPLE-MD5",
                "SHA-1": "69b215c25dd4cda1d997a786ec6EXAMPLE-SHA-1",
                "SHA-256": "43f24850b7b7b7d79c5fa652418518fbdf427e602b1edabe6EXAMPLE-SHA-256",
                "SHA-512": "3947382ac2c180ee3f2aba4f8788241527c8db9dfe9f4b039abe9fc560aaf5a1fced7bd1e80a0dca9ce320d95f0864e0dec3ac4f2f7b2b2cbEXAMPLE-SHA-512"
            }
        },
        {
            "name": "flatten_json-0.1.7.tar.gz",
            "size": 2865,
            "hashes": {
                "MD5": "41bba98d5b9219c43089eEXAMPLE-MD5",
                "SHA-1": "69b215c25dd4cda1d997a786ec6EXAMPLE-SHA-1",
                "SHA-256": "43f24850b7b7b7d79c5fa652418518fbdf427e602b1edabe6EXAMPLE-SHA-256",
                "SHA-512": "3947382ac2c180ee3f2aba4f8788241527c8db9dfe9f4b039abe9fc560aaf5a1fced7bd1e80a0dca9ce320d95f0864e0dec3ac4f2f7b2b2cbEXAMPLE-SHA-512"
            }
        }
    ]
}
```

## npm パッケージのアセットを一覧表示する
<a name="list-assets-npm"></a>

npm パッケージには、常に`package.tgz`という名前を持つ単一のアセットがあります。。スコープ指定された npm パッケージのアセットを一覧表示するには、`--namespace` オプションにスコープを含めます。

```
aws codeartifact list-package-version-assets --domain my_domain --domain-owner 111122223333 \
 --repository my_repo --format npm --package webpack \
 --namespace types --package-version 4.9.2
```

## Maven パッケージのアセットを一覧表示する
<a name="list-assets-maven"></a>

Maven パッケージのアセットを一覧表示するには、`--namespace` オプションにパッケージ名前空間を含めます。Maven パッケージのアセットを一覧表示するには`commons-cli:commons-cli`:

```
aws codeartifact list-package-version-assets --domain my_domain --domain-owner 111122223333 \
 --repository my_repo --format maven --package commons-cli \
 --namespace commons-cli --package-version 1.0
```

# パッケージバージョンアセットのダウンロード
<a name="download-assets"></a>

*[アセット]* とは、 npm`.tgz`ファイルや Maven POM 、または JAR ファイルのように CodeArtifact に保存されていて、パッケージバージョンに関連付けられている個々のファイルのことを指します。パッケージアセットは、`get-package-version-assets command`を使用してダウンロードすることができます。これにより、`npm`または`pip`のようなパッケージマネージャークライアントを使用せずにアセットを取得することができます。アセットをダウンロードするには、`list-package-version-assets` コマンドを使用して入手できるアセットの名前を提供する必要があります。詳細については、[パッケージバージョンのアセットを一覧表示する](list-assets.md)を参照してください。アセットは、指定したファイル名でローカルストレージにダウンロードされます。

次の例では、Maven パッケージの *[com.google.guava:guava]* のバージョン *<27.1-JRE>* から *<guava-27.1-jre.jar>*のアセットをダウンロードします。

```
aws codeartifact get-package-version-asset --domain my_domain --domain-owner 111122223333 --repository my_repo \
    --format maven --namespace com.google.guava --package guava --package-version 27.1-jre \
    --asset guava-27.1-jre.jar \
    guava-27.1-jre.jar
```

 この例では、ファイル名は上記のコマンドの最後の引数によって、*guava-27.1-jre.jar* と指定され、ダウンロードしたアセットは *guava-27.1-jre.jar* と名前が付けられます。

コマンドの出力は次のようになります。

```
{
    "assetName": "guava-27.1-jre.jar",
    "packageVersion": "27.1-jre",
    "packageVersionRevision": "YGp9ck2tmy03PGSxioclfYzQ0BfTLR9zzhQJtERv62I="
}
```

**注記**  
スコープ指定された npm パッケージからアセットをダウンロードするには、`--namespace` オプションにスコープを含めます。`--namespace` を使用するときは、`@` 記号を省略する必要があります。例えば、スコープが `@types` の場合は、`--namespace types` を使用します。

 `get-package-version-asset`を使用してアセットをダウンロードするには、パッケージリソースに対する`codeartifact:GetPackageVersionAsset`許可が必要となります。リソースベースの権限ポリシーの詳細については、*[AWS Identity and Access Management ユーザーガイド]* の [[リソースベースのポリシー]](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based) を参照してください。

# リポジトリ間でのパッケージのコピー
<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) を参照してください。

# パッケージまたはパッケージバージョンを削除する
<a name="delete-package"></a>

ひとつ以上のパッケージバージョンを一度に削除するには、`delete-package-versions`コマンドを使用できます。関連するすべてのバージョンと設定を含め、リポジトリからパッケージを完全に削除するには、`delete-package` コマンドを使用します。パッケージは、パッケージバージョンがなくてもリポジトリに存在できます。これは、`delete-package-versions` コマンドを使用してすべてのバージョンを削除した場合や、`put-package-origin-configuration` API オペレーションを使用してバージョンなしでパッケージを作成した場合に発生する可能性があります (「」を参照[パッケージオリジンコントロールの編集](package-origin-controls.md))。

**Topics**
+ [パッケージの削除 (AWS CLI)](#delete-package-CLI)
+ [パッケージの削除 (コンソール)](#delete-package-console)
+ [パッケージバージョンの削除 (AWS CLI)](#delete-package-version-CLI)
+ [パッケージバージョンの削除 (コンソール)](#delete-package-version-console)
+ [npm パッケージまたはパッケージバージョンの削除](#delete-package-npm)
+ [Maven パッケージまたはパッケージバージョンの削除](#delete-package-maven)
+ [パッケージまたはパッケージバージョンの削除におけるベストプラクティス](#delete-package-bp)

## パッケージの削除 (AWS CLI)
<a name="delete-package-CLI"></a>

`delete-package` コマンドを使用すると、パッケージとそのすべてのパッケージバージョンと設定を含むパッケージを削除できます。次の例では、`my_domain` ドメインの `my-package` リポジトリにある `my_repo` という名前の PyPI パッケージを削除します。

```
aws codeartifact delete-package --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi \
--package my-package
```

サンプル出力:

```
{
   "deletedPackage": { 
      "format": "pypi",
      "originConfiguration": { 
         "restrictions": { 
            "publish": "ALLOW",
            "upstream": "BLOCK"
         }
      },
      "package": "my-package"
   }
}
```

パッケージが削除されたことを確認するには、同じパッケージ名に対して `describe-package` を実行します。

```
aws codeartifact describe-package --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi --package my-package
```

## パッケージの削除 (コンソール)
<a name="delete-package-console"></a>

1. [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home) で AWS CodeArtifact コンソールを開きます。

1. ナビゲーションペインで、[**Repositories**] を選択します。

1. パッケージを削除する **[リポジトリ]** を選択します。

1. 削除する **[パッケージ]** を選択します。

1. **[パッケージを削除]** を選択します。

## パッケージバージョンの削除 (AWS CLI)
<a name="delete-package-version-CLI"></a>

ひとつ以上のパッケージバージョンを一度に削除するには、`delete-package-versions`コマンドを使用できます。以下の例では、`my_domain` ドメインの `my_repo` にある `my-package` という名前の PyPI パッケージパージョン `4.0.0`、`4.0.1`、および `5.0.0` を削除します。

```
aws codeartifact delete-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi \
--package my-package --versions 4.0.0 4.0.1 5.0.0
```

サンプル出力:

```
{
   "successfulVersions": {
      "4.0.0": {
         "revision": "oxwwYC9dDeuBoCt6+PDSwL6OMZ7rXeiXy44BM32Iawo=",
            "status": "Deleted"
      },
      "4.0.1": {
         "revision": "byaaQR748wrsdBaT+PDSwL6OMZ7rXeiBKM0551aqWmo=",
            "status": "Deleted"
      },
      "5.0.0": {
         "revision": "yubm34QWeST345ts+ASeioPI354rXeiSWr734PotwRw=",
            "status": "Deleted"
      }
   },
   "failedVersions": {}
}
```

バージョンが削除されたことを確認するには、`list-package-versions`を同じパッケージ名で実行してください:

```
aws codeartifact list-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi --package my-package
```

## パッケージバージョンの削除 (コンソール)
<a name="delete-package-version-console"></a>

1. [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home) で AWS CodeArtifact コンソールを開きます。

1. ナビゲーションペインで、[**Repositories**] を選択します。

1. パッケージバージョンを削除する **[リポジトリ]** を選択します。

1. バージョンを削除する **[パッケージ]** を選択します。

1. 削除する **[パッケージバージョン]** を選択します。

1. **[削除]** を選択します。
**注記**  
コンソールで一度に削除できるパッケージバージョンは 1 つのみです。一度に複数を削除するには、CLI を使用します。

## npm パッケージまたはパッケージバージョンの削除
<a name="delete-package-npm"></a>

npm パッケージ、または個別のパッケージバージョンを削除するには、`--format` オプションを `npm` に設定します。スコープ内の npm パッケージを削除するには、`--namespace` オプションを使用して、スコープを指定します。例えば、`@types/react` パッケージを削除するには、`--namespace types` を使用します。`--namespace` を使用する際は、`@` 記号を省略します。

```
aws codeartifact delete-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format npm --namespace types \
--package react --versions 0.12.2
```

`@types/react` パッケージをそのすべてのバージョンも含めて削除するには:

```
aws codeartifact delete-package --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format npm --namespace types \
--package react
```

## Maven パッケージまたはパッケージバージョンの削除
<a name="delete-package-maven"></a>

Maven パッケージ、または個別のパッケージバージョンを削除するには、`--format` オプションを `maven` に設定し、`--namespace` オプションで Maven グループ ID を、`--name` オプションで Maven artifactID を渡して、削除するパッケージを指定します。次の例は、`com.google.guava:guava` の単一のバージョンを削除する方法を示しています。

```
 aws codeartifact delete-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format maven --namespace com.google.guava \
--package guava --versions 27.1-jre
```

次の例は、`com.google.guava:guava` パッケージとそのバージョンをすべて削除する方法を示しています。

```
 aws codeartifact delete-package --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format maven --namespace com.google.guava \
--package guava
```

## パッケージまたはパッケージバージョンの削除におけるベストプラクティス
<a name="delete-package-bp"></a>

パッケージバージョンを削除する必要がある場合は、ベストプラクティスとして、リポジトリを作成し、削除するパッケージバージョンのバックアップコピーを保存することをお勧めします。これを行うには、まず `copy-package-versions` をバックアップリポジトリに呼び出します。

```
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
```

パッケージバージョンをコピーした後に、削除するパッケージまたはパッケージバージョンに対して `delete-package-versions` を呼び出すことができます。

```
aws codeartifact delete-package-versions --domain my_domain --domain-owner 111122223333 \
--repository my_repo --format pypi \
--package my-package --versions 4.0.0 4.0.1 5.0.0
```

# パッケージのバージョンの詳細と依存関係の表示および更新
<a name="describe-package-version"></a>

CodeArtifact では、依存関係を含むパッケージのバージョンに関する情報を表示できます。パッケージバージョンのステータスを更新することもできます。パッケージのバージョンのステータスの詳細については、[パッケージバージョンのステータス](packages-overview.md#package-version-status)を参照してください。

## パッケージバージョンの詳細を表示
<a name="view-package-details"></a>

 `describe-package-version`コマンドを使用して、パッケージのバージョンの詳細を表示します。パッケージバージョンの詳細は、パッケージが CodeArtifact に公開されるときにパッケージから抽出されます。異なるパッケージの詳細は異なり、形式や作成者が追加した情報の量によって異なります。

 `describe-package-version`コマンドの出力にあるほとんどの情報は、パッケージ形式に応じて異なります。例えば、`describe-package-version`は`package.json`ファイルから npm パッケージの情報を抽出します。リビジョンは CodeArtifact によって作成されます。詳細については、「[パッケージバージョンリビジョンの指定](copy-package.md#specify-package-version-revision)」を参照してください。

 同じ名前を持つ二つのパッケージバージョンは、それぞれ異なるネームスペースに存在する場合、同じリポジトリに配置できます。オプションの`--namespace`パラメータを使用して、ネームスペースを指定します。詳細については、[npm パッケージバージョンの詳細の表示](#describe-package-version-npm)または[Maven パッケージバージョンの詳細の表示](#describe-package-version-maven)を参照してください。

 次の例では、`my_repo`リポジトリ内の`pyhamcrest`という名前の Python パッケージのバージョン`1.9.0`の詳細を返します。

```
aws codeartifact describe-package-version --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format pypi --package pyhamcrest --package-version 1.9.0
```

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

```
{
  "format": "pypi",
  "package": "PyHamcrest",
  "displayName": "PyHamcrest",
  "version": "1.9.0",
  "summary": "Hamcrest framework for matcher objects",
  "homePage": "https://github.com/hamcrest/PyHamcrest",
  "publishedTime": 1566002944.273,
  "licenses": [
    {
      "id": "license-id",
      "name": "license-name"
    }
  ],
  "revision": "REVISION-SAMPLE-55C752BEE9B772FC"
}
```

**注記**  
CodeArtifact は、パッケージのホームページやパッケージライセンス情報などのパッケージバージョンの詳細を、パッケージ作成者が提供するメタデータから取得します。この情報のいずれかが DynamoDB 項目の上限サイズである 400 KB を超える場合、CodeArtifact はそのデータを処理できず、コンソールまたは `describe-package-version` のレスポンスにこの情報が表示されない可能性があります。例えば、[https://pypi.org/project/rapyd-sdk/](https://pypi.org/project/rapyd-sdk/) などの Python パッケージのライセンスフィールドは非常に大きいため、この情報は CodeArtifact では処理されません。

## npm パッケージバージョンの詳細の表示
<a name="describe-package-version-npm"></a>

npm パッケージバージョンの詳細を表示するには、`--format` オプションの値を **npm** に設定します。`--namespace` オプションで、パッケージバージョンの名前空間 (npm *scope*) をオプションに含めます。`--namespace`オプションの値には`@`の先頭を含めないでください。ネームスペース`@types`を検索するには、値を *[タイプ]* に設定します。

以下は、`@types` スコープ内の `webpack` という名前の npm パッケージバージョン `4.41.5` の詳細を返します。

```
aws codeartifact describe-package-version --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format npm --package webpack --namespace types --package-version 4.41.5
```

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

```
{
  "format": "npm",
  "namespace": "types",
  "package": "webpack",
  "displayName": "webpack",
  "version": "4.41.5",
  "summary": "Packs CommonJs/AMD modules for the browser. Allows ... further output omitted for brevity",
  "homePage": "https://github.com/webpack/webpack",
  "sourceCodeRepository": "https://github.com/webpack/webpack.git",
  "publishedTime": 1577481261.09,
  "licenses": [
    {
      "id": "license-id",
      "name": "license-name"
    }
  ],
  "revision": "REVISION-SAMPLE-55C752BEE9B772FC",
  "status": "Published",
  "origin": {
            "domainEntryPoint": {
                "externalConnectionName": "public:npmjs"
            },
            "originType": "EXTERNAL"
  }
}
```

## Maven パッケージバージョンの詳細の表示
<a name="describe-package-version-maven"></a>

Maven パッケージバージョンの詳細を表示するには、`--format` オプションの値を `maven` に設定し、パッケージバージョンの名前空間を `--namespace` オプションに含めます。

 次の例では、`org.apache.commons`ネームスペースと`my_repo`リポジトリに存在する`commons-rng-client-api`という名前の Maven パッケージのバージョン`1.2`の詳細を返します。

```
aws codeartifact describe-package-version --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format maven --namespace org.apache.commons --package commons-rng-client-api --package-version 1.2
```

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

```
{
  "format": "maven",
  "namespace": "org.apache.commons",
  "package": "commons-rng-client-api",
  "displayName": "Apache Commons RNG Client API",
  "version": "1.2",
  "summary": "API for client code that uses random numbers generators.",
  "publishedTime": 1567920624.849,
  "licenses": [],
  "revision": "REVISION-SAMPLE-55C752BEE9B772FC"
}
```

**注記**  
CodeArtifact は、親 POM ファイルからパッケージバージョンの詳細情報を抽出しません。特定のパッケージバージョンのメタデータには、正確なパッケージバージョンの POM 内の情報のみが含まれ、POM `parent` タグを使用して推移的に参照される親 POM やその他の POM の情報は含まれません。つまり、`describe-package-version` の出力では、このメタデータを含む `parent` 参照に依存している Maven パッケージバージョンのメタデータ (ライセンス情報など) は省略されます。

## パッケージバージョンの依存関係を表示する
<a name="view-package-dependencies"></a>

 `list-package-version-dependencies`コマンドを使用すると、パッケージバージョンの依存関係のリストを取得できます。次のコマンドは、`my_domain`ドメインの`my_repo`リポジトリのバージョン`4.41.5`の`my-package`という名前の npm パッケージの依存関係を一覧表示します。

```
aws codeartifact list-package-version-dependencies --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format npm --package my-package --package-version 4.41.5
```

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

```
{
  "dependencies": [
    {
      "namespace": "webassemblyjs",
      "package": "ast",
      "dependencyType": "regular",
      "versionRequirement": "1.8.5"
    },
    {
      "namespace": "webassemblyjs",
      "package": "helper-module-context",
      "dependencyType": "regular",
      "versionRequirement": "1.8.5"
    },
    {
      "namespace": "webassemblyjs",
      "package": "wasm-edit",
      "dependencyType": "regular",
      "versionRequirement": "1.8.5"
    }
  ],
  "versionRevision": "REVISION-SAMPLE-55C752BEE9B772FC"
}
```

dependencyType フィールドでサポートされている値の範囲については、*CodeArtifact API* の [PackageDependency](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_PackageDependency.html) データ型を参照してください。

## パッケージバージョンの readme ファイルの表示
<a name="view-package-readme"></a>

 npm などの一部のパッケージ形式には、`README`ファイルが含まれます。`get-package-version-readme`を使用してパッケージバージョンの`README`ファイルを取得します。次のコマンドは、`my_domain`ドメインの`my_repo`リポジトリにあるバージョン`4.41.5`の`my-package`という名前の npm パッケージの`README`ファイルを返します。

**注記**  
CodeArtifact は、ジェネリックパッケージまたは Maven パッケージの readme ファイルの表示をサポートしていません。

```
aws codeartifact get-package-version-readme --domain my_domain --domain-owner 111122223333 --repository my_repo \
--format npm --package my-package --package-version 4.41.5
```

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

```
{  
  "format": "npm",
  "package": "my-package",
  "version": "4.41.5"
  "readme": "<div align=\"center\">\n   <a href=\https://github.com/webpack/webpack\"> ... more content ... \n",
  "versionRevision": "REVISION-SAMPLE-55C752BEE9B772FC"
}
```

# パッケージバージョンのステータスの更新
<a name="update-package-version-status"></a>

CodeArtifact のすべてのパッケージバージョンには、パッケージバージョンの現在の状態と使用可用性を示すステータスがあります。パッケージバージョンのステータスは、 AWS CLI と コンソールの両方を使用して変更できます。

**注記**  
使用可能なステータスのリストを含む、パッケージバージョンのステータスの詳細については、[パッケージバージョンのステータス](packages-overview.md#package-version-status)を参照してください。

## パッケージバージョンのステータスの更新
<a name="updating-pv-status"></a>

パッケージバージョンのステータスを設定することで、そのパッケージバージョンをリポジトリから完全に削除することなく、使用方法をコントロールできます。例えば、パッケージバージョンのステータスが`Unlisted`の場合、通常どおりダウンロードすることはできますが、`npm view`のようなコマンドに戻されたパッケージバージョンリストには表示されません。[[パッケージのバージョンステータスのアップロード API]](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_UpdatePackageVersionsStatus.html) では、単一の API コールで、同じパッケージの複数のバージョンのパッケージバージョンステータスを設定することができます。さまざまなステータスの説明については、[パッケージの概要](packages-overview.md)を参照してください。

`update-package-versions-status`コマンドを使用して、パッケージバージョンのステータスを`Published`、`Unlisted`、または`Archived`に変更します コマンドを使用するために必要な IAM 権限を要求するには、[パッケージバージョンのステータスを更新するために必要な IAM 権限](#update-package-version-status-iam)を参照してください。次の例では、npm パッケージ`chalk`のバージョン 4.1.0 のステータスを`Archived`に設定します。

```
aws codeartifact update-package-versions-status --domain my_domain
 --domain-owner 111122223333 --repository my_repo --format npm --package chalk 
--versions 4.1.0 --target-status Archived
```

サンプル出力:

```
{
    "successfulVersions": {
        "4.1.0": {
            "revision": "+Oz8skWbwY3k8M6SrNIqNj6bVH/ax+CxvkJx+No5j8I=",
            "status": "Archived"
        }
    },
    "failedVersions": {}
}
```

この例では、npm パッケージを使用しますが、このコマンドは他の形式でも同じように機能します。ひとつのコマンドを使用して、複数のバージョンを同じターゲットステータスに移動できます。次の例を参照してください。

```
aws codeartifact update-package-versions-status --domain my_domain
 --domain-owner 111122223333 --repository my_repo --format npm --package chalk 
--versions 4.1.0 4.1.1 --target-status Archived
```

サンプル出力:

```
{
    "successfulVersions": {
        "4.1.0": {
            "revision": "25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=",
            "status": "Archived"
        },
        "4.1.1": {
            "revision": "+Oz8skWbwY3k8M6SrNIqNj6bVH/ax+CxvkJx+No5j8I=",
            "status": "Archived"
        }
    },
    "failedVersions": {}
}
```

いったん公開されると、パッケージバージョンを`Unfinished`ステータスに戻せないので、このステータスは`--target-status`パラメータの値として許可されません。パッケージバージョンを`Disposed`の状態に動かすためには、代わりに以下のように`dispose-package-versions`コマンドを使用します。

## パッケージバージョンのステータスを更新するために必要な IAM 権限
<a name="update-package-version-status-iam"></a>

パッケージに `update-package-versions-status` を呼び出す場合は、パッケージリソースに対する `codeartifact:UpdatePackageVersionsStatus` 権限が必要です。つまり、パッケージごとに `update-package-versions-status` を呼び出す権限を付与することができます。例えば、npm パッケージ *[チョーク]* の `update-package-versions-status` を呼び出す許可を付与する IAM ポリシーには、次のようなステートメントが含まれます。

```
{
  "Action": [
    "codeartifact:UpdatePackageVersionsStatus"
  ],
  "Effect": "Allow",
  "Resource": "arn:aws:codeartifact:us-east-1:111122223333:package/my_domain/my_repo/npm//chalk"
}
```

## スコープ指定された npm パッケージのステータスの更新
<a name="update-package-version-status-scoped-npm"></a>

スコープを使用して npm パッケージバージョンのパッケージバージョンステータスを更新するには、`--namespace`パラメータを使用してください。例えば、`@nestjs/core`のバージョン 8.0.0 を一覧表示しないようにするためには、次のようなコマンドを使用します。

```
aws codeartifact update-package-versions-status --domain my_domain
 --domain-owner 111122223333 --repository my_repo --format npm --namespace nestjs 
--package core --versions 8.0.0 --target-status Unlisted
```

## Maven パッケージのステータスの更新
<a name="update-package-version-status-maven"></a>

Maven パッケージには常にグループ ID があり、CodeArtifact では名前空間と呼ばれます。`update-package-versions-status` を呼び出す際は、`--namespace` パラメータで Maven グループ ID を指定します。例えば、Maven パッケージ `org.apache.logging.log4j:log4j` のバージョン 2.13.1 をアーカイブするには、以下のコマンドを使用します。

```
aws codeartifact update-package-versions-status --domain my_domain
 --domain-owner 111122223333 --repository my_repo --format maven 
--namespace org.apache.logging.log4j --package log4j 
--versions 2.13.1 --target-status Archived
```

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

パッケージバージョンリビジョンは、パッケージバージョンの特定のアセットとメタデータのセットを指定する文字列です。パッケージバージョンリビジョンを指定して、特定の状態にあるパッケージバージョンを更新できます。パッケージバージョンのリビジョンを指定するには、`--version-revisions` パラメータを使用して、ひとつ以上のカンマ区切りパッケージバージョンとパッケージバージョンリビジョンのペアを渡します。パッケージバージョンのステータスは、パッケージバージョンの現在のリビジョンが指定された値と一致する場合にのみ更新されます。

**注記**  
`--version-revisions`パラメータを使用する場合、`—-versions`パラメータも定義する必要があります。

```
aws codeartifact update-package-versions-status --domain my_domain 
   --domain-owner 111122223333 --repository my_repo --format npm --package chalk 
   --version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8bzVMJ4=" 
   --versions 4.1.0 --target-status Archived
```

ひとつのコマンドで複数のバージョンを更新するには、バージョンのカンマ区切りリストとバージョンリビジョンのペアを`--version-revisions`オプションに渡します。次のコマンドの例では、二つの異なるパッケージバージョンとパッケージバージョンのリビジョンのペアを定義します。

```
aws codeartifact update-package-versions-status --domain my_domain 
 --domain-owner 111122223333 --repository my_repo --format npm 
 --package chalk
 --version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=,4.0.0=E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc="  
 --versions 4.1.0 4.0.0 --target-status Published
```

サンプル出力:

```
{
    "successfulVersions": {
        "4.0.0": {
            "revision": "E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=",
            "status": "Published"
        },
        "4.1.0": {
            "revision": "25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=",
            "status": "Published"
        }
    },
    "failedVersions": {}
}
```

複数のパッケージバージョンを更新する場合、`--version-revisions`に渡されますバージョンが`--versions`に渡されたバージョンと同じである必要があります。リビジョンが正しく指定されていない場合、そのバージョンのステータスは更新されません。

## 期待されるステータスパラメータの使用
<a name="using-expected-status"></a>

`update-package-versions-status`コマンドは、パッケージバージョンの予想される現在のステータスの指定をサポートする`--expected-status`パラメータを提供します。現在のステータスが`--expected-status`に渡された値と一致しない場合、そのパッケージバージョンのステータスは更新されません。

例えば、*[my\$1repo]* の、npm パッケージ`chalk`のバージョン 4.0.0 および 4.1.0 には、現在`Published`のステータスがあります。`Unlisted`の期待されるステータスを指定する`update-package-versions-status`への呼び出しは、ステータスが一致しないため、両方のパッケージバージョンの更新ができません。

```
aws codeartifact update-package-versions-status --domain my_domain
--domain-owner 111122223333 --repository my_repo --format npm --package chalk 
--versions 4.1.0 4.0.0 --target-status Archived --expected-status Unlisted
```

サンプル出力:

```
{
    "successfulVersions": {},
    "failedVersions": {
        "4.0.0": {
            "errorCode": "MISMATCHED_STATUS",
            "errorMessage": "current status: Published, expected status: Unlisted"
        },
        "4.1.0": {
            "errorCode": "MISMATCHED_STATUS",
            "errorMessage": "current status: Published, expected status: Unlisted"
        }
    }
}
```

## 個々のパッケージバージョンでのエラー
<a name="update-package-version-status-errors"></a>

`update-package-versions-status`を呼び出すときにパッケージバージョンのステータスが更新されない理由は複数あります。例えば、パッケージバージョンのリビジョンが正しく指定されていなかったり、予期されるステータスが現在のステータスと一致しない可能性があります。このような場合、そのバージョンは API レスポンスの`failedVersions`マップに含まれます。ひとつのバージョンが失敗した場合、`update-package-versions-status`への同じ呼び出しで指定された他のバージョンがスキップされ、ステータスが更新されない可能性があります。このようなバージョンは、`SKIPPED`の`errorCode`で`failedVersions`マップにも含まれます。

`update-package-versions-status`の現在の実装では、ひとつ以上のバージョンがステータスを変更できない場合、他のすべてのバージョンはスキップされます。つまり、すべてのバージョンが正常に更新されるか、すべてのバージョンが更新されないかです。この動作は API コントラクトでは保証されません。将来的には、一部のバージョンは成功し、他のバージョンは`update-package-versions-status`への 一度の呼び出しで失敗する可能性があります。

次のコマンドの例には、パッケージバージョンのリビジョンの不一致によるバージョンステータス更新の失敗が含まれます。この更新に障害があると、別のバージョンステータス更新の呼び出しがスキップされます。

```
aws codeartifact update-package-versions-status --domain my_domain
  --domain-owner 111122223333 --repository my_repo 
  --format npm --package chalk 
  --version-revisions "4.1.0=25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ=,4.0.0=E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=" 
  --versions 4.1.0 4.0.0 --target-status Archived
```

サンプル出力:

```
{
    "successfulVersions": {},
    "failedVersions": {
        "4.0.0": {
            "errorCode": "SKIPPED",
            "errorMessage": "version 4.0.0 is skipped"
        },
        "4.1.0": {
            "errorCode": "MISMATCHED_REVISION",
            "errorMessage": "current revision: 25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ4=, expected revision: 25/UjBleHs1DZewk+zozoeqH/R80Rc9gL1P8vbzVMJ="
        }
    }
}
```

## パッケージバージョンの廃棄
<a name="dispose-package-versions"></a>

`Disposed`パッケージのステータスは、`Archived`と同様の動作をします。ただし、パッケージアセットは CodeArtifact によって完全に削除されるため、ドメイン所有者のアカウントがアセットストレージに対してこれ以降請求されなくなります。各パッケージバージョンのステータスの詳細については、「[パッケージバージョンのステータス](packages-overview.md#package-version-status)」を参照してください。パッケージバージョンのステータスを`Disposed`に変更するには、`dispose-package-versions`コマンドを使用してください。この機能は`update-package-versions-status`とは別個のものです。それは、パッケージバージョンの破棄が可逆的なものでないからです。パッケージアセットが削除されるため、バージョンのステータスを`Archived`、`Unlisted`、または`Published`に戻すことはできません。廃棄されたパッケージバージョンに対して実行できる唯一のアクションは、`delete-package-versions`コマンドを使用して削除することだけです。

`dispose-package-versions` の呼び出しに成功するには、呼び出し IAM プリンシパルがパッケージリソースに対する `codeartifact:DisposePackageVersions` 権限を持っている必要があります。

`dispose-package-versions` コマンドの動作は、`update-package-versions-status` と同様であり、[バージョンリビジョン](#update-status-specify-package-version-revision)および[予期されるステータス](#using-expected-status)のセクションで説明されている `--version-revisions ` および `--expected-status` のオプションの動作も含まれます。例えば、次のコマンドはパッケージバージョンを破棄しようとしますが、予期されるステータスが一致しないために失敗します。

```
aws codeartifact dispose-package-versions —domain my_domain --domain-owner 111122223333 
--repository my_repo --format npm --package chalk --versions 4.0.0 
--expected-status Unlisted
```

サンプル出力:

```
{
    "successfulVersions": {},
    "failedVersions": {
        "4.0.0": {
            "errorCode": "MISMATCHED_STATUS",
            "errorMessage": "current status: Published, expected status: Unlisted"
        }
    }
}
```

同じコマンドを`Published`の`--expected-status`で再び実行すれば、破棄は成功します。

```
aws codeartifact dispose-package-versions —domain my_domain --domain-owner 111122223333 
--repository my_repo --format npm --package chalk --versions 4.0.0 
--expected-status Published
```

サンプル出力:

```
{
    "successfulVersions": {
        "4.0.0": {
            "revision": "E3lhBp0RObRTut4pkjV5c1AQGkgSA7Oxtil6hMMzelc=",
            "status": "Disposed"
        }
    },
    "failedVersions": {}
}
```

# パッケージオリジンコントロールの編集
<a name="package-origin-controls"></a>

In AWS CodeArtifact では、パッケージバージョンを直接公開するか、アップストリームリポジトリからプルダウンするか、外部パブリックリポジトリから取り込むことで、パッケージバージョンをリポジトリに追加できます。直接公開とパブリックリポジトリからの取り込みの両方の方法でパッケージバージョンの追加を許可すると、依存関係置換攻撃に対して脆弱になります。詳細については、「[依存関係置換攻撃](dependency-substitution-attacks.md)」を参照してください。依存関係置換攻撃から保護するには、リポジトリ内のパッケージにパッケージオリジンコントロールを設定して、パッケージバージョンをリポジトリに追加する方法を制限します。

さまざまなパッケージの新しいバージョンを、直接公開などの内部ソースとパブリックリポジトリなどの外部ソースの両方から入手できるようにしたいと考えているチームは、パッケージオリジンコントロールの設定を検討する必要があります。デフォルトでは、パッケージオリジンコントロールは、パッケージの最初のバージョンがリポジトリに追加された方法に基づいて設定されます。パッケージオリジンコントロール設定とそのデフォルト値については、「[パッケージオリジンコントロール設定](#package-origin-control-settings)」を参照してください。

`put-package-origin-configuration` API オペレーションを使用した後にパッケージレコードを削除するには、「`delete-package`」を使用します (「[パッケージまたはパッケージバージョンを削除する](delete-package.md)」を参照)。

## 一般的なパッケージアクセスコントロールシナリオ
<a name="package-origin-control-scenarios"></a>

このセクションでは、パッケージバージョンが CodeArtifact リポジトリに追加される際のいくつかの一般的なシナリオについて説明します。パッケージオリジンコントロール設定は、最初のパッケージバージョンが追加された方法に基づいて、新しいパッケージに設定されます。

以下のシナリオの*内部パッケージ*は、パッケージマネージャーからリポジトリに直接公開されるパッケージ (ユーザーまたはチームが作成、管理するパッケージなど) を指します。*外部パッケージ*は、パブリックリポジトリに存在するパッケージで、外部接続でリポジトリに取り込むことができます。

**外部パッケージバージョンが既存の内部パッケージに公開される**

このシナリオでは、内部パッケージ「*packageA*」について考えてみます。チームは *packageA* の最初のパッケージバージョンを CodeArtifact リポジトリに公開します。これはパッケージの最初のパッケージバージョンであるため、パッケージオリジンコントロール設定は自動的に **[公開: 許可]** および **[アップストリーム: ブロック]** に設定されます。パッケージがリポジトリに保存されると、同じ名前のパッケージが CodeArtifact リポジトリに接続されているパブリックリポジトリに公開されます。これは、内部パッケージに対して試みられた依存関係置換攻撃である場合も、単なる偶然である場合もあり得ます。いずれの場合でも、パッケージオリジンコントロールは、潜在的な攻撃からパッケージバージョンを保護するために、新しい外部バージョンの取り込みをブロックするように設定されています。

次の画像では、*repoA* はパブリックリポジトリへの外部接続を持つ CodeArtifact リポジトリを表します。リポジトリには *packageA* のバージョン 1.1 と 2.1 が含まれていますが、バージョン 3.0 はパブリックリポジトリに公開されています。通常、*repoA* はパッケージマネージャーからパッケージがリクエストされた後にバージョン 3.0 を取り込みます。パッケージの取り込みが **[ブロック]** に設定されているため、バージョン 3.0 は CodeArtifact リポジトリに取り込まれず、接続しているパッケージマネージャーからは使用できません。

![\[パブリックリポジトリからブロックされている新しい外部パッケージバージョンを示すシンプルな図。\]](http://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/images/package-origin-controls-one.png)


**内部パッケージバージョンが既存の外部パッケージに公開される**

このシナリオでは、*packageB* という名前のパッケージは、リポジトリに接続したパブリックリポジトリの外部に存在します。リポジトリに接続しているパッケージマネージャーが *packageB* をリクエストすると、パッケージバージョンはパブリックリポジトリからリポジトリに取り込まれます。これは *packageB* の最初のパッケージバージョンであるため、パッケージオリジンコントロール設定は自動的に **[公開: ブロック]** および **[アップストリーム: 許可]** に設定されます。その後、ユーザーは同じパッケージ名のバージョンをリポジトリに公開しようとします。ここでは、ユーザーが公開パッケージを知らず、関連のないパッケージを同じ名前で公開しようとしているか、パッチが適用されたバージョンを公開しようとしているか、外部にすでに存在するパッケージバージョンとまったく同じものを直接公開しようとしている場合が考えられます。CodeArtifact は、公開しようとしているバージョンを拒否しますが、拒否を明示的にオーバーライドして、必要に応じてバージョンを公開することができます。

次の画像では、*repoA* はパブリックリポジトリへの外部接続を持つ CodeArtifact リポジトリを表します。リポジトリには、パブリックリポジトリから取り込んだバージョン 3.0 が含まれています。ユーザーは、バージョン 1.1 をリポジトリに公開したいと考えています。通常、バージョン 1.2 を *repoA* に公開できますが、公開が **[ブロック]** に設定されているため、バージョン 1.2 は公開できません。

![\[パブリックリポジトリからブロックされている新しい外部パッケージバージョンを示すシンプルな図。\]](http://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/images/package-origin-controls-two.png)


**既存の外部パッケージにパッチを適用したパッケージバージョンを公開する**

このシナリオでは、*packageB* という名前のパッケージは、リポジトリに接続したパブリックリポジトリの外部に存在します。リポジトリに接続しているパッケージマネージャーが *packageB* をリクエストすると、パッケージバージョンはパブリックリポジトリからリポジトリに取り込まれます。これは *packageB* の最初のパッケージバージョンであるため、パッケージオリジンコントロール設定は自動的に **[公開: ブロック]** および **[アップストリーム: 許可]** に設定されます。チームは、このパッケージのパッチが適用されたパッケージバージョンをリポジトリに公開することを決めました。パッケージバージョンを直接公開するために、チームはパッケージのオリジンコントロール設定を **[公開: 許可]** および **アップストリーム: ブロック]** に変更します。これで、このパッケージのバージョンをリポジトリに直接公開し、パブリックリポジトリから取り込むことができます。チームがパッチを適用したパッケージバージョンを公開した後、チームはパッケージオリジンの設定を **[公開: ブロック]** および **[アップストリーム: 許可]** に戻します。

## パッケージオリジンコントロール設定
<a name="package-origin-control-settings"></a>

パッケージオリジンコントロールでは、パッケージバージョンをリポジトリに追加する方法を設定できます。以下のリストには、使用可能なパッケージオリジンコントロールの設定と値が含まれています。

**注記**  
パッケージグループでオリジンコントロールを設定する場合、使用できる設定項目や値は異なります。詳細については、「[パッケージグループのオリジンコントロール](package-group-origin-controls.md)」を参照してください。

**公開**

この設定は、パッケージマネージャーや類似のツールを使用してパッケージのバージョンをリポジトリに直接公開できるかどうかを設定します。
+ **許可**: パッケージバージョンを直接公開できます。
+ **ブロック**: パッケージバージョンは直接公開できません。

**アップストリーム**

この設定は、パッケージマネージャーからのリクエストに応じて、パッケージバージョンを外部のパブリックリポジトリから取り込むことができるか、アップストリームリポジトリから保持できるかを設定します。
+ **許可**: すべてのパッケージバージョンは、アップストリームリポジトリとして設定された他の CodeArtifact リポジトリから保持することも、外部接続を使用してパブリックソースから取り込むこともできます。
+ **ブロック**: すべてのパッケージバージョンは、アップストリームリポジトリとして設定された他の CodeArtifact リポジトリから保持することも、外部接続を使用してパブリックソースから取り込むこともできません。

## パッケージオリジンコントロールのデフォルト設定
<a name="default-package-origin-control-settings"></a>

デフォルトのパッケージオリジンコントロール設定は、パッケージに関連付けられたパッケージグループのオリジンコントロール設定に基づいて設定されます。パッケージグループとパッケージグループのオリジンコントロールの詳細については、「[CodeArtifact でのパッケージグループの操作](package-groups.md)」および「[パッケージグループのオリジンコントロール](package-group-origin-controls.md)」を参照してください。

パッケージが、すべての制限タイプについて `ALLOW` の制限設定を持つパッケージグループに関連付けられている場合、パッケージのデフォルトのパッケージオリジンコントロールは、そのパッケージの最初のバージョンがどのようにリポジトリに追加されたかに基づいて決まります。
+ 最初のパッケージバージョンがパッケージマネージャーによって直接公開された場合、設定は **[公開: 許可]** と **[アップストリーム: ブロック]** になります。
+ 最初のパッケージバージョンがパブリックソースから取り込まれた場合、設定は **[公開: ブロック]** と **[アップストリーム: 許可]** になります。

**注記**  
2022 年 5 月以前に CodeArtifact リポジトリに存在していたパッケージでは、デフォルトのパッケージオリジンコントロールは **[公開: 許可]** と **[アップストリーム: 許可]** になります。このようなパッケージでは、パッケージオリジンコントロールを手動で設定する必要があります。それ以降は、新しいパッケージには現在のデフォルト値が設定され、2022 年 7 月 14 日にこの機能がリリースされた時点でデフォルト値が強制されるようになりました。パッケージオリジンコントロールの設定の詳細については、「[パッケージオリジンコントロールの編集](#edit-package-origin-controls)」を参照してください。

パッケージが、少なくとも 1 つ以上の `BLOCK` または `ALLOW_SPECIFIC_REPOSITORIES` の制限設定を持つパッケージグループに関連付けられている場合、そのパッケージのデフォルトのオリジンコントロール設定は**公開: ALLOW** および**アップストリーム: ALLOW** に設定されます。

## パッケージオリジンコントロールとパッケージグループオリジンコントロールの相互作用
<a name="package-origin-controls-interaction-package-groups"></a>

パッケージ、および関連するパッケージグループはそれぞれオリジンコントロール設定を備えているため、これらの 2 つの異なる設定がどのように相互作用するかを理解することが重要です。

両設定間の相互作用において、`BLOCK` の設定は常に `ALLOW` の設定よりも優先されます。次の表に、いくつかの設定例とその有効なオリジンコントロール設定を示します。


| パッケージオリジンコントロール設定 | パッケージグループオリジンコントロール設定 | 有効なオリジンコントロール設定 | 
| --- | --- | --- | 
| 公開: ALLOWアップストリーム: ALLOW | 公開: ALLOWアップストリーム: ALLOW | 公開: ALLOWアップストリーム: ALLOW | 
| 公開: BLOCKアップストリーム: ALLOW | 公開: ALLOWアップストリーム: ALLOW | 公開: BLOCKアップストリーム: ALLOW | 
| 公開: ALLOWアップストリーム: ALLOW | 公開: ALLOWアップストリーム: BLOCK | 公開: ALLOWアップストリーム: BLOCK | 

つまり、パッケージのオリジン設定が **公開: ALLOW** および**アップストリーム: ALLOW** になっている場合、そのパッケージは実質的に、関連付けられているパッケージグループのオリジンコントロール設定に従うことを意味します。

## パッケージオリジンコントロールの編集
<a name="edit-package-origin-controls"></a>

パッケージオリジンコントロールは、パッケージの最初のパッケージバージョンがリポジトリに追加された方法に基づいて自動的に設定されます。詳細については、「[パッケージオリジンコントロールのデフォルト設定](#default-package-origin-control-settings)」を参照してください。CodeArtifact リポジトリ内のパッケージのパッケージオリジンコントロールを追加または編集するには、次の手順に従います。

**パッケージオリジンコントロールを追加または編集するには (コンソール)**

1. [https://console.aws.amazon.com/codesuite/codeartifact/home](https://console.aws.amazon.com/codesuite/codeartifact/home) で AWS CodeArtifact コンソールを開きます。

1. ナビゲーションペインで **[リポジトリ]** を選択し、編集するパッケージを含むリポジトリを選択します。

1. **[パッケージ**] の表で、編集するパッケージを検索して選択します。

1. パッケージの概要ページの **[オリジンコントロール]** で、**[編集]** を選択します。

1. **[オリジンコントロールの編集]** で、パッケージに設定するパッケージオリジンコントロールを選択します。[公開] と [アップストリーム] の両方のパッケージオリジンコントロール設定を同時に設定する必要があります。
   + パッケージバージョンを直接公開できるようにするには、**[公開]** で **[許可]** を選択します。パッケージバージョンの公開を禁止するには、**[ブロック]** を選択します。
   + 外部リポジトリからのパッケージの取り込みとアップストリームリポジトリからのパッケージの取得を許可するには、**[アップストリームソース]** で **[許可]** を選択します。外部リポジトリおよびアップストリームリポジトリからのパッケージバージョンの取り込みとプルをすべてブロックするには、**[ブロック]** を選択します。

**パッケージオリジンコントロールを追加または編集するには (AWS CLI)**

1. まだ設定していない場合は、 AWS CLI 「」の手順に従って を設定します[AWS CodeArtifact でのセットアップ](get-set-up-for-codeartifact.md)。

1. パッケージオリジンコントロールを追加または編集するには `put-package-origin-configuration` を使用します。次のフィールドを変更します。
   + *my\$1domain* を、更新するパッケージを含む CodeArtifact ドメインで置換します。
   + *my\$1repo* を、更新するパッケージを含む CodeArtifact リポジトリで置換します。
   + *npm* を、更新するパッケージのパッケージの形式で置換します。
   + *my\$1package* を、更新するパッケージのパッケージの名前で置換します。
   + *[許可]* と *[ブロック]* を使用するパッケージオリジンコントロール設定で置換します。

   ```
   aws codeartifact put-package-origin-configuration --domain my_domain \
   --repository my_repo --format npm --package my_package \ 
   --restrictions publish=ALLOW,upstream=BLOCK
   ```

## 公開リポジトリとアップストリームリポジトリ
<a name="package-publishing-upstreams"></a>

CodeArtifact では、到達可能なアップストリームリポジトリまたは公開リポジトリに存在するパッケージバージョンを公開することはできません。例えば、Maven パッケージ`com.mycompany.mypackage:1.0`をリポジトリ`myrepo`に公開するとし、`myrepo`が Maven Central への外部接続を持つアップストリームリポジトリを持つとします。次のシナリオを考えてみます。

1. `com.mycompany.mypackage` 上のパッケージオリジンコントロール設定は、**[公開: 許可]** と **[アップストリーム: 許可]** です。もし `com.mycompany.mypackage:1.0` がアップストリームのリポジトリまたは Maven Central に存在する場合、CodeArtifact はそのリポジトリへの公開の試みを、`myrepo` 409 の競合エラーを通してすべて拒否します。`com.mycompany.mypackage:1.1` などの別のバージョンを公開することもできます。

1. `com.mycompany.mypackage` 上のパッケージオリジンコントロール設定は、**[公開: 許可]** と **[アップストリーム: ブロック]** です。ユーザーはパッケージバージョンにはアクセスできないため、まだ存在していないすべてのバージョンの `com.mycompany.mypackage` をリポジトリに公開できます。

1. `com.mycompany.mypackage` 上のパッケージオリジンコントロール設定は、**[公開: ブロック]** と **[アップストリーム: 許可]** です。この場合、どのパッケージバージョンもリポジトリに直接公開することはできません。