View a markdown version of this page

透過 CodeArtifact 設定和使用貨運 - CodeArtifact

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

透過 CodeArtifact 設定和使用貨運

您可以使用 Cargo 從 CodeArtifact 儲存庫發佈和下載木箱,或從 Rust 社群的木箱登錄檔 crates.io 擷取木箱。本主題說明如何設定 Cargo 來驗證和使用 CodeArtifact 儲存庫。

使用 CodeArtifact 設定貨運

若要使用 Cargo 從 AWS CodeArtifact 安裝和發佈箱子,您需要使用 CodeArtifact 儲存庫資訊進行設定。請依照下列其中一個程序中的步驟,使用 CodeArtifact 儲存庫端點資訊和登入資料來設定貨運。

使用主控台指示設定貨運

您可以使用 主控台中的組態指示,將 Cargo 連線至 CodeArtifact 儲存庫。主控台指示提供針對 CodeArtifact 儲存庫自訂的貨運組態。您可以使用此自訂組態來設定貨運,而不需要尋找和填寫 CodeArtifact 資訊。

  1. 開啟位於 https://https://console.aws.amazon.com/codesuite/codeartifact/home 的 AWS CodeArtifact 主控台。

  2. 在導覽窗格中,選擇儲存庫,然後選擇儲存庫以連線至貨運。

  3. 選擇檢視連線指示

  4. 選擇您的作業系統。

  5. 選擇貨運

  6. 遵循產生的說明,將貨運連線至 CodeArtifact 儲存庫。

手動設定貨運

如果您無法或不想使用主控台的組態指示,您可以使用下列指示手動將 Cargo 連線至 CodeArtifact 儲存庫。

macOS and Linux

若要使用 CodeArtifact 設定 Cargo,您需要在 Cargo 組態中將 CodeArtifact 儲存庫定義為登錄檔,並提供登入資料。

  • my_registry 取代為您的登錄檔名稱。

  • my_domain 取代為您的 CodeArtifact 網域名稱。

  • 111122223333 取代為網域擁有者 AWS 的帳戶 ID。如果您在擁有的網域中存取儲存庫,則不需要包含 --domain-owner。如需詳細資訊,請參閱跨帳戶網域

  • my_repo 取代為您的 CodeArtifact 儲存庫名稱。

複製組態以發佈和下載 Cargo 套件到您的儲存庫,並將其儲存在~/.cargo/config.toml檔案中以供系統層級組態或專案層級組態.cargo/config.toml使用:

[registries.my_registry] index = "sparse+https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/cargo/my_repo/" credential-provider = "cargo:token-from-stdout aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --region us-west-2 --query authorizationToken --output text" [registry] default = "my_registry" [source.crates-io] replace-with = "my_registry"
Windows: Download packages only

若要使用 CodeArtifact 設定 Cargo,您需要在 Cargo 組態中將 CodeArtifact 儲存庫定義為登錄檔,並提供登入資料。

  • 以您的登錄檔名稱取代 my_registry

  • my_domain 取代為您的 CodeArtifact 網域名稱。

  • 111122223333 取代為網域擁有者的帳戶 AWS ID。如果您在擁有的網域中存取儲存庫,則不需要包含 --domain-owner。如需詳細資訊,請參閱跨帳戶網域

  • my_repo 取代為您的 CodeArtifact 儲存庫名稱。

將組態複製到僅從您的儲存庫下載 Cargo 套件,並將其儲存在%USERPROFILE%\.cargo\config.toml檔案中以供系統層級組態或專案層級組態.cargo\config.toml使用:

[registries.my_registry] index = "sparse+https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/cargo/my_repo/" credential-provider = "cargo:token-from-stdout aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --region us-west-2 --query authorizationToken --output text" [registry] default = "my_registry" [source.crates-io] replace-with = "my_registry"
Windows: Publish and download packages
  1. 若要使用 CodeArtifact 設定 Cargo,您需要在 Cargo 組態中將 CodeArtifact 儲存庫定義為登錄檔,並提供登入資料。

    • my_registry 取代為您的登錄檔名稱。

    • my_domain 取代為您的 CodeArtifact 網域名稱。

    • 111122223333 取代為網域擁有者的帳戶 AWS ID。如果您在擁有的網域中存取儲存庫,則不需要包含 --domain-owner。如需詳細資訊,請參閱跨帳戶網域

    • my_repo 取代為您的 CodeArtifact 儲存庫名稱。

    複製組態,將 Cargo 套件發佈和下載到您的儲存庫,並將其儲存在%USERPROFILE%\.cargo\config.toml檔案中以供系統層級組態或專案層級組態.cargo\config.toml使用。

    建議您使用登入資料提供者 cargo:token,其會使用存放在您~/.cargo/credentials.toml檔案中的登入資料。如果您使用 cargo publish ,您可能會在 期間遇到錯誤,cargo:token-from-stdout因為 Cargo 用戶端在 期間未正確修剪授權字符cargo publish

    [registries.my_registry] index = "sparse+https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/cargo/my_repo/" credential-provider = "cargo:token" [registry] default = "my_registry" [source.crates-io] replace-with = "my_registry"
  2. 若要使用 Windows 將 Cargo 套件發佈到您的儲存庫,您必須使用 CodeArtifact get-authorization-token命令和 Cargo login命令來擷取授權字符和您的登入資料。

    • my_registry 取代為您的登錄檔名稱,如 中所定義[registries.my_registry]

    • my_domain 取代為您的 CodeArtifact 網域名稱。

    • 111122223333 取代為網域擁有者的帳戶 AWS ID。如果您在擁有的網域中存取儲存庫,則不需要包含 --domain-owner。如需詳細資訊,請參閱跨帳戶網域

    aws codeartifact get-authorization-token --domain my_domain --domain-owner 111122223333 --region us-west-2 --query authorizationToken --output text | cargo login --registry my_registry
    注意

    產生的授權字符有效期為 12 小時。如果自建立權杖後已經過 12 小時,您將需要建立新的權杖。

上述範例中的 [registries.my_registry]區段使用 my_registry和 提供 indexcredential-provider資訊來定義登錄檔。

  • index 指定登錄檔索引的 URL,這是以 結尾的 CodeArtifact 儲存庫端點/。非 Git 儲存庫的登錄檔需要 sparse+字首。

    注意

    若要使用雙堆疊端點,請使用 codeartifact.region.on.aws端點。

  • credential-provider 指定指定登錄檔的登入資料提供者。如果credential-provider未設定 ,registry.global-credential-providers則會使用 中的提供者。透過將 credential-provider設定為 cargo:token-from-stdout,Cargo 用戶端會在從 CodeArtifact 儲存庫發佈或下載時自動擷取新的授權字符,因此您不需要每 12 小時手動重新整理授權字符。

[registry] 區段定義使用的預設登錄檔。

  • default 指定在 中定義的登錄檔名稱[registries.my_registry],預設在從 CodeArtifact 儲存庫發佈或下載時使用。

[source.crates-io] 區段定義了未指定預設登錄檔時使用的預設登錄檔。

  • replace-with = "my_registry" 會將公有登錄檔 crates.io 取代為 中定義的 CodeArtifact 儲存庫[registries.my_registry]。如果您需要從外部連線請求套件,例如 crates.io,建議您使用此組態。

    若要取得 CodeArtifact 的所有優點,例如防止相依性混淆攻擊的套件原始伺服器控制,建議您使用來源取代。使用來源取代時,CodeArtifact 會將所有請求代理至外部連線,並將套件從外部連線複製到您的儲存庫。如果沒有取代來源,Cargo 用戶端會根據專案中Cargo.toml檔案中的組態直接擷取套件。如果相依性未標示 registry=my_registry,則 Cargo 用戶端會從 crates.io 直接擷取相依性,而不與您的 CodeArtifact 儲存庫通訊。

    注意

    如果您開始使用來源替換,然後更新您的組態檔案以不使用來源替換,您可能會遇到錯誤。相反的情況也可能導致錯誤。因此,建議您避免變更專案的組態。

安裝貨運箱

使用下列程序從 CodeArtifact 儲存庫或 crates.io:// 安裝貨運箱。

從 CodeArtifact 安裝貨運箱

您可以使用貨運 (cargo) CLI,從 CodeArtifact 儲存庫快速安裝特定版本的貨運箱。

使用 從 CodeArtifact 儲存庫安裝貨運箱 cargo
  1. 如果您尚未執行,請依照 中的步驟透過 CodeArtifact 設定和使用貨運設定 cargo CLI,以使用具有適當登入資料的 CodeArtifact 儲存庫。

  2. 使用下列命令從 CodeArtifact 安裝貨運箱:

    cargo add my_cargo_package@1.0.0

    如需詳細資訊,請參閱 Cargo Book 中的貨運新增

將貨運箱發佈至 CodeArtifact

使用下列程序,使用 CLI 將貨運箱發佈至 CodeArtifact cargo 儲存庫。

  1. 如果您尚未執行,請依照 中的步驟透過 CodeArtifact 設定和使用貨運設定 cargo CLI,以使用具有適當登入資料的 CodeArtifact 儲存庫。

  2. 使用下列命令將貨運箱發佈至 CodeArtifact 儲存庫:

    cargo publish

    如需詳細資訊,請參閱 Cargo Book 中的貨運發佈