翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
外部接続からのパッケージのリクエスト
以下のセクションでは、外部接続からパッケージをリクエストする方法と、パッケージをリクエストする際に期待される CodeArtifact の動作について説明します。
トピック
外部接続からパッケージを取得する
「 CodeArtifact リポジトリをパブリックリポジトリに接続する」で説明されているように CodeArtifact リポジトリに追加した外部接続からパッケージを取得するには、リポジトリを使用するようにパッケージマネージャーを設定し、パッケージをインストールします。
注記
以下の説明では npm
を使用します。他のパッケージタイプの設定と使用方法を確認するには、「MavenでCodeArtifactを使う」、「NuGetでCodeArtifactを使う」、「Python CodeArtifact での の使用」を参照してください。
外部接続からパッケージを取得するには
-
CodeArtifact リポジトリを使用してパッケージマネージャーの設定と認証を行います。
npm
で、次のaws codeartifact login
コマンドを使用します。aws codeartifact login --tool
npm
--domainmy_domain
--domain-owner111122223333
--repositorymy_repo
-
パブリックリポジトリのパッケージをリクエストします。
npm
で、次のnpm install
コマンドを使用し、lodash
をインストールするパッケージで置換します。npm install lodash
-
パッケージが CodeArtifact リポジトリにコピーされたら、
list-packages
およびlist-package-versions
コマンドで表示します。aws codeartifact list-packages --domain
my_domain
--domain-owner111122223333
--repositorymy_repo
出力例:
{ "packages": [ { "format": "npm", "package": "lodash" } ] }
list-package-versions
コマンドは、CodeArtifact リポジトリにコピーされたパッケージのすべてのバージョンを一覧表示します。aws codeartifact list-package-versions --domain
my_domain
--domain-owner111122223333
--repositorymy_repo
--formatnpm
--packagelodash
出力例:
{ "defaultDisplayVersion: "1.2.5" "format": "
npm
", "package": "lodash
", "namespace": null, "versions": [ { "version": "1.2.5", "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC", "status": "Published" } ] }
外部接続のレイテンシー
外部接続を使用してパブリックリポジトリからパッケージを取得する場合、パッケージがパブリックリポジトリから取得されてから CodeArtifact リポジトリに保存されるまでに遅延が発生します。例えば、「外部接続からパッケージを取得する」で説明されているように npm パッケージ「lodash」のバージョン 1.2.5 をインストールしたとします。npm
install lodash
lodash コマンドは正常に完了したものの、パッケージバージョンが CodeArtifact リポジトリに表示されない場合があります。通常は、パッケージバージョンがリポジトリに表示されるまでに約 3 分かかりますが、それ以上かかる場合もあります。
このレイテンシーが原因で、パッケージバージョンを正常に取得できたとしても、CodeArtifact コンソール、または ListPackages API オペレーションおよび ListPackageVersions API オペレーションを呼び出す際に、リポジトリ内のバージョンがまだ表示されていないことがあります。CodeArtifact がパッケージバージョンを非同期的に永続化すると、コンソールと API リクエストを介して表示されます。
外部リポジトリが利用できない場合の CodeArtifact 動作
場合によっては、外部リポジトリが停止することがあります。つまり、CodeArtifact が外部リポジトリからパッケージを取得できないか、パッケージの取得が通常よりはるかに遅くなっているということです。これが発生すると、パッケージバージョンはすでに外部リポジトリからプルされています (例: npmjs.com )、CodeArtifact リポジトリに保存されているものは、CodeArtifact から引き続きダウンロードできます。ただし、CodeArtifact にまだ保存されていないパッケージは、そのリポジトリへの外部接続が設定されている場合でも、利用できない場合があります。例えば、CodeArtifact リポジトリには、これまでアプリケーションで使用していた npm パッケージのバージョン lodash 4.17.19
が含まれているかも知れません。4.17.20
にアップグレードする場合、通常 CodeArtifact はその新しいバージョンを npmjs.com から取得して、 CodeArtifact リポジトリに保存します。ただし、npmjs.com 停止が発生していると、この新しいバージョンは利用できません。唯一の回避策は、npmjs.com が回復してから後でもう一度やり直すことです。
外部リポジトリの停止は、CodeArtifact への新しいパッケージバージョンの公開にも影響する可能性があります。外部接続が設定されたリポジトリでは、CodeArtifact は外部リポジトリにすでに存在するパッケージバージョンの公開を許可しません。詳細については、「パッケージの概要」を参照してください。ただし、外部リポジトリの停止により、CodeArtifact が外部リポジトリに存在するパッケージとパッケージのバージョンに関する最新情報を持っていないことがまれに発生します。この場合、CodeArtifact は、通常拒否するパッケージバージョンの公開を許可することがあります。
新しいパッケージバージョンの入手可能性
npmjs.com などのパブリックリポジトリ内のパッケージバージョンを CodeArtifact リポジトリから使用できるようにするには、まずこれをリージョンパッケージのメタデータキャッシュに追加する必要があります。このキャッシュは各 AWS リージョンの CodeArtifact によってそれぞれ保持されており、サポートされているパブリックリポジトリの内容を説明するメタデータが含まれています。このキャッシュのために、新しいパッケージバージョンがパブリックリポジトリに公開されてから、CodeArtifact から利用可能になるまでの間に、遅延が生じます。この遅延は、パッケージの種類によって異なります。
npm、Python、および Nuget のパッケージの場合、新しいパッケージバージョンが npmjs.com、pypi.org、または nuget.org に公開されてから、CodeArtifact リポジトリからインストールできるようになるまで、最大 30 分の遅延が発生することがあります。CodeArtifact は、キャッシュが最新であることを確認するために、これらの 2 つのリポジトリからのメタデータを自動的に同期します。
Maven パッケージの場合、新しいパッケージバージョンがパブリックリポジトリに公開されてから、CodeArtifact リポジトリからインストールできるようになるまで、最大 3 時間の遅延が発生することがあります。CodeArtifact は、最大で 3 時間に一回、パッケージの新しいバージョンをチェックします。3 時間のキャッシュライフタイムが終了した後に、指定されたパッケージ名に対する最初のリクエストは、そのパッケージのすべての新しいバージョンをリージョンキャッシュにインポートすることです。
一般的に使用されている Maven パッケージでは、通常 3 時間ごとに新しいバージョンがインポートされます。リクエストの頻度が高いため、キャッシュの有効期間が終了するとすぐにキャッシュが更新されることがよくあります。使用頻度の低いパッケージの場合、CodeArtifact リポジトリからパッケージのバージョンが要求されるまで、キャッシュは最新バージョンを持ちません。最初のリクエストでは、CodeArtifact から以前にインポートされたバージョンのみが使用可能になりますが、このリクエストによってキャッシュが更新されます。その後のリクエストにより、パッケージの新しいバージョンがキャッシュに追加され、ダウンロードできるようになります。
複数のアセットを含むパッケージバージョンのインポート
Maven パッケージと Python パッケージはどちらも、パッケージバージョンごとに複数のアセットを持つことができます。そのため、これらの形式のパッケージのインポートは、パッケージバージョンごとにアセットが 1 つしかない npm や NuGet パッケージよりも複雑になります。これらのパッケージタイプでどのアセットがインポートされるのか、また新しく追加されたアセットがどのように利用できるようになるのかについては、「アップストリームと外部接続からの Python パッケージのリクエスト」および「アップストリームと外部接続からの Maven パッケージのリクエスト」を参照してください。