本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
套件概觀
套件是軟體和中繼資料的套件,這些中繼資料是解決相依性和安裝軟體所需的。在 中 CodeArtifact,套件包含套件名稱、選用的命名空間,例如 @types
中的 @types/node
、一組套件版本,以及套件層級中繼資料,例如 npm 標籤。
支援的套件格式
AWS CodeArtifact 支援 Cargo 、一般 、Maven 、npm 、NuGet、PyPI、Ruby 、Swift 套件格式。
套件發佈
您可以使用 npm
、、twine
、、 Maven
Gradle
nuget
和 等工具,將任何支援套件格式的新版本發佈至 CodeArtifact 儲存庫dotnet
。
發佈許可
您的 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資產 的 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 Central. CodeArtifact imports 套件從公有儲存庫到 CodeArtifact 儲存庫,但絕不會朝其他方向移動套件。您發佈至 CodeArtifact 儲存庫的套件會保持私有,且僅適用於您授予存取權 AWS 的帳戶、角色和使用者。
發佈修補套件版本
有時候,您可能想要發佈修改過的套件版本,這可能是公有儲存庫中可用的版本。例如,您可能在名為 的關鍵應用程式相依性中發現錯誤mydep 1.1
,而且您需要比套件供應商可以檢閱並接受變更更快修正錯誤。如前所述,如果公有儲存庫可透過上游儲存庫和外部連線從 CodeArtifact 儲存庫存取,則 CodeArtifact 可防止您在儲存庫mydep 1.1
中 CodeArtifact發佈。
若要解決此問題,請將套件版本發佈至無法連線公有 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 儲存庫的套件版本通常可在一秒內下載。例如,如果您使用 將 npm 套件版本發佈至 CodeArtifact npm publish
,則該版本應該可在一秒內供 npm install
命令使用。不過,發佈可能不一致,有時可能需要更長的時間。如果您必須在發佈後立即使用套件版本,請使用重試以確保下載的可靠性。例如,發佈套件版本後,如果剛發佈的套件版本最初無法在第一次下載嘗試時提供,請重複下載最多三次。
注意
從公有儲存庫匯入套件版本通常需要比發佈更長的時間。如需詳細資訊,請參閱外部連延延。
套件版本狀態
中的每個套件版本 CodeArtifact 都有一個狀態,描述套件版本的目前狀態和可用性。您可以在 AWS CLI 和 中變更套件版本狀態SDK。如需詳細資訊,請參閱更新套件版本狀態。
以下是套件版本狀態的可能值:
-
已發佈 – 套件版本已成功發佈,可以使用套件管理員請求。套件版本會包含在傳回給套件管理員的套件版本清單中,例如 的輸出
npm view <package-name> versions
。套件版本的所有資產都可從儲存庫取得。 -
未完成 – 用戶端已為套件版本上傳一或多個資產,但尚未將其移至
Published
狀態加以最終確定。目前只有一般和 Maven 套件版本可以具有 的狀態Unfinished
。對於 Maven 套件,當用戶端上傳一或多個套件版本的資產,但不發佈包含該版本的套件maven-metadata.xml
檔案時,就會發生這種情況。當 Maven 套件版本為未完成 時,不會包含在傳回給 用戶端的版本清單中gradle
,例如mvn
或 ,因此無法將其用作建置的一部分。一般套件可以在呼叫 PublishPackageVersion 時提供unfinished
旗標,刻意將 保留在Unfinished
狀態API。可以透過省略unfinished
旗標或呼叫 UpdatePackageVersionsStatus 將一般套件變更為Published
狀態API。 -
未列出 – 套件版本的資產可從儲存庫下載,但套件版本不包含在傳回套件管理員的版本清單中。例如,對於 npm 套件, 的輸出
npm view <package-name> versions
將不會包含套件版本。這表示 npm 的相依性解析邏輯不會選取套件版本,因為版本不會出現在可用版本清單中。不過,如果npm package-lock.json
檔案中已參考未列出的套件版本,仍然可以下載和安裝,例如執行 時npm ci
。 -
已封存 – 無法再下載套件版本的資產。傳回給套件管理員的版本清單中不會包含套件版本。由於資產無法使用,因此用戶端會封鎖套件版本的耗用。如果您的應用程式建置取決於更新至已封存 的版本,則建置會中斷,假設套件版本尚未本機快取。您無法使用套件管理員或建置工具重新發佈已封存套件版本,因為其仍存在於儲存庫中,但您可以將套件版本的狀態變更為已取消列出或已發佈,並搭配 進行變更UpdatePackageVersionsStatus API。
-
已處置 – 套件版本不會顯示在清單中,且無法從儲存庫下載資產。已處置和已封存之間的主要區別在於,狀態為已處置的 時, 會永久刪除套件版本的資產 CodeArtifact。因此,您無法將套件版本從已處置移至已封存 、未列出 或已發佈 。套件版本已遭刪除,因此無法再使用。套件版本標示為已處置 後,您將不再收到儲存套件資產的帳單。
無--status
參數呼叫 list-package-versions時,預設會傳回所有狀態的套件版本。
除了先前列出的狀態之外,也可以使用 DeletePackageVersions API刪除套件版本。刪除後,套件版本不再位於儲存庫中,您可以使用套件管理員或建置工具自由重新發佈該套件版本。刪除套件版本後,您將不再支付該套件版本資產的儲存費用。
套件名稱、套件版本和資產名稱標準化
CodeArtifact 在儲存套件名稱、套件版本和資產名稱之前,先標準化套件名稱,這表示 中的名稱或版本 CodeArtifact 可能與發佈套件時提供的名稱或版本不同。如需如何在 中 CodeArtifact 針對每個套件類型標準化名稱和版本的詳細資訊,請參閱下列文件:
CodeArtifact 不會在其他套件格式上執行標準化。