本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立新的容器配方版本
本節說明如何建立新的容器配方版本。
使用主控台建立新的容器配方版本
建立新的容器配方版本與建立新的配方幾乎相同。差別在於,在大多數情況下,會預先選取特定詳細資訊以符合基本配方。下列清單說明建立新配方和建立新現有配方版本之間的差異。
配方詳細資訊
-
名稱 – 無法編輯。
-
版本 – 必要。此詳細資訊不會預先填入目前版本或任何種類的序列。輸入您要以 major.minor.patch 格式建立的版本編號。如果版本已存在,您遇到錯誤。
基礎映像
-
選取影像選項 – 預先選取,但可編輯。如果您變更基礎映像來源的選擇,則可能會遺失其他取決於您選擇的原始選項的詳細資訊。
若要查看與您基本影像選取項目相關聯的詳細資訊,請選擇符合您選取的標籤。
執行個體組態
-
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 儲存庫。
若要建立新的容器配方版本:
-
在容器配方詳細資訊頁面頂端,選擇建立新版本。系統會將您導向容器配方的建立配方頁面。
-
若要建立新版本,請進行變更,然後選擇建立配方。
如需如何在建立映像管道時建立容器配方的詳細資訊,請參閱本指南步驟 2:選擇配方的入門一節。
使用 建立容器配方 AWS CLI
若要使用 中的 imagebuilder create-container-recipe
命令建立 Image Builder 容器配方 AWS CLI,請依照下列步驟進行:
必要條件
執行本節中的映像建置器命令以使用 建立容器配方之前 AWS CLI,您必須建立配方將使用的元件。下列步驟中的容器配方範例是指本指南 從 建立自訂元件 AWS CLI區段中建立的範例元件。
建立元件後,或如果您使用的是現有元件,請注意您要包含在配方中的 ARNs。
-
建立 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" }
-
-
建立配方
使用下列命令來建立配方。在
--cli-input-json
參數中提供您在上一個步驟中建立的 JSON 檔案名稱:aws imagebuilder create-container-recipe --cli-input-json file://
create-container-recipe.json
注意
-
您必須在 JSON 檔案路徑的開頭包括
file://
標記。 -
JSON 檔案的路徑應遵循執行命令之基礎作業系統的適當慣例。例如,Windows 使用反斜線 (\) 來參考目錄路徑,而 Linux 和 macOS 則使用正斜線 (/)。
-