建立容器配方的新版本 - EC2Image Builder

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

建立容器配方的新版本

本節說明如何建立容器配方的新版本。

使用主控台建立新的容器配方版本

建立新版本的容器配方與建立新配方幾乎相同。不同之處在於,在大多數情況下,某些詳細信息被預先選擇以匹配基本配方。下列清單說明建立新方案與建立現有方案的新版本之間的差異。

食譜詳情
  • 名稱不可編輯

  • 版本 — 必要。此詳細資料未預先填入目前版本或任何類型的序列。輸入您要以主要 .min or .patch 格式建立的版本號碼。如果版本已存在,則會遇到錯誤。

基本影像
  • 擇圖像選項 — 預先選擇,但可編輯。如果您變更基本影像來源的選擇,可能會遺失其他詳細資料,這取決於您選擇的原始選項。

    若要查看與基本影像選取項目相關聯的詳細資料,請選擇符合您選取範圍的索引標籤。

    Managed images
    • 映像作業系統 (OS)不可編輯

    • 映像名稱 — 根據您為現有方案所做的基本映像選擇組合而預先選取。但是,如果您變更「選取影像」選項,則會遺失預先選取的影像名稱

    • 自動版本控制選項 — 與您的基本配方匹配。自動版本控制選項預設為 [使用選取的 OS 版本] 選項。

      重要

      如果您使用語義版本控制來啟動管道構建,請確保將此值更改為「使用最新的可用操作系統版本」。若要進一步瞭解 Image Builder 資源的語意版本控制,請參閱Image Builder 中的語義版本

    ECR image
    • 映像作業系統 (OS) — 預先選取,但可編輯。

    • 作業系統版本 — 預先選取,但可編輯。

    • ECR影像 ID — 預先填入,但可編輯。

    Docker Hub image
    • 映像作業系統 (OS)不可編輯

    • 作業系統版本 — 預先選取,但可編輯。

    • 頭圖像 ID — 預填充,但可編輯。

執行個體組態
  • AMIID — 預先填入,但可編輯。

  • 儲存 (磁碟區)

    EBS卷 1(AMI根)-預填充。您無法編輯根磁碟區裝置名稱快照IOPS選取項目。但是,您可以變更所有剩餘的設定,例如「大小」。您也可以新增磁碟區。

    注意

    如果您指定了從其他帳戶與您共用的基礎AMI,則指定的任何輔助磁碟區的快照也必須與您的帳戶共用。

工作目錄
  • 工作目錄路徑 — 預先填滿但可編輯。

元件
  • 元件 — 已包含在方案中的元件會顯示在每個元件清單 (建置與測試) 結尾的 [選取的元件] 區段中。您可以移除或重新排序選取的元件,以符合您的需求。

    CIS強化元件不遵循 Image Builder 方法中的標準元件排序規則。CIS強化元件一律會持續執行,以確保基準測試會針對您的輸出影像執行。

    注意

    建置和測試元件清單會根據元件擁有者類型顯示可用的元件。若要為您的方案新增或更新元件,請為您要尋找的元件選取擁有者類型。例如,如果您要新增與您在中訂閱之基礎映像檔相關聯的元件 AWS Marketplace,請Third party managed從搜尋列旁邊的擁有者類型清單中選取。

    您可以為選取的元件設定下列設定:

    • 版本控制選項 — 預先選取,但您可以變更它們。我們建議您選擇 [使用最新的可用元件版本] 選項,以確保映像組建始終會選取最新版本的元件。如果您需要在方案中使用特定元件版本,您可以選擇 [指定元件版本],然後在出現的 [元件版本] 方塊中輸入版本。

    • 輸入參數 — 顯示元件接受的輸入參數。「」會預先填入方案先前版本的值。如果您是第一次在此方案中使用此元件,且已為輸入參數定義了預設值,則預設值會顯示在「值」(Val ue) 方塊中,並顯示灰色文字。如果未輸入其他值,「Image Builder」會使用預設值。

      如果需要輸入參數,但未在組件中定義預設值,則必須提供值。如果缺少任何必要參數且未定義預設值,Image Builder 將不會建立配方版本。

      重要

      元件參數是純文字值,並已登入 AWS CloudTrail。我們建議您使用 AWS Secrets Manager 或 AWS Systems Manager 參數存放區來儲存您的秘密。如需有關 Secrets Manager 的詳細資訊,請參閱什麼是 Secrets Manager?《AWS Secrets Manager 使用者指南》中。若要取得有關 AWS Systems Manager 參數存放區的更多資訊,請AWS Systems Manager 參閱AWS Systems Manager 使用指南中的參數存放區

    若要展開「版本控制」選項或「輸入」參數的設定,您可以選擇設定名稱旁邊的箭頭。若要展開所有選取零組件的所有設定,您可以將全部展開開關切換為關閉和開啟。

碼頭文件模板
  • 碼頭文件模板-預填充,但可編輯。您可以指定下列 Image Builder 在執行階段以組建資訊取代的下列任何內容變數。

     

    parentImage (必填)

    在建置階段,此變數會解析為您的方案的基礎映像檔。

    範例:

    FROM {{{ imagebuilder:parentImage }}}
    環境 (如果已指定元件,則需要)

    此變數將解析為執行元件的指令碼。

    範例:

    {{{ imagebuilder:environments }}}
    組件(可選)

    Image Builder 會針對容器配方所包含的元件,解析組建和測試元件指令碼。此變數可以放置在 Docker 檔案中的任何位置,位於環境變數之後。

    範例:

    {{{ imagebuilder:components }}}
目標儲存庫
  • 目標存放庫名稱 — 如果在管道執行的區域 (區域 1) 的管道分發組態中未指定其他儲存庫,則儲存輸出影像的 Amazon ECR 儲存庫。

若要建立新的容器配方版本:
  1. 在容器配方詳細資料頁面的頂端,選擇 [建立新版本]。您會前往容器配方的 [建立配方] 頁面。

  2. 若要建立新版本,請進行變更,然後選擇 [建立方案]。

如需有關如何在建立映像管線時建立容器配方的詳細資訊,請參閱本指南的「入門」一節步驟 2:選擇食譜中的。

建立容器配方 AWS CLI

若要使用中的imagebuilder create-container-recipe指令建立 Image Builder 器容器方案 AWS CLI,請依照下列步驟執行:

必要條件

在執行本節中的 Image Builder 命令以建立容器方案之前 AWS CLI,您必須先建立方案將使用的元件。以下步驟中的容器配方範例是指本指南一從建立自訂元件 AWS CLI節中建立的範例元件。

建立元件之後,或使用現有的元件時,請注ARNs意您要包含在配方中的內容。

  1. 創建一個CLI輸入JSON文件

    您可以使用內嵌命令參數為命create-container-recipe令提供所有輸入。但是,生成的命令可能很長。若要簡化指令,您可以改為提供包含所有容器配方設定的JSON檔案

    注意

    JSON檔案中資料值的命名慣例遵循針對 Image Builder API 動作請求參數指定的模式。若要檢閱指API令請求參數,請參閱 EC2Image Builder 參API考中的CreateContainerRecipe指令。

    若要將資料值提供為指令行參數,請參考《指AWS CLI 令參考》中指定的參數名稱。

    以下是此範例中參數的摘要:

    • 元件 (物件陣列,必要) — 包含ComponentConfiguration物件陣列。至少必須指定一個組建元件:

      注意

      Image Builder 會依照您在方案中指定元件的順序來安裝元件。不過,CIS強化元件永遠會持續執行,以確保基準測試會針對您的輸出影像執行。

      • 組件 ARN(字符串,必需)-組件ARN。

        提示

        若要使用範例建立您自己的容器方案,ARNs請將範例ARNs取代為您用於方案的元件。其中包括每個項目的 AWS 區域、名稱和版本號碼。

      • 參數 (物件陣列) — 包含ComponentParameter物件陣列。如果需要輸入參數,但未在組件中定義預設值,則必須提供值。如果缺少任何必要參數且未定義預設值,Image Builder 將不會建立配方版本。

        重要

        元件參數是純文字值,並已登入 AWS CloudTrail。我們建議您使用 AWS Secrets Manager 或 AWS Systems Manager 參數存放區來儲存您的秘密。如需有關 Secrets Manager 的詳細資訊,請參閱什麼是 Secrets Manager?《AWS Secrets Manager 使用者指南》中。若要取得有關 AWS Systems Manager 參數存放區的更多資訊,請AWS Systems Manager 參閱AWS Systems Manager 使用指南中的參數存放區

        • name (字串,必要) — 要設定的元件參數名稱。

        • value (字串陣列,必要) — 包含用來設定具名元件參數值的字串陣列。如果為元件定義了預設值,且未提供其他值,則 AWS TOE 會使用預設值。

    • containerType(字串,必要) — 要建立的容器類型。有效值包括DOCKER

    • dockerfileTemplateData(字符串)-用於構建圖像的 Docker 文件模板,表示為內聯數據塊。

    • name (字串,必要) — 容器配方的名稱。

    • 說明 (字串) — 容器配方的說明。

    • parentImage(字串,必要) — 容器配方用來做為自訂影像基礎的影像。該值可以是基本映像ARN或 AMI ID。

    • platformOverride(字串) — 指定使用自訂基本映像時的作業系統平台。

    • semanticVersion(字串,必要) — 以下列格式指定之容器配方的語意版本,每個位置都有數值,表示特定版本:<major>。 <minor>。 <patch>。例如,即改為 1.0.0。若要進一步瞭解 Image Builder 資源的語意版本控制,請參閱Image Builder 中的語義版本

    • 標籤 (字串對應) — 附加至容器配方的標籤。

    • instanceConfiguration(物件) — 可用來設定執行個體以建置和測試容器映像檔的一組選項。

      • 圖像(字符串)-用作容器構建和測試實例的基本映像的 AMI ID。如果未指定此值,Image Builder 會使用適當的 Amazon ECS 最佳化AMI作為基礎映像。

      • blockDeviceMappings(物件陣列) — 定義要貼附的圖塊裝置,以從image參數中AMI指定的 Image Builder 建置例證。

        • deviceName(字串) — 這些對映套用至的裝置。

        • ebs (物件) — 用於管理此對應的 Amazon EBS 特定組態。

          • deleteOnTermination(布林值) — 用於在關聯裝置終止時配置刪除。

          • 加密 (布林值) — 用於設定裝置加密。

          • volumeSize(整數) — 用於覆寫裝置的磁碟區大小。

          • volumeType(字串) — 用於覆寫裝置的磁碟區類型。

    • targetRepository(物件,必要) — 如果您的管線發佈組態中沒有指定其他存放庫,則為管線執行所在的區域 (Region 1),則為容器映像的目標存放庫。

      • repositoryName(字串,必要) — 儲存輸出容器映像檔的容器存放庫名稱。此名稱以儲存庫位置為字首。

      • 服務 (字串,必要) — 指定註冊此影像的服務。

    • workingDirectory(字串) — 在建置和測試工作流程期間使用的工作目錄。

    { "components": [ { "componentArn": "arn:aws:imagebuilder:us-east-1:123456789012:component/helloworldal2/x.x.x" } ], "containerType": "DOCKER", "description": "My Linux Docker container image", "dockerfileTemplateData": "FROM {{{ imagebuilder:parentImage }}}\n{{{ imagebuilder:environments }}}\n{{{ imagebuilder:components }}}", "name": "amazonlinux-container-recipe", "parentImage": "amazonlinux:latest", "platformOverride": "Linux", "semanticVersion": "1.0.2", "tags": { "sometag" : "Tag detail" }, "instanceConfiguration": { "image": "ami-1234567890", "blockDeviceMappings": [ { "deviceName": "/dev/xvda", "ebs": { "deleteOnTermination": true, "encrypted": false, "volumeSize": 8, "volumeType": "gp2" } } ] }, "targetRepository": { "repositoryName": "myrepo", "service": "ECR" }, "workingDirectory": "/tmp" }
  2. 建立食譜

    使用下列指令建立配方。在參數中提供您在上一個步驟中建立的JSON檔案名--cli-input-json稱:

    aws imagebuilder create-container-recipe --cli-input-json file://create-container-recipe.json
    注意
    • 您必須在JSON檔案路徑的開頭包含file://符號。

    • JSON檔案的路徑應遵循執行指令之基礎作業系統的適當慣例。例如,Windows 會使用反斜線 (\) 來參照目錄路徑,而 Linux 會使用正斜線 (/)。