

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

# 在映像建置器中管理配方
<a name="manage-recipes"></a>

EC2 Image Builder 配方會定義基本映像，做為建立新映像的起點，以及您新增的一組元件來自訂映像，並確認一切如預期般運作。Image Builder 為每個元件提供自動版本選擇。根據預設，您最多可以將 20 個元件套用至配方。這包括建置和測試元件。

建立配方後，您無法修改或取代配方。若要在建立配方後更新元件，您必須建立新的配方或配方版本。您可以隨時將標籤套用至現有的配方。如需在 中使用 Image Builder 命令標記資源的詳細資訊 AWS CLI，請參閱本指南的 [標籤資源](tag-resources.md)一節。

**提示**  
您可以在配方中使用 Amazon 受管元件，也可以開發自己的自訂元件。如需詳細資訊，請參閱[為您的映像建置器映像開發自訂元件](create-custom-components.md)。對於建立輸出 AMIs的映像配方，您也可以使用 AWS Marketplace 映像產品和元件。如需與 AWS Marketplace 產品整合的詳細資訊，請參閱 [AWS Marketplace Image Builder 中的 整合](integ-marketplace.md)。

本節說明如何列出、檢視和建立配方。

**Topics**
+ [列出並檢視映像配方詳細資訊](image-recipe-details.md)
+ [列出和檢視容器配方詳細資訊](container-recipe-details.md)
+ [建立新的映像配方版本](create-image-recipes.md)
+ [建立新的容器配方版本](create-container-recipes.md)
+ [清除資源](#recipes-cleanup)

# 列出並檢視映像配方詳細資訊
<a name="image-recipe-details"></a>

本節說明您可以尋找資訊和檢視 EC2 Image Builder 映像配方詳細資訊的各種方式。

**Topics**
+ [從主控台列出映像配方](#list-image-recipes-console)
+ [從 列出映像配方 AWS CLI](#cli-list-image-recipes)
+ [從主控台檢視映像配方詳細資訊](#view-image-recipe-details-console)
+ [從 取得映像配方詳細資訊 AWS CLI](#cli-get-image-recipe)
+ [從 取得映像配方政策詳細資訊 AWS CLI](#cli-get-image-recipe-policy)

## 從主控台列出映像配方
<a name="list-image-recipes-console"></a>

若要在映像建置器主控台中查看在您帳戶下建立的映像配方清單，請依照下列步驟執行：

1. 開啟 EC2 Image Builder 主控台，位於 [https://console.aws.amazon.com/imagebuilder/](https://console.aws.amazon.com/imagebuilder/)。

1. 從導覽窗格中選擇**映像配方**。這會顯示在您帳戶下建立的影像配方清單。

1. 若要檢視詳細資訊或建立新的配方版本，請選擇**配方名稱**連結。這會開啟配方的詳細資訊檢視。
**注意**  
您也可以選取**配方名稱**旁的核取方塊，然後選擇**檢視詳細資訊**。

## 從 列出映像配方 AWS CLI
<a name="cli-list-image-recipes"></a>

下列範例示範如何使用 列出所有映像配方 AWS CLI。

```
aws imagebuilder list-image-recipes
```

## 從主控台檢視映像配方詳細資訊
<a name="view-image-recipe-details-console"></a>

若要使用映像建置器主控台檢視特定映像配方的詳細資訊，請使用中所述的步驟選取要檢閱的映像配方[從主控台列出映像配方](#list-image-recipes-console)。

在配方詳細資訊頁面上，您可以：
+ 刪除配方。如需在映像建置器中刪除資源的詳細資訊，請參閱 [刪除過期或未使用的映像建置器資源](delete-resources.md)。
+ 建立新的版本。
+ 從配方建立管道。**從此配方選擇建立管道**後，系統會將您導向管道精靈。如需使用管道精靈建立映像建置器管道的詳細資訊，請參閱 [教學課程：從映像建置器主控台精靈建立具有輸出 AMI 的映像管道](start-build-image-pipeline.md)
**注意**  
當您從現有配方建立管道時，無法使用建立新配方的選項。

## 從 取得映像配方詳細資訊 AWS CLI
<a name="cli-get-image-recipe"></a>

下列範例示範如何使用 **imagebuilder** CLI 命令，透過指定映像配方的 Amazon Resource Name (ARN) 來取得其詳細資訊。

```
aws imagebuilder get-image-recipe --image-recipe-arn arn:aws:imagebuilder:us-west-2:123456789012:image-recipe/my-example-recipe/2020.12.03
```

## 從 取得映像配方政策詳細資訊 AWS CLI
<a name="cli-get-image-recipe-policy"></a>

下列範例示範如何使用 **imagebuilder** CLI 命令，透過指定其 ARN 來取得映像配方政策的詳細資訊。

```
aws imagebuilder get-image-recipe-policy --image-recipe-arn arn:aws:imagebuilder:us-west-2:123456789012:image-recipe/my-example-recipe/2020.12.03
```

# 列出和檢視容器配方詳細資訊
<a name="container-recipe-details"></a>

本節說明您可以尋找資訊和檢視 EC2 Image Builder 容器配方詳細資訊的方式。

**Topics**
+ [在主控台中列出容器配方](#list-container-recipes-console)
+ [使用 列出容器配方 AWS CLI](#cli-list-container-recipes)
+ [在主控台中檢視容器配方詳細資訊](#view-container-recipe-details-console)
+ [使用 取得容器配方詳細資訊 AWS CLI](#cli-get-container-recipe)
+ [使用 取得容器配方政策詳細資訊 AWS CLI](#cli-get-container-recipe-policy)

## 在主控台中列出容器配方
<a name="list-container-recipes-console"></a>

若要在 Image Builder 主控台中查看在您的帳戶下建立的容器配方清單，請依照下列步驟執行：

1. 開啟 EC2 Image Builder 主控台，位於 [https://console.aws.amazon.com/imagebuilder/](https://console.aws.amazon.com/imagebuilder/)。

1. 從導覽窗格中選擇**容器配方**。這會顯示在您帳戶下建立的容器配方清單。

1. 若要檢視詳細資訊或建立新的配方版本，請選擇**配方名稱**連結。這會開啟配方的詳細資訊檢視。
**注意**  
您也可以選取**配方名稱**旁的核取方塊，然後選擇**檢視詳細資訊**。

## 使用 列出容器配方 AWS CLI
<a name="cli-list-container-recipes"></a>

下列範例示範如何使用 列出所有容器配方 AWS CLI。

```
aws imagebuilder list-container-recipes
```

## 在主控台中檢視容器配方詳細資訊
<a name="view-container-recipe-details-console"></a>

若要使用映像建置器主控台檢視特定容器配方的詳細資訊，請選取要檢閱的容器配方，並使用中所述的步驟[在主控台中列出容器配方](#list-container-recipes-console)。

在配方詳細資訊頁面上，您可以執行下列動作：
+ 刪除配方。如需如何在映像建置器中刪除資源的詳細資訊，請參閱 [刪除過期或未使用的映像建置器資源](delete-resources.md)。
+ 建立新的版本。
+ 從配方建立管道。從**此配方中選擇建立管道**後，系統會將您導向管道精靈。如需如何使用管道精靈建立映像建置器管道的詳細資訊，請參閱 [教學課程：從映像建置器主控台精靈建立具有輸出 AMI 的映像管道](start-build-image-pipeline.md)
**注意**  
當您從現有配方建立管道時，無法使用建立新配方的選項。

## 使用 取得容器配方詳細資訊 AWS CLI
<a name="cli-get-container-recipe"></a>

下列範例示範如何使用 **imagebuilder** CLI 命令，透過指定容器配方的 ARN 來取得容器配方的詳細資訊。

```
aws imagebuilder get-container-recipe --container-recipe-arn arn:aws:imagebuilder:us-west-2:123456789012:container-recipe/my-example-recipe/2020.12.03
```

## 使用 取得容器配方政策詳細資訊 AWS CLI
<a name="cli-get-container-recipe-policy"></a>

下列範例示範如何使用 **imagebuilder** CLI 命令，透過指定容器配方政策的 ARN 來取得其詳細資訊。

```
aws imagebuilder get-container-recipe-policy --container-recipe-arn arn:aws:imagebuilder:us-west-2:123456789012:container-recipe/my-example-recipe/2020.12.03
```

# 建立新的映像配方版本
<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 (移除標籤)**。

# 建立新的容器配方版本
<a name="create-container-recipes"></a>

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

**Topics**
+ [使用主控台建立新的容器配方版本](#create-container-recipe-version)
+ [使用 建立容器配方 AWS CLI](#create-container-recipe-cli)

## 使用主控台建立新的容器配方版本
<a name="create-container-recipe-version"></a>

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

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

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

  對於 Docker 容器映像，您可以選擇託管在 DockerHub 上的公有映像、Amazon ECR 中的現有容器映像，或 Amazon 受管容器映像。若要查看與基礎映像選取項目相關聯的詳細資訊，請選擇符合您選取的標籤。

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

------
#### [ ECR image ]
  + **映像作業系統 (OS)** – 已預先選取，但可編輯。
  + **作業系統版本** – 已預先選取，但可編輯。
  + **ECR 映像 ID** – 預先填入，但可編輯。

------
#### [ Docker Hub image ]
  + **映像作業系統 (OS)** – *無法編輯*。
  + **作業系統版本** – 已預先選取，但可編輯。
  + **Docker 影像 ID** – 預先填入，但可編輯。

------

**執行個體組態**
+ **AMI 來源** （必要） – 識別要用作容器建置和測試執行個體基礎映像的自訂 AMI。這可以是 AMI ID 或包含 AMI ID 的 AWS Systems Manager (SSM) 參數存放區參數。
  + **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`。
+ 

**儲存體 (磁碟區)**  
**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？](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)。

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

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

     
**parentImage （必要）**  
在建置時，此變數會解析為配方的基本映像。  
範例：  

  ```
  FROM
  {{{ imagebuilder:parentImage }}}
  ```  
**環境 （如果指定元件則為必要）**  
此變數會解析為執行元件的指令碼。  
範例：  

  ```
  {{{ imagebuilder:environments }}}
  ```  
**元件 （選用）**  
Image Builder 會解析容器配方包含之元件的建置和測試元件指令碼。此變數可以放置在環境變數之後 Dockerfile 的任何位置。  
範例：  

  ```
  {{{ imagebuilder:components }}}
  ```

**目標儲存庫**
+ **目標儲存庫名稱** – 如果管道的分佈組態中沒有為管道執行的區域 （區域 1) 指定其他儲存庫，則儲存輸出映像的 Amazon ECR 儲存庫。

**若要建立新的容器配方版本：**

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

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

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

## 使用 建立容器配方 AWS CLI
<a name="create-container-recipe-cli"></a>

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

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

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

1. 

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

   您可以使用內嵌**create-container-recipe**命令參數提供命令的所有輸入。不過，產生的命令可能很長。若要簡化命令，您可以改為提供包含所有容器配方設定的 JSON 檔案
**注意**  
JSON 檔案中資料值的命名慣例遵循為映像建置器 API 操作請求參數指定的模式。若要檢閱 API 操作請求參數，請參閱 *EC2 Image Builder API 參考*中的 [CreateContainerRecipe](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateContainerRecipe.html) 命令。  
若要提供資料值做為命令列參數，請參閱 *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？](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 會使用預設值。
   + **containerType** （字串，必要） – 要建立的容器類型。有效值包括 `DOCKER`。
   + **dockerfileTemplateData** （字串） – 用來建置映像的 Dockerfile 範本，以內嵌資料 Blob 表示。
   + **name** （字串，必要） – 容器配方的名稱。
   + **description** （字串） – 容器配方的描述。
   + **parentImage** （字串，必要） – 要在容器配方中使用的 Docker 容器映像，做為自訂映像的基準。
     + DockerHub 上託管的公有映像
     + Amazon ECR 中的現有容器映像
     + Amazon 受管容器映像
   + **platformOverride** （字串） – 當您使用自訂基礎映像時，指定作業系統平台。
   + **semanticVersion** （字串，必要） – 以下列格式指定的容器配方語意版本，每個位置都有數值來表示特定版本：*<major>.<minor>.<patch>*。例如，即改為 `1.0.0`。若要進一步了解映像建置器資源的語意版本控制，請參閱[Image Builder 中的語意版本控制](ibhow-semantic-versioning.md)。
   + **tags** （字串映射） – 連接至容器配方的標籤。
   + **instanceConfiguration** （物件） – 一組選項，可用來設定執行個體以建置和測試容器映像。
     + **image** （字串） – 容器建置和測試執行個體的基礎映像。這可以包含 AMI ID，也可以指定 AWS Systems Manager (SSM) 參數存放區參數，字首為 `ssm:`，後面接著參數名稱或 ARN。如果您使用 SSM 參數，參數值必須包含 AMI ID。如果您未指定基礎映像，映像建置器會使用適當的 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-west-2:111122223333: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-1234567890abcdef1",
   	  "blockDeviceMappings": [
   		 {
   			"deviceName": "/dev/xvda",
   			"ebs": {
   				"deleteOnTermination": true,
   				"encrypted": false,
   				"volumeSize": 8,
   				"volumeType": "gp2"
   			 }
   		  }			
   	  ]
   	},
   	"targetRepository": { 
   	  "repositoryName": "myrepo",
   	  "service": "ECR"
   	},
   	"workingDirectory": "/tmp"
   }
   ```

1. 

**建立配方**

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

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

## 清除資源
<a name="recipes-cleanup"></a>

為了避免意外費用，請務必清除您從本指南中的範例建立的資源和管道。如需在映像建置器中刪除資源的詳細資訊，請參閱 [刪除過期或未使用的映像建置器資源](delete-resources.md)。