

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

# 建立新的映像配方版本
<a name="create-image-recipes"></a>

本節說明如何建立新版本的映像配方。

**Topics**
+ [從主控台建立新的映像配方版本](#create-image-recipe-version-console)
+ [使用 建立映像配方 AWS CLI](#create-image-recipe-cli)
+ [在主控台中將 VM 匯入為基礎映像](#import-vm-recipes)

## 從主控台建立新的映像配方版本
<a name="create-image-recipe-version-console"></a>

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

**新版本中的基礎配方詳細資訊**
+ **名稱** – *無法編輯*。
+ **版本** – 必要。輸入您要建立的版本編號，格式為 *<major>.<minor>.<patch>*。Image Builder 支援配方的自動版本增量，可讓您在配方版本中使用萬用字元模式。當您使用萬用字元版本建立配方，例如 時`1.0.x`，Image Builder 會自動遞增版本 （例如 `1.0.1`、`1.0.2`、 `1.0.3`等）。這不需要手動追蹤和增加配方版本。
+ **選取影像**選項 – 已預先選取，但您可以進行編輯。如果您變更基礎映像來源的選擇，可能會遺失其他取決於您選擇的原始選項的詳細資訊。

  若要查看與基礎映像選擇相關聯的詳細資訊，請選擇符合您選取的標籤。

------
#### [ Managed image ]
  + **映像作業系統 (OS)** – *無法編輯*。
  + **映像名稱** – 根據您對現有配方所做的基礎映像選擇組合預先選取。不過，如果您變更**選取映像**選項，則會遺失預先選取的**映像名稱**。
  + **自動版本控制選項** – *不符合*您的基本配方。此映像選項預設為**使用選取的作業系統版本**選項。
**重要**  
如果您使用語意版本控制來啟動管道建置，請務必將此值變更為**使用最新的可用作業系統版本**。若要進一步了解映像建置器資源的語意版本控制，請參閱[Image Builder 中的語意版本控制](ibhow-semantic-versioning.md)。

------
#### [ AWS Marketplace image ]
  + **訂閱** – 此標籤應開啟，且來自 的訂閱映像 AWS Marketplace 應預先選取，以符合您的基本配方。如果您變更配方用作其基礎映像的映像，您可能會遺失其他取決於您選擇的原始映像的詳細資訊。

  如需 AWS Marketplace 產品的詳細資訊，請參閱[《 買方指南》中的購買產品](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-subscribing-to-products.html)。 *AWS Marketplace *

------
#### [ Custom AMI ]

  **AMI 來源** （必要） - 輸入 AMI ID 或 AWS Systems Manager (SSM) 參數存放區參數，其中包含要用作基礎映像的 AMI ID。SSM 代理程式必須預先安裝在選取的 AMI 中。
  + **AMI ID** – 此設定不會預先填入您的原始項目。輸入基礎映像的 AMI ID。範例：`ami-1234567890abcdef1`。
  + **SSM 參數** – 輸入 SSM 參數存放區參數的名稱或 ARN，其中包含基礎映像的 AMI ID。範例：`/ib/test/param` 或 `arn:aws:ssm:us-east-1:111122223333:parameter/ib/test/param`。

------
+ **執行個體組態** – 已預先選取設定，但您可以編輯這些設定。
  + **Systems Manager 代理**程式 – 您可以選取或清除此核取方塊，以控制 Systems Manager 代理程式在新映像上的安裝。預設會清除此核取方塊，以在新映像中包含 Systems Manager 代理程式。若要從最終映像中移除 Systems Manager 代理程式，請選取核取方塊，讓代理程式不包含在您的 AMI 中。
  + **使用者資料** – 當您啟動建置執行個體時，您可以使用此區域來提供命令或要執行的命令指令碼。不過，此值會取代 Image Builder 可能新增的任何命令，以確保已安裝 Systems Manager。這些命令包括在建立新映像之前，Image Builder 通常為 Linux 映像執行的清除指令碼。

    當 Image Builder 啟動執行個體時，使用者資料指令碼會在 Cloud-init 階段期間執行，元件執行開始之前執行。此步驟會記錄到執行個體上的下列檔案：`var/log/cloud-init.log`。
**注意**  
如果您輸入使用者資料，請確定 Systems Manager 代理程式已預先安裝在基礎映像上，或是您在使用者資料中包含安裝。
對於 Linux 映像，請確保執行清除步驟，方法是在使用者資料指令碼`perform_cleanup`中包含 命令來建立名為 的空白檔案。Image Builder 會偵測此檔案，並在建立新映像之前執行清除指令碼。如需詳細資訊和範例指令碼，請參閱 [Image Builder 的安全最佳實務](security-best-practices.md)。
+ **工作目錄** – 已預先選取，但您可以進行編輯。
+ **元件** – 已包含在配方中的元件會顯示在每個元件清單結尾的**所選**元件區段中 （建置和測試）。您可以移除或重新排序選取的元件，以符合您的需求。

  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？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)。如需 AWS Systems Manager 參數存放區的詳細資訊，請參閱*AWS Systems Manager 《 使用者指南*》中的[AWS Systems Manager 參數存放區](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)。

  若要展開**版本控制選項**或**輸入參數**的設定，您可以選擇設定名稱旁的箭頭。若要展開所有所選元件的所有設定，您可以切換關閉和開啟**全部展開**。
+ **儲存 （磁碟區）** – 已預先填入。根磁碟區 **裝置名稱**、**快照**和 **IOPS** 選擇無法編輯。不過，您可以變更所有剩餘的設定，例如**大小**。您也可以新增磁碟區，並加密新的或現有的磁碟區。

  若要加密 Image Builder 在來源區域中 （建置執行的位置） 您帳戶下建立之映像的磁碟區，您必須在映像配方中使用儲存磁碟區加密。在建置的分佈階段執行的加密僅適用於分佈到其他帳戶或區域的映像。
**注意**  
如果您針對磁碟區使用加密，您必須分別選取每個磁碟區的金鑰，即使金鑰與根磁碟區所用的金鑰相同。

**若要建立新的映像配方版本：**

1. 在配方詳細資訊頁面頂端，選擇**建立新版本**。這會帶您前往**建立映像配方**頁面。

1. 若要建立新版本，請進行變更，然後選擇**建立配方**。

   您的最終映像最多可包含 AWS Marketplace 來自映像產品和元件的四個產品代碼。如果您選取的基礎映像和元件包含四個以上的產品代碼，映像建置器會在您嘗試建立配方時傳回錯誤。

如需有關如何在建立映像管道時建立映像配方的詳細資訊，請參閱本指南**入門**一節[步驟 2：選擇配方](start-build-image-pipeline.md#start-build-image-step2)中的 。

## 使用 建立映像配方 AWS CLI
<a name="create-image-recipe-cli"></a>

若要使用 中的 Image Builder `create-image-recipe`命令建立映像配方 AWS CLI，請遵循下列步驟：

**先決條件**  
在您執行本節中的映像建置器命令從 建立映像配方之前 AWS CLI，您可以選擇建立配方使用的元件。下列步驟中的映像配方範例是指本指南 [從 建立自訂元件 AWS CLI](create-component.md#create-component-ib-cli)區段中建立的範例元件。

如果您想要在配方中包含元件，請注意您要包含ARNs。您也可以建立配方，而不需要任何元件來測試現有的 AMIs或僅限分佈的工作流程。

1. 

**建立 CLI 輸入 JSON 文件**

   您可以使用內嵌**create-image-recipe**命令參數提供命令的所有輸入。不過，產生的命令可能相當長。若要簡化命令，您可以改為提供包含所有配方設定的 JSON 檔案。
**注意**  
JSON 檔案中資料值的命名慣例遵循為映像建置器 API 操作請求參數指定的模式。若要檢閱 API 操作請求參數，請參閱 *EC2 Image Builder API 參考*中的 [CreateImageRecipe](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateImageRecipe.html) 命令。  
若要提供資料值做為命令列參數，請參閱 *AWS CLI 命令參考*中指定的參數名稱。

   以下是這些範例指定的參數摘要：
   + **name** （字串，必要） – 映像配方的名稱。
   + **description** （字串） – 映像配方的描述。
   + **parentImage** （字串，必要） – 映像配方用作自訂映像基礎的映像。您可以使用下列其中一個選項來指定父系映像：
     + AMI ID
     + 映像建置器映像資源 ARN
     + AWS Systems Manager (SSM) 參數存放區參數，字首為 `ssm:`，後面接著參數名稱或 ARN。
     + AWS Marketplace 產品 ID
**注意**  
Linux 和 macOS 範例使用 Image Builder AMI，而 Windows 範例使用 ARN。
   + **semanticVersion** （字串，必要） – 輸入您要建立的版本編號，格式為 *<major>.<minor>.<patch>*。Image Builder 支援配方的自動版本增量，可讓您在配方版本中使用萬用字元模式。當您使用萬用字元版本建立配方，例如 時`1.0.x`，Image Builder 會自動遞增版本 （例如 `1.0.1`、`1.0.2`、 `1.0.3`等）。這不需要手動追蹤和增加配方版本。若要進一步了解 Image Builder 資源的語意版本控制，請參閱 [Image Builder 中的語意版本控制](ibhow-semantic-versioning.md)。
   + **元件** （陣列、選用） – 包含`ComponentConfiguration`物件陣列。元件是選用的 - 您可以建立配方，而不需要用於測試或分發工作流程的任何元件：
**注意**  
Image Builder 會依照您在配方中指定的順序安裝元件。不過，CIS 強化元件一律會最後執行，以確保基準測試會針對您的輸出映像執行。
     + **componentARN** （字串，必要） – 元件 ARN。
**提示**  
若要使用其中一個範例來建立您自己的映像配方，您必須將範例 ARNs 取代為您用於配方之元件的 ARNs。
     + **參數** （物件陣列） – 包含`ComponentParameter`物件陣列。如果需要輸入參數，但元件中沒有定義的預設值，則必須提供值。如果缺少任何必要的參數且未定義預設值，Image Builder 將不會建立配方版本。
**重要**  
元件參數是純文字值，並會登入 AWS CloudTrail。建議您使用 AWS Secrets Manager 或 AWS Systems Manager 參數存放區來存放秘密。如需 Secrets Manager 的詳細資訊，請參閱*AWS Secrets Manager 《 使用者指南*》中的[什麼是 Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)。如需 AWS Systems Manager 參數存放區的詳細資訊，請參閱*AWS Systems Manager 《 使用者指南*》中的[AWS Systems Manager 參數存放區](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)。
       + **name** （字串，必要） – 要設定的元件參數名稱。
       + **value** （字串陣列，必要） – 包含字串陣列，以設定具名元件參數的值。如果為元件定義了預設值，且未提供其他值，則 AWS TOE 會使用預設值。
   + **additionalInstanceConfiguration** （物件） – 為您的建置執行個體指定其他設定和啟動指令碼。
     + **systemsManagerAgent** （物件） – 包含建置執行個體上 Systems Manager 代理程式的設定。
       + **uninstallAfterBuild** （布林值） – 在建立新的 AMI 之前，控制 Systems Manager 代理程式是否從最終建置映像中移除。如果此選項設定為 `true`，則代理程式會從最終映像中移除。如果 選項設定為 `false`，則代理程式會保留在 中，使其包含在新的 AMI 中。預設值為 `false`。
**注意**  
如果`uninstallAfterBuild`屬性未包含在 JSON 檔案中，且下列條件為 true，則 Image Builder 會從最終映像中移除 Systems Manager 代理程式，使其無法在 AMI 中使用：  
`userDataOverride` 為空白或已從 JSON 檔案省略。
Image Builder 會在未於基礎映像預先安裝代理程式的作業系統的建置執行個體上自動安裝 Systems Manager 代理程式。
     + **userDataOverride** （字串） – 提供在您啟動建置執行個體時要執行的命令或命令指令碼。
**注意**  
使用者資料一律為 Base 64 編碼格式。例如，下列命令編碼為 `IyEvYmluL2Jhc2gKbWtkaXIgLXAgL3Zhci9iYi8KdG91Y2ggL3Zhcg==`：  

       ```
       #!/bin/bash
       mkdir -p /var/bb/
       touch /var
       ```
Linux 範例使用此編碼值。

------
#### [ Linux ]

   下列範例中的基礎映像 (`parentImage` 屬性） 是 AMI。使用 AMI 時，您必須擁有 AMI 的存取權，且 AMI 必須位於來源區域 （映像建置器執行命令的相同區域）。將檔案儲存為 `create-image-recipe.json`，並在 **create-image-recipe**命令中使用它。

   ```
   {
   "name": "BB Ubuntu Image recipe",
   "description": "Hello World image recipe for Linux.",
   "parentImage": "ami-1234567890abcdef1",
   "semanticVersion": "1.0.0",
   "components": [
   	{
   		"componentArn": "arn:aws:imagebuilder:us-west-2:111122223333:component/bb$"
   	}
   ],
   "additionalInstanceConfiguration": {
   	"systemsManagerAgent": {
   	 	"uninstallAfterBuild": true
   	},
   	"userDataOverride": "IyEvYmluL2Jhc2gKbWtkaXIgLXAgL3Zhci9iYi8KdG91Y2ggL3Zhcg=="
   }
   }
   ```

------
#### [ Windows ]

   下列範例參考最新版的 Windows Server 2016 英文完整基礎映像。此範例中的 ARN 會根據您指定的語意版本篩選條件參考最新的映像：`arn:aws:imagebuilder:us-west-2:aws:image/windows-server-2016-english-full-base-x86/x.x.x`。

   ```
   {
   "name": "MyBasicRecipe",
   "description": "This example image recipe creates a Windows 2016 image.",
   "parentImage": "arn:aws:imagebuilder:us-west-2:aws:image/windows-server-2016-english-full-base-x86/x.x.x",
   "semanticVersion": "1.0.0",
   "components": [
   	{
   		"componentArn": "arn:aws:imagebuilder:us-west-2:111122223333:component/my-example-component/2019.12.02/1"
   	},
   	{
   		"componentArn": "arn:aws:imagebuilder:us-west-2:111122223333:component/my-imported-component/1.0.0/1"
   	}
   ]
   }
   ```

**注意**  
若要進一步了解映像建置器資源的語意版本控制，請參閱[Image Builder 中的語意版本控制](ibhow-semantic-versioning.md)。

------
#### [ macOS ]

   下列範例中的基礎映像 (`parentImage` 屬性） 是 AMI。使用 AMI 時，您必須擁有 AMI 的存取權，且 AMI 必須位於來源區域 （映像建置器執行命令的相同區域）。將檔案儲存為 `create-image-recipe.json`，並在 **create-image-recipe**命令中使用它。

   ```
   {
   "name": "macOS Catalina Image recipe",
   "description": "Hello World image recipe for macOS.",
   "parentImage": "ami-1234567890abcdef1",
   "semanticVersion": "1.0.0",
   "components": [
   	{
   		"componentArn": "arn:aws:imagebuilder:us-west-2:111122223333:component/catalina$"
   	}
   ],
   "additionalInstanceConfiguration": {
   	"systemsManagerAgent": {
   	 	"uninstallAfterBuild": true
   	},
   	"userDataOverride": "IyEvYmluL2Jhc2gKbWtkaXIgLXAgL3Zhci9iYi8KdG91Y2ggL3Zhcg=="
   }
   }
   ```

------

   **範例：不含元件的配方**

   您可以建立配方，而不需要任何元件來測試現有的 AMIs或僅限分佈的工作流程。下列範例顯示使用現有 AMI 而不套用任何其他元件的配方：

   ```
   {
   	"name": "Test Distribution Recipe",
   	"description": "Recipe for testing and distributing existing AMI without modifications.",
   	"parentImage": "ami-1234567890abcdef1",
   	"semanticVersion": "1.0.0",
   	"additionalInstanceConfiguration": {
   		"systemsManagerAgent": {
   		 	"uninstallAfterBuild": true
   		}
   	}
   }
   ```

1. 

**建立配方**

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

   ```
   aws imagebuilder create-image-recipe --cli-input-json file://create-image-recipe.json
   ```
**注意**  
您必須在 JSON 檔案路徑的開頭包括 `file://` 標記。
JSON 檔案的路徑應遵循執行命令之基礎作業系統的適當慣例。例如，Windows 使用反斜線 (\$1) 來參考目錄路徑，而 Linux 和 macOS 則使用正斜線 (/)。

   您的最終映像最多可包含 AWS Marketplace 來自映像產品和元件的四個產品代碼。如果您選取的基礎映像和元件包含四個以上的產品代碼，Image Builder 會在執行 `create-image-recipe`命令時傳回錯誤。

## 在主控台中將 VM 匯入為基礎映像
<a name="import-vm-recipes"></a>

在本節中，我們著重於如何匯入虛擬機器 (VM) 做為映像配方的基礎映像。我們不涵蓋在此處建立配方或配方版本所涉及的其他步驟。如需使用映像建置器主控台中的管道建立精靈建立新的映像配方的其他步驟，請參閱 [管道精靈：建立 AMI](start-build-image-pipeline.md)。如需建立新映像配方或配方版本的其他步驟，請參閱 [建立新的映像配方版本](#create-image-recipes)。

若要在映像建置器主控台中將 VM 匯入為映像配方的基礎映像，請依照下列步驟以及任何其他必要步驟來建立配方或配方版本。

1. 在基礎**映像的選取**映像區段中，選取**匯入基礎映像**選項。

1. 像平常一樣選擇**映像作業系統 (OS)** 和**作業系統版本**。

### VM 匯入組態
<a name="import-vm-recipe-console-config"></a>

當您從虛擬化環境匯出 VM 時，該程序會建立一組或多個磁碟容器檔案，做為 VM 環境、設定和資料的快照。您可以使用這些檔案將 VM 匯入為映像配方的基礎映像。如需在映像建置器中匯入 VMs 的詳細資訊，請參閱 [匯入和匯出 VM 映像](vm-import-export.md)

若要指定匯入來源的位置，請遵循下列步驟：

**匯入來源**  
在磁碟容器 **1 區段中，指定要匯入之第一個 VM 映像磁碟容器**或快照的來源。

1. **來源** – 這可以是 S3 儲存貯體或 EBS 快照。

1. **選取磁碟的 S3 位置** – 在存放磁碟映像的 Amazon S3 中輸入位置。若要瀏覽位置，請選擇**瀏覽 S3**。

1. 若要新增磁碟容器，請選擇**新增磁碟容器**。

**IAM 角色**  
若要將 IAM 角色與您的 VM 匯入組態建立關聯，請從 **IAM 角色**下拉式清單中選取角色，或選擇**建立新角色**以建立新的角色。如果您建立新的角色，IAM 角色主控台頁面會在單獨的索引標籤中開啟。

#### 進階設定 – *選用*
<a name="import-vm-recipe-console-opt"></a>

下列設定為選用。透過這些設定，您可以為匯入建立的基礎映像設定加密、授權、標籤等。

**一般**

1. 指定基礎映像的唯一**名稱**。如果您未輸入值，基礎映像會繼承配方名稱。

1. 指定基礎映像的**版本**。使用下列格式：`<major>.<minor>.<patch>`。如果您未輸入值，基礎映像會繼承配方版本。

1. 您也可以輸入基礎映像的**描述**。

**基礎映像架構**  
若要指定 VM 匯入來源的架構，請從**架構**清單中選取值。

**加密**  
如果您的 VM 磁碟映像已加密，您必須提供用於匯入程序的金鑰。若要 AWS KMS key 為匯入指定 ，請從**加密 (KMS 金鑰）** 清單中選擇值。此清單包含您的帳戶在目前區域中可存取的 KMS 金鑰。

**授權管理**  
當您匯入 VM 時，匯入程序會自動偵測 VM 作業系統，並將適當的授權套用至基礎映像。根據您的作業系統平台，授權類型如下：
+ **包含授權** – 適用於您平台的適當 AWS 授權會套用至您的基礎映像。
+ **自備授權 (BYOL)** – 保留 VM 的授權，如適用。

若要將以 AWS License Manager 建立的授權組態連接至您的基礎映像，請從**授權組態名稱**清單中選取 。如需 License Manager 的詳細資訊，請參閱[使用 AWS License Manager]()

**注意**  
授權組態包含以企業協議條款為基礎的授權規則。
Linux 僅支援 BYOL 授權。

**標籤 （基礎映像）**  
標籤使用鍵/值對將可搜尋的文字指派給您的 Image Builder 資源。若要指定匯入基礎映像的標籤，請使用索引鍵和值方塊輸入**索引鍵****/值**對。

若要新增標籤，請選擇 **Add tag (新增標籤)**。若要移除標籤，請選擇 **Remove tag (移除標籤)**。