パッケージの概要 - CodeArtifact

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

パッケージの概要

[パッケージ] とは、依存関係の解決とソフトウェアのインストールに必要なソフトウェアとメタデータのバンドルです。では CodeArtifact、パッケージはパッケージ名、 @typesの などのオプションの名前空間@types/node、パッケージバージョンのセット、および npm タグなどのパッケージレベルのメタデータで構成されます。

サポートされるパッケージ形式

AWS CodeArtifact は、Cargo 汎用 Maven 、npmNuGetPyPIRuby Swift パッケージ形式をサポートしています。

メッセージの公開

、、、、、 などのツールを使用してnpmサポートされている任意のパッケージ形式の新しいバージョンを CodeArtifact リポジトリに公開できますtwineMavenGradlenugetdotnet

公開許可

AWS Identity and Access Management (IAM) ユーザーまたはロールには、送信先リポジトリに発行するアクセス許可が必要です。パッケージを公開するには、以下の権限が必要です。

  • 配送: codeartifact:PublishPackageVersion

  • ジェネリック: codeartifact:PublishPackageVersion

  • Maven: codeartifact:PublishPackageVersionそしてcodeartifact:PutPackageMetadata

  • npmcodeartifact: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アセット を含む Maven パッケージを既に公開しているとしますmypackage-1.0.jar。古いアセットのチェックサムと新しいアセットのチェックサムが同じである場合のみ、そのアセットを再度公開できます。新しいコンテンツで同じアセットを再公開するには、最初にdelete-package-versionsコマンドを使ってパッケージバージョンを削除してください。異なるコンテンツで同じアセット名を再発行しようとすると、409 HTTP 競合エラーが発生します。

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

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

プライベートパッケージと公開リポジトリ

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

パッチが適用されたパッケージバージョンの公開

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

これを回避するには、パブリック CodeArtifact リポジトリにアクセスできない別のリポジトリにパッケージバージョンを公開します。次に、 を使用してcopy-package-versionsAPI、パッチが適用された のバージョン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 パッケージバージョンを CodeArtifact に発行する場合npm publish、そのバージョンは 1 秒未満で npm install コマンドで使用できるはずです。ただし、公開には一貫性がなく、時間がかかることがあります。公開後すぐにパッケージバージョンを使用する必要がある場合は、再試行を行ってダウンロードの信頼性を確保してください。例えば、パッケージバージョンを公開した後、公開したばかりのパッケージバージョンが最初にダウンロードできなかった場合は、ダウンロードを最大 3 回繰り返します。

注記

通常、パブリックリポジトリからパッケージバージョンをインポートすると、公開よりも時間がかかります。詳細については、「外部接続のレイテンシー」を参照してください。

パッケージバージョンのステータス

のすべてのパッケージバージョン CodeArtifact には、パッケージバージョンの現在の状態と可用性を記述するステータスがあります。パッケージバージョンのステータスは、 AWS CLI および で変更できますSDK。詳細については、「パッケージバージョンのステータスの更新」を参照してください。

パッケージバージョンのステータスに設定できる値は以下の通りです。

  • [公開] - パッケージバージョンは正常に公開され、パッケージマネージャーを使用してリクエストできます。パッケージバージョンは、npm view <package-name> versions の出力など、パッケージマネージャーによって返されるパッケージバージョンリストに含まれます。パッケージバージョンのすべてのアセットは、リポジトリから入手できます。

  • [未完了] - クライアントはパッケージバージョンの 1 つ以上のアセットをアップロードしましたが、それを Published 状態に移行してアップロードを完了することができませんでした。現在 Unfinished のステータスになり得るのは、ジェネリックパッケージバージョンと Maven パッケージバージョンのみです。これは、クライアントがパッケージバージョンの 1 つ以上のアセットをアップロードしたものの、そのバージョンを含むパッケージの maven-metadata.xml ファイルを公開しなかった場合に発生します。Maven パッケージバージョンが [未完了] の場合、mvngradle などのクライアントに返されるバージョンリストには含まれないため、ビルドの一部として使用することはできません。汎用パッケージは、 を呼び出すときに unfinishedフラグを指定することで、意図的に PublishPackageVersion Unfinished状態に保つことができますAPI。汎用パッケージは、 unfinishedフラグを省略するか、 を呼び出すことで UpdatePackageVersionsStatus Published状態に変更できますAPI。

  • [一覧表示されていない] - パッケージバージョンのアセットはリポジトリからダウンロードできますが、パッケージマネージャーによって返されるパッケージバージョンのリストには含まれません。例えば、npm パッケージの場合、npm view <package-name> versions の出力にパッケージバージョンは含まれません。つまり、npm の依存関係解決論理は、使用可能なバージョンのリストに表示されないため、パッケージのバージョンを選択しません。ただし、[一覧表示されていない] パッケージバージョンがすでにすべてのnpm package-lock.jsonファイルで参照されていれば、npm ciの実行時などに、ダウンロードしてインストールできます。

  • [アーカイブ済み] - パッケージバージョンのアセットはこれ以降ダウンロードできません。パッケージバージョンは、パッケージマネージャーによって返されるバージョンのリストには含まれません。アセットが使用できないため、クライアントによるパッケージバージョンの使用はブロックされます。アプリケーションのビルドが、[アーカイブ済み] に更新されたバージョンに依存している場合、パッケージのバージョンがローカルにキャッシュされていないと仮定されるため、構築は中断されます。アーカイブされたパッケージバージョンはリポジトリにまだ存在するため、パッケージマネージャーまたはビルドツールを使用して再発行することはできませんが、パッケージバージョンのステータスを でリストされていない、公開済みに戻すことができますUpdatePackageVersionsStatus API

  • [開放済み] - パッケージバージョンはリストに表示されず、アセットをリポジトリからダウンロードできません。Disposed Archived の主な違いは、ステータスが Disposed の場合、パッケージバージョンのアセットが によって完全に削除されることです CodeArtifact。このため、パッケージバージョンを[開放済み] から[アーカイブ済み][一覧表示されていない]、または [公開] に移動することはできません。アセットが削除されているため、パッケージバージョンはこれ以降使用できません。パッケージバージョンが [開放済み] としてマークされた後は、パッケージアセットの保存に関する費用は、これ以降請求されなくなります。

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

前述の状態を除き、パッケージバージョンは DeletePackageVersions APIで削除することもできます。削除後、パッケージバージョンはリポジトリ内に存在しなくなり、パッケージマネージャーまたはビルドツールを使用して、そのパッケージバージョンを自由に再公開できます。パッケージバージョンが [開放済み] としてマークされた後は、パッケージアセットの保存に関する費用は、これ以降請求されなくなります。

パッケージ名、パッケージバージョン、アセット名の正規化

CodeArtifact は、パッケージ名、パッケージバージョン、アセット名を保存する前に正規化します。つまり、 の名前またはバージョンは、パッケージの公開時に指定された名前またはバージョンとは異なる CodeArtifact 場合があります。パッケージタイプ CodeArtifact ごとに で名前とバージョンを正規化する方法の詳細については、次のドキュメントを参照してください。

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