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

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

建立新的容器配方版本

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

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

建立新的容器配方版本與建立新的配方幾乎相同。差別在於,在大多數情況下,會預先選取特定詳細資訊以符合基本配方。下列清單說明建立新配方和建立新現有配方版本之間的差異。

配方詳細資訊
  • 名稱無法編輯

  • 版本 – 必要。此詳細資訊不會預先填入目前版本或任何種類的序列。輸入您要以 major.minor.patch 格式建立的版本編號。如果版本已存在,您遇到錯誤。

基礎映像
  • 選取影像選項 – 預先選取,但可編輯。如果您變更基礎映像來源的選擇,則可能會遺失其他取決於您選擇的原始選項的詳細資訊。

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

    Managed images
    • 映像作業系統 (OS)無法編輯

    • 影像名稱 – 根據您為現有配方所做的基本影像選擇組合預先選取。不過,如果您變更選取映像選項,則會遺失預先選取的映像名稱

    • 自動版本控制選項不符合您的基本配方。自動版本控制選項預設為使用選取的作業系統版本選項。

      重要

      如果您使用語意版本控制來啟動管道建置,請務必將此值變更為使用最新的可用作業系統版本。若要進一步了解 Image Builder 資源的語意版本控制,請參閱Image Builder 中的語意版本控制

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

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

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

    Docker Hub image
    • 映像作業系統 (OS)無法編輯

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

    • Docker 映像 ID – 預先填入,但可編輯。

執行個體組態
  • AMI ID – 預先填入,但可編輯。

  • 儲存體 (磁碟區)

    EBS 磁碟區 1 (AMI 根目錄) – 預先填入。您無法編輯根磁碟區 裝置名稱快照IOPS 選擇。不過,您可以變更所有剩餘的設定,例如大小。您也可以新增磁碟區。

    注意

    如果您指定了從另一個帳戶與您共用的基本 AMI,則指定的任何次要磁碟區的快照也必須與您的 帳戶共用。

工作目錄
  • 工作目錄路徑 – 預先填入,但可編輯。

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

    CIS 強化元件未遵循 Image Builder 配方中的標準元件排序規則。CIS 強化元件一律會最後執行,以確保基準測試會針對您的輸出映像執行。

    注意

    建置和測試元件清單會根據元件擁有者類型顯示可用的元件。若要新增元件,請選擇新增建置元件,然後選擇適用的擁有權篩選條件。例如,若要新增與 AWS Marketplace 產品相關聯的建置元件,請選取 AWS Marketplace。這會在列出 AWS Marketplace 元件的主控台界面右側開啟選擇面板。

    針對 CIS 元件,選取 Third party managed

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

    • 版本控制選項 – 已預先選取,但您可以進行變更。建議您選擇使用最新的可用元件版本選項,以確保您的映像建置一律取得最新版本的元件。如果您需要在配方中使用特定元件版本,您可以選擇指定元件版本,然後在出現的元件版本方塊中輸入版本。

    • 輸入參數 – 顯示元件接受的輸入參數。會預先填入先前版本配方的值。如果您第一次在此配方中使用此元件,且已為輸入參數定義預設值,則預設值會顯示在帶有反灰色文字的值方塊中。如果未輸入其他值,Image Builder 會使用預設值。

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

      重要

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

    若要展開版本控制選項輸入參數的設定,您可以選擇設定名稱旁的箭頭。若要展開所有所選元件的所有設定,您可以切換關閉和開啟全部展開

Dockerfile 範本
  • Dockerfile 範本 – 預先填入,但可編輯。您可以指定 Image Builder 在執行時間以組建資訊取代的任何下列內容變數。

     

    parentImage (必要)

    在建置時間,此變數會解析為配方的基本映像。

    範例:

    FROM {{{ imagebuilder:parentImage }}}
    環境 (如果指定元件則為必要)

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

    範例:

    {{{ imagebuilder:environments }}}
    元件 (選用)

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

    範例:

    {{{ imagebuilder:components }}}
目標儲存庫
  • 目標儲存庫名稱 – 如果管道執行 (區域 1) 的區域的管道分佈組態中沒有指定其他儲存庫,則儲存輸出映像的 Amazon ECR 儲存庫。

若要建立新的容器配方版本:
  1. 在容器配方詳細資訊頁面頂端,選擇建立新版本。系統會將您導向容器配方的建立配方頁面。

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

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

使用 建立容器配方 AWS CLI

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

必要條件

執行本節中的映像建置器命令以使用 建立容器配方之前 AWS CLI,您必須建立配方將使用的元件。下列步驟中的容器配方範例是指本指南 從 建立自訂元件 AWS CLI區段中建立的範例元件。

建立元件後,或如果您使用的是現有元件,請注意您要包含在配方中的 ARNs。

  1. 建立 CLI 輸入 JSON 文件

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

    注意

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

    若要提供資料值做為命令列參數,請參閱 AWS CLI 命令參考中指定的參數名稱。

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

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

      注意

      Image Builder 會依您在配方中指定的順序安裝元件。不過,CIS 強化元件一律會最後執行,以確保基準測試針對您的輸出映像執行。

      • componentARN (字串,必要) – 元件 ARN。

        提示

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

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

        重要

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

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

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

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

    • dockerfileTemplateData (字串) – 用來建置映像的 Dockerfile 範本,以內嵌資料 Blob 表示。

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

    • description (string) – 容器配方的描述。

    • parentImage (字串,必要) – 容器配方用作自訂映像基礎的影像。此值可以是基礎映像 ARN 或 AMI ID。

    • platformOverride (字串) – 當您使用自訂基礎映像時指定作業系統平台。

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

    • 標籤 (字串映射) – 連接至容器配方的標籤。

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

      • image (string) – 做為容器建置和測試執行個體基礎映像的 AMI ID。如果您未指定此值,Image Builder 會使用適當的 Amazon ECS 最佳化 AMI 做為基礎映像。

      • blockDeviceMappings (物件陣列) – 定義從 image 參數中指定的映像建置器 AMI 建置執行個體時要連接的區塊裝置。

        • deviceName (字串) – 這些映射適用的裝置。

        • ebs (物件) – 用於管理此映射的 Amazon EBS 特定組態。

          • deleteOnTermination (布林值) – 用於設定在關聯裝置終止時的刪除。

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

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

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

    • targetRepository (物件,必要) – 如果管道執行的區域 (區域 1) 的管道分佈組態中沒有指定其他儲存庫,則為容器映像的目的地儲存庫。

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

      • service (字串,必要) – 指定註冊此映像的服務。

    • 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. 建立配方

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

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

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