建立新的容器配方版本 - EC2 映像建置器

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

建立新的容器配方版本

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

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

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

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

  • 版本 – 必要。此詳細資訊不會預先填入目前版本或任何種類的序列。以 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,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,請遵循下列步驟:

必要條件

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

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

  1. 建立CLI輸入JSON檔案

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

    注意

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

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

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

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

      注意

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

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

        提示

        若要使用 範例建立您自己的容器配方,請將範例取代ARNsARNs為您用於配方之元件的 。其中包括每個 的 、 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指定的 Image Builder 建置執行個體時要連接的區塊裝置。

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

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

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

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

          • 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 會使用正斜線 (/)。