翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
[パッケージ] とは、依存関係の解決とソフトウェアのインストールに必要なソフトウェアとメタデータのバンドルです。CodeArtifact には、パッケージはパッケージ名、@types/node
に@types
などの [ネームスペース] (オプション) など、パッケージバージョンのセット、およびパッケージレベルのメタデータ (npm タグなど) が含まれます。
目次
サポートされるパッケージ形式
AWS CodeArtifact は、Cargo、Generic、Maven、npm、NuGet、PyPI、Ruby、Swift パッケージ形式をサポートしています。
メッセージの公開
サポートされるパッケージ形式はどれも新しいバージョンが、npm
、twine
、Maven
、Gradle
、nuget
、およびdotnet
などのツールを使い、CodeArtifact リポジトリで公開することができます。
公開許可
AWS Identity and Access Management (IAM) ユーザーまたはロールには、送信先リポジトリに発行するアクセス許可が必要です。パッケージを公開するには、以下の権限が必要です。
-
貨物:
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 アクセス許可リファレンス」を参照してください。
パッケージアセットの上書き
別のコンテンツで既に存在するパッケージアセットを再公開することはできません。例えば、JAR アセット mypackage-1.0.jar
を持つ Maven パッケージをすでに公開したとします。古いアセットのチェックサムと新しいアセットのチェックサムが同じである場合のみ、そのアセットを再度公開できます。新しいコンテンツで同じアセットを再公開するには、最初にdelete-package-versionsコマンドを使ってパッケージバージョンを削除してください。異なるコンテンツで同じアセット名を再公開しようとすると、HTTP 409 の競合エラーが発生します。
複数のアセット (PyPI と Maven) をサポートするパッケージ形式の場合、必要な権限を持っていれば、いつでも既存のパッケージバージョンに異なる名前の新しいアセットを追加できます。ジェネリックパッケージの場合、パッケージバージョンが Unfinished
状態にある限り、新しいアセットを追加できます。npm はパッケージバージョンごとにひとつのアセットしかサポートしないため、公開されたパッケージバージョンを何らかの方法で変更するには、まず、delete-package-versionsを使用してそれを削除する必要があります。
すでに存在するアセットを再公開しようとした場合 (例えば、mypackage-1.0.jar
)、公開されたアセットと新規アセットの内容が同じである場合、操作が冪等であるため、この操作は成功します。
プライベートパッケージと公開リポジトリ
CodeArtifact は、CodeArtifact リポジトリに保存されているパッケージを npmjs.com や Maven Central などの公開リポジトリに公開しません。CodeArtifact は、公開リポジトリから CodeArtifact リポジトリにパッケージをインポートしますが、パッケージを別の方向に移動することはありません。CodeArtifact リポジトリに発行するパッケージはプライベートのままで、アクセスを許可した AWS アカウント、ロール、およびユーザーのみが使用できます。
パッチが適用されたパッケージバージョンの公開
場合によっては、公開リポジトリで利用可能な変更パッケージバージョンを公開したい場合があります。例えば、mydep 1.1
という重要なアプリケーション依存関係にバグが見つかった場合、パッケージベンダーがその変更をレビューして承認できるよりも早く修正する必要があるとしましょう。前述のように、CodeArtifact リポジトリで、公開リポジトリがアップストリームのリポジトリと外部接続を介して CodeArtifact リポジトリから到達可能な場合、CodeArtifact はmydep 1.1
の公開を防ぎます。
この問題を回避するには、公開リポジトリに到達できない別の CodeArtifact リポジトリにパッケージバージョンを公開します。次に、copy-package-versions
API を使用し、パッチが適用された mydep 1.1
のバージョンを、使用先の CodeArtifact リポジトリにコピーします。
公開時のアセットサイズ制限
公開できるパッケージアセットの最大サイズは、「AWS CodeArtifact のクォータ」に示されているアセットファイルサイズの最大クォータによって制限されます。例えば、現在のアセットファイルサイズの最大クォータを超える Maven JAR または Python ホイールを公開することはできません。より大きなアセットを CodeArtifact に保存する場合は、クォータの引き上げをリクエストしてください。
アセットファイルサイズの最大クォータに加えて、npm パッケージの公開リクエストの最大サイズは 2 GB の制限があります。この制限はアセットファイルサイズの最大クォータとは関係なく、クォータを引き上げることで増やすことはできません。npm 公開リクエスト (HTTP PUT) では、パッケージメタデータと npm パッケージ tar アーカイブのコンテンツが一緒にバンドルされます。このため、公開できる npm パッケージの実際の最大サイズは、含まれるメタデータのサイズによって異なります。
注記
公開される npm パッケージの最大サイズは 2 GB 未満に制限されています。
公開時のレイテンシー
CodeArtifact リポジトリに公開されたパッケージバージョンは、多くの場合 1 秒未満でダウンロードできます。例えば、npm publish
で npm パッケージバージョンを CodeArtifact に公開した場合、そのバージョンは 1 秒以内に npm
install
コマンドで使用できるようになります。ただし、公開には一貫性がなく、時間がかかることがあります。公開後すぐにパッケージバージョンを使用する必要がある場合は、再試行を行ってダウンロードの信頼性を確保してください。例えば、パッケージバージョンを公開した後、公開したばかりのパッケージバージョンが最初にダウンロードできなかった場合は、ダウンロードを最大 3 回繰り返します。
注記
通常、パブリックリポジトリからパッケージバージョンをインポートすると、公開よりも時間がかかります。詳細については、「外部接続のレイテンシー」を参照してください。
パッケージバージョンのステータス
CodeArtifact のすべてのパッケージバージョンには、パッケージバージョンの現在の状態と使用可用性を示すステータスがあります。 AWS CLI と SDK で、パッケージバージョンのステータスを変更することができます。詳細については、「パッケージバージョンのステータスの更新」を参照してください。
パッケージバージョンのステータスに設定できる値は以下の通りです。
-
[公開] - パッケージバージョンは正常に公開され、パッケージマネージャーを使用してリクエストできます。パッケージバージョンは、
npm view <package-name> versions
の出力など、パッケージマネージャーによって返されるパッケージバージョンリストに含まれます。パッケージバージョンのすべてのアセットは、リポジトリから入手できます。 -
[未完了] - クライアントはパッケージバージョンの 1 つ以上のアセットをアップロードしましたが、それを
Published
状態に移行してアップロードを完了することができませんでした。現在Unfinished
のステータスになり得るのは、ジェネリックパッケージバージョンと Maven パッケージバージョンのみです。これは、クライアントがパッケージバージョンの 1 つ以上のアセットをアップロードしたものの、そのバージョンを含むパッケージのmaven-metadata.xml
ファイルを公開しなかった場合に発生します。Maven パッケージバージョンが [未完了] の場合、mvn
やgradle
などのクライアントに返されるバージョンリストには含まれないため、ビルドの一部として使用することはできません。PublishPackageVersion API を呼び出すときにunfinished
フラグを指定することで、ジェネリックパッケージを意図的にUnfinished
状態に保つことができます。ジェネリックパッケージをPublished
状態に変更するには、unfinished
フラグを省略するか、UpdatePackageVersionsStatus API を呼び出します。 -
[一覧表示されていない] - パッケージバージョンのアセットはリポジトリからダウンロードできますが、パッケージマネージャーによって返されるパッケージバージョンのリストには含まれません。例えば、npm パッケージの場合、
npm view <package-name> versions
の出力にパッケージバージョンは含まれません。つまり、npm の依存関係解決論理は、使用可能なバージョンのリストに表示されないため、パッケージのバージョンを選択しません。ただし、[一覧表示されていない] パッケージバージョンがすでにすべてのnpm package-lock.json
ファイルで参照されていれば、npm ci
の実行時などに、ダウンロードしてインストールできます。 -
[アーカイブ済み] - パッケージバージョンのアセットはこれ以降ダウンロードできません。パッケージバージョンは、パッケージマネージャーによって返されるバージョンのリストには含まれません。アセットが使用できないため、クライアントによるパッケージバージョンの使用はブロックされます。アプリケーションのビルドが、[アーカイブ済み] に更新されたバージョンに依存している場合、パッケージのバージョンがローカルにキャッシュされていないと仮定されるため、構築は中断されます。[アーカイブ済み] パッケージバージョンがまだリポジトリに存在するため、パッケージマネージャーまたはビルドツールを使用して再度公開することはできません。しかし、パッケージバージョンのステータスを [パッケージのバージョンステータスのアップロード API] で [一覧表示されていない] または [公開] にすることは可能です。
-
[開放済み] - パッケージバージョンはリストに表示されず、アセットをリポジトリからダウンロードできません。[開放済み] と [アーカイブ済み] ステータスの主な違いは、[開放済み] のステータス場合、パッケージバージョンのアセットは CodeArtifact によって完全に削除されることです。このため、パッケージバージョンを[開放済み] から[アーカイブ済み]、[一覧表示されていない]、または [公開] に移動することはできません。アセットが削除されているため、パッケージバージョンはこれ以降使用できません。パッケージバージョンが [開放済み] としてマークされた後は、パッケージアセットの保存に関する費用は、これ以降請求されなくなります。
--status
パラメータなしで list-package-versions を呼び出すと、すべてのステータスのパッケージバージョンがデフォルトで返されます。
上記の状態とは別に、パッケージバージョンを DeletePackageVersions API で削除することもできます。削除後、パッケージバージョンはリポジトリ内に存在しなくなり、パッケージマネージャーまたはビルドツールを使用して、そのパッケージバージョンを自由に再公開できます。パッケージバージョンが [開放済み] としてマークされた後は、パッケージアセットの保存に関する費用は、これ以降請求されなくなります。
パッケージ名、パッケージバージョン、アセット名の正規化
CodeArtifact は、パッケージ名、パッケージバージョン、およびアセット名を保存する前に正規化します。つまり、CodeArtifact の名前またはバージョンは、パッケージが公開されたときに提供された名前やバージョンとは異なる場合があります。CodeArtifact でパッケージタイプごとに名前とバージョンを正規化する方法については、次のドキュメントを参照してください。
CodeArtifact は、他のパッケージ形式では正規化を行いません。