套件概觀 - CodeArtifact

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

套件概觀

件是解決相依性和安裝軟體所需的軟體套件和中繼資料。在中 CodeArtifact,套件包含套件名稱、選用的名空間 (例如 @types in) @types/node、一組套件版本,以及封裝層級中繼資料 (例如 npm 標籤)。

支援的套件格式

AWS CodeArtifact 支持 NPMPyPIMaven斯威夫特 NuGet紅寶石通用包格式。

Package 發佈

您可以使用npmtwine、、、和等工具,將任何受支援套件格式的新版本發佈至 CodeArtifact 儲存庫dotnetMaven Gradle nuget

發佈權限

您的 AWS Identity and Access Management (IAM) 使用者或角色必須具有發佈至目標儲存庫的權限。發佈套件需要下列權限:

  • 釋界:codeartifact:PublishPackageVersioncodeartifact:PutPackageMetadata

  • 故宮:codeartifact:PublishPackageVersion

  • NuGet:codeartifact:PublishPackageVersioncodeartifact:ReadFromRepository

  • Python:codeartifact:PublishPackageVersion

  • 通用:codeartifact:PublishPackageVersion

  • 迅速:codeartifact:PublishPackageVersion

  • 紅寶石:codeartifact:PublishPackageVersion

在上述許可清單中,您的 IAM 政策必須指定codeartifact:PublishPackageVersioncodeartifact:PutPackageMetadata許可的package資源。它還必須指定codeartifact:ReadFromRepository權限的repository資源。

如需中的權限的詳細資訊 CodeArtifact,請參閱AWS CodeArtifact 權限參考

覆寫套件資產

您無法重新發佈已存在於不同內容的封裝資產。例如,假設您已經發佈了一個包含 JAR 資產的 Maven 套件mypackage-1.0.jar。只有在新舊資產的總和檢查碼相同時,您才能再次發佈該資產。若要重新發佈具有新內容的相同資產,請先使用delete-package-versions指令刪除套件版本。嘗試重新發佈具有不同內容的相同資產名稱會導致 HTTP 409 衝突錯誤。

對於支持多種資產(泛型,PyPI 和 Maven)的包格式,您可以將具有不同名稱的新資產添加到現有的軟件包版本中,假設您具有所需的權限。對於通用套件,只要套件版本處於Unfinished狀態,您就可以新增資產。由於 npm 僅支持每個軟件包版本的單個資產,因此要以任何方式修改已發布的軟件包版本,必須首先使用delete-package-versions.

如果您嘗試重新發佈已存在的資產 (例如,mypackage-1.0.jar),且已發佈資產的內容與新資產相同,則作業將會成功,因為作業是冪等的。

私有套件和公開儲存庫

CodeArtifact 不會將儲存在儲存 CodeArtifact 庫中的套件發佈到公共儲存庫,例如 npmjs.com 或 Maven 中央。 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 儲存庫的 Package 版本通常可在不到一秒的時間內下載。例如,如果您將 npm 套件版本發佈到 CodeArtifact withnpm publish,則該版本應該可在不到一秒的時間內供npm install命令使用。但是,發佈可能不一致,有時可能需要更長的時間。如果您必須在發佈後立即使用套件版本,請使用重試來確保下載可靠。例如,在發佈套件版本之後,如果剛發佈的套件版本在第一次下載嘗試中最初不可用,請重複下載最多三次。

注意

從公用存放庫匯入套件版本的時間通常會比發行還要長。如需詳細資訊,請參閱 外部連延延

Package 版本狀態

中的每個套件版本都 CodeArtifact 具有描述套件版本目前狀態和可用性的狀態。您可以在 AWS CLI 和 SDK 中變更套件版本狀態。如需詳細資訊,請參閱 更新套件版本狀態

以下是套件版本狀態的可能值:

  • 發佈 — 套件版本已成功發佈,可以使用套件管理員來要求。套件版本將包含在傳回給套件管理員的套件版本清單中,例如,在的輸出中npm view <package-name> versions。套件版本的所有資產都可從儲存庫取得。

  • 未完成 — 用戶端已為套件版本上傳一或多個資產,但尚未透過將其移至狀態來完成Published。目前只有泛型和 Maven 軟件包版本可以具有Unfinished. 對於 Maven 軟件包,當客戶端上傳一個或多個軟件包版本的資產,但沒有為包含該版本的軟件包發布maven-metadata.xml文件時,可能會發生這種情況。當 Maven 軟件包版本未完成時,它將不會包含在返回給客戶端的版本列表中gradle,因此不能將其用作構建的一部分。mvn通用包可以通過調用 PublishPackageVersionAPI 時提供unfinished標誌來故意保持在Unfinished狀態。通用包可以通過Published省略unfinished標誌或調用 UpdatePackageVersionsStatusAPI 來更改為狀態。

  • 未列出 — 套件版本的資產可從存放庫下載,但套件版本不包含在傳回至套件管理員的版本清單中。例如,對於 npm 套件,的輸出npm view <package-name> versions將不會包含套件版本。這意味著 npm 的依賴關係解析邏輯不會選擇軟件包版本,因為該版本不會出現在可用版本列表中。但是,如果檔案中已參考「公開」套npm package-lock.json件版本,則仍可下載並安裝該套件版本,例如在執行npm ci時。

  • 已封存 — 無法再下載套件版本的資產。套件版本將不會包含在傳回至封裝管理員的版本清單中。由於資產無法使用,因此會封鎖用戶端使用套件版本。如果您的應用程式建置取決於已更新為封存的版本,則組建將會中斷,假設套件版本尚未在本機快取。您無法使用套件管理員或建置工具來重新發佈已封存的套件版本,因為它仍然存在於儲存庫中,但是您可以將套件版本的狀態變更回「未公開」或「UpdatePackageVersionsStatus 已使用 API 發」。

  • Dispsed — 套件版本不會顯示在清單中,且無法從存放庫下載資產。它們之間的主要區別處置和已歸檔在於,狀態為「已處置」,軟件包版本的資產將被永久刪除。 CodeArtifact因此,您無法將封裝版本從「已處置」移至「已封存」、「未公開」或「已發佈」。無法再使用封裝版本,因為資產已刪除。套件版本標示為「已處置」之後,您將不再需要針對封裝資產的儲存計費。

在沒有--status參數的情況下調 list-package-versions 用時,默認情況下將返回所有狀態的 Package 版本。

除了先前列出的狀態之外,還可以使用 DeletePackageVersionsAPI 刪除套件版本。刪除之後,軟件包版本不再存在於存儲庫中,您可以使用軟件包管理器或構建工具自由地重新發布該軟件包版本。刪除套件版本後,您將不再需要支付該套件版本資產的儲存費用。

Package 名稱、套件版本和資產名稱標準化

CodeArtifact 在儲存套件名稱、套件版本和資產名稱之前將套件名稱標準化,這表示中的名稱或版本 CodeArtifact 可能與套件發佈時提供的名稱或版本不同。如需有關如何在每個套件類型中標準化名稱和版本的 CodeArtifact 詳細資訊,請參閱下列文件:

CodeArtifact 不會對其他套件格式執行標準化。