

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

# 使用映像建置器設定自訂映像
<a name="manage-resources"></a>

組態資源是構成映像管道的建置區塊，以及這些管道產生的映像。本章涵蓋建立、維護和共用映像建置器資源，包括元件、配方和映像，以及基礎設施組態和分佈設定。

**注意**  
為了協助您管理 Image Builder 資源，您可以以標籤的形式將自己的中繼資料指派給每個資源。您可以使用標籤以不同的方式分類資源 AWS ；例如，依用途、擁有者或環境。這在您擁有許多相同類型的資源時很有用。您可以更輕鬆地根據您指派給該資源的標籤來識別特定資源。  
如需在 中使用 Image Builder 命令標記資源的詳細資訊 AWS CLI，請參閱本指南的 [標籤資源](tag-resources.md)一節。

**Topics**
+ [

# 在映像建置器中管理配方
](manage-recipes.md)
+ [

# 管理映像建置器基礎設施組態
](manage-infra-config.md)
+ [

# 管理映像建置器分佈設定
](manage-distribution-settings.md)

# 在映像建置器中管理配方
<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)。

# 管理映像建置器基礎設施組態
<a name="manage-infra-config"></a>

您可以使用基礎設施組態來指定 Image Builder 用來建置和測試 EC2 Image Builder 映像的 Amazon EC2 EC2 基礎設施。基礎設施設定包括：
+ 建置和測試基礎設施的執行個體類型。我們建議您指定多個執行個體類型，因為這可讓 Image Builder 從具有足夠容量的集區啟動執行個體。這可以減少您的暫時性建置失敗。

  對於 Mac 映像，您可能想要選擇原生支援 macOS 作業系統的執行個體類型。如需詳細資訊，請參閱[《Amazon EC2 使用者指南》中的 Amazon EC2 Mac 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-mac-instances.html)。 *Amazon EC2 *
+ 執行個體置放設定，您可以在其中指定從映像啟動的執行個體應前往的主機、主機置放群組或可用區域。
+ 執行個體描述檔，為您的建置和測試執行個體提供執行自訂活動所需的許可。例如，如果您有一個從 Amazon S3 擷取資源的元件，執行個體描述檔需要存取這些檔案的許可。執行個體描述檔也需要一組最低的許可，EC2 Image Builder 才能成功與執行個體通訊。如需詳細資訊，請參閱[準備使用映像建置器建置自訂映像](set-up-ib-env.md)。
+ 管道建置和測試執行個體的 VPC、子網路和安全群組。
+ Image Builder 存放建置和測試應用程式日誌的 Amazon S3 位置。如果您設定記錄，基礎設施組態中指定的執行個體描述檔必須具有目標儲存貯體 () 的`s3:PutObject`許可`arn:aws:s3:::BucketName/*`。
+ Amazon EC2 金鑰對，可讓您登入執行個體，在建置失敗且`terminateInstanceOnFailure`設定為 時進行故障診斷`false`。
+ 映像建置器傳送事件通知的 SNS 主題。如需 Image Builder 如何與 Amazon SNS 整合的詳細資訊，請參閱 [Image Builder 中的 Amazon SNS 整合](integ-sns.md)。
**注意**  
如果您的 SNS 主題已加密，加密此主題的金鑰必須位於 Image Builder 服務執行所在的帳戶中。Image Builder 無法將通知傳送至使用其他帳戶金鑰加密的 SNS 主題。

您可以使用 Image Builder 主控台、Image Builder API 或 中的 **imagebuilder** 命令來建立和管理基礎設施組態 AWS CLI。

**Topics**
+ [

# 列出和檢視基礎設施組態詳細資訊
](infra-config-details.md)
+ [

# 建立基礎架構組態
](create-infra-config.md)
+ [

# 更新基礎設施組態
](update-infra-config.md)
+ [

# 映像建置器和 AWS PrivateLink 界面 VPC 端點
](vpc-interface-endpoints.md)

**提示**  
當您有多個相同類型的資源時，標記可協助您根據您指派給該資源的標籤來識別特定資源。如需在 中使用 Image Builder 命令標記資源的詳細資訊 AWS CLI，請參閱本指南的 [標籤資源](tag-resources.md)一節。

# 列出和檢視基礎設施組態詳細資訊
<a name="infra-config-details"></a>

本節說明您可以尋找資訊和檢視 EC2 Image Builder 基礎設施組態詳細資訊的各種方式。

**Topics**
+ [

## 從 列出基礎設施組態 AWS CLI
](#cli-list-infrastructure-configurations)
+ [

## 從 取得基礎設施組態詳細資訊 AWS CLI
](#cli-get-infrastructure-configuration-details)

## 從 列出基礎設施組態 AWS CLI
<a name="cli-list-infrastructure-configurations"></a>

下列範例示範如何使用 中的 **[list-infrastructure-configurations](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/list-infrastructure-configurations.html)**命令列出所有基礎設施組態 AWS CLI。

```
aws imagebuilder list-infrastructure-configurations
```

## 從 取得基礎設施組態詳細資訊 AWS CLI
<a name="cli-get-infrastructure-configuration-details"></a>

下列範例示範如何在 中使用 **[get-infrastructure-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/get-infrastructure-configuration.html)**命令 AWS CLI ，透過指定其 Amazon Resource Name (ARN) 來取得基礎設施組態的詳細資訊。

```
aws imagebuilder get-infrastructure-configuration --infrastructure-configuration-arn arn:aws:imagebuilder:us-west-2:123456789012:infrastructure-configuration/my-example-infrastructure-configuration
```

# 建立基礎架構組態
<a name="create-infra-config"></a>

本節說明如何使用 中的 Image Builder 主控台或**imagebuilder**命令 AWS CLI 來建立基礎設施組態，

------
#### [ Console ]

若要從 Image Builder 主控台建立基礎設施組態資源，請遵循下列步驟：

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

1. 從導覽窗格中，選擇**基礎設施組態**。

1. 選擇**建立基礎設施組態**。

1. 在**一般**區段中，輸入下列必要資訊：
   + 輸入基礎設施組態資源**的名稱**。
   + 針對建置和測試執行個體上的元件許可，選取要與執行個體描述檔建立關聯的 **IAM 角色**。Image Builder 使用這些許可來下載和執行元件、將日誌上傳至 CloudWatch，以及執行配方中元件指定的任何其他動作。

1. 在**AWS 基礎設施**面板中，您可以設定可用的其餘基礎設施設定。輸入下列必填資訊：
   + **執行個體類型** – 您可以指定要用於此建置的一或多個執行個體類型。服務會根據可用性挑選其中一個執行個體類型。
**注意**  
Mac 執行個體在專用主機上的`.metal`執行個體類型上執行。您的執行個體類型必須符合其執行所在的主機所定義的其中一種類型。如需 Mac 執行個體的詳細資訊，以及原生支援 macOS 作業系統的執行個體類型清單，請參閱[《Amazon EC2 使用者指南》中的 Amazon EC2 Mac 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-mac-instances.html)。 *Amazon EC2 *
   + **SNS 主題 （選用）** – 選取 SNS 主題以接收來自 EC2 Image Builder 的通知和提醒。

   如果您未提供下列設定的值，它們會在適用時使用服務特定的預設值。
   + **VPC、子網路和安全群組** – Image Builder 使用您的預設 VPC 和子網路。如需設定 VPC 介面端點的詳細資訊，請參閱 [映像建置器和 AWS PrivateLink 界面 VPC 端點](vpc-interface-endpoints.md)。
   + 在**疑難排解設定**區段中，您可以設定下列值：
     + 根據預設，會選取在**失敗時終止執行個體**核取方塊。不過，當組建失敗時，您可以登入 EC2 執行個體進行故障診斷。如果您希望執行個體在建置失敗後繼續執行，請清除核取方塊。
     + **金鑰對** – 如果您的 EC2 執行個體在建置失敗後繼續執行，您可以建立金鑰對，或使用現有的金鑰對登入執行個體並進行故障診斷。
     + **日誌** – 您可以指定 S3 儲存貯體，讓 Image Builder 撰寫應用程式日誌，以協助疑難排解您的建置和測試。如果您未指定 S3 儲存貯體，Image Builder 會將應用程式日誌寫入執行個體。
   + 在**執行個體中繼資料設定**區段中，您可以設定下列值，以套用至映像建置器用來建置和測試映像的 EC2 執行個體：
     + 選取**中繼資料版本**，以判斷 EC2 是否需要執行個體中繼資料擷取請求的簽章字符標頭。
       + **V1 和 V2 （金鑰選用）** – 如果您未選取任何項目，則為預設值。
       + **V2 （需要權杖）**
**注意**  
我們建議您將映像建置器從管道建置啟動的所有 EC2 執行個體設定為使用 IMDSv2，以便執行個體中繼資料擷取請求需要簽章權杖標頭。
     + **中繼資料字符回應跳轉限制** – 中繼資料字符可以移動的網路跳轉數量。最小跳轉：1，最大跳轉：64，預設為一個跳轉。
   + 在**執行個體置放設定**區段中，您可以設定下列值，以套用至映像建置器用來建置和測試映像的 EC2 執行個體：
     + 您可以選取映像建置器在映像建立期間啟動執行個體的**可用區域**。
     + 選擇性地為執行您啟動之執行個體的伺服器選取**租用**。依預設，EC2 執行個體在共用的租用硬體上執行。這表示多個 AWS 帳戶 可能會共用相同的實體硬體。具有`dedicated`租用的執行個體會在單一租用戶硬體上執行。具有`host`租用的執行個體會在專用主機上執行。

       Mac 執行個體需要建立為先決條件的專用主機，才能建置自訂映像。`host` 為您的 macOS 映像選取 。然後，您可以選取要啟動執行個體的目標主機或主機資源群組，但如果您的專用主機已啟用自動配置，則不需要。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[自動置放](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-understanding.html#dedicated-hosts-auto-placement)。
       + **租用主機 ID** – 執行個體執行所在的專用主機 ID。
       + **租用主機資源群組** – 要在其中啟動執行個體之主機資源群組的 Amazon Resource Name (ARN)。

1. 在**基礎設施標籤**區段 （選用） 中，您可以將中繼資料標籤指派給映像建置器在建置程序期間啟動的 Amazon EC2 執行個體。標籤會輸入為索引鍵值對。

1. 在**標籤**區段 （選用） 中，您可以將中繼資料標籤指派給 Image Builder 建立為輸出的基礎設施組態資源。標籤會輸入為索引鍵值對。

------
#### [ AWS CLI ]

下列程序說明如何使用 中的映像建置器**[create-infrastructure-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/create-infrastructure-configuration.html)**命令來設定映像的基礎設施 AWS CLI。步驟 2 中的 命令會採用您在步驟 1 中建立的 檔案。對於這些範例，步驟 1 的檔案稱為 `create-infrastructure-configuration.json`。

1. 

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

   下列範例顯示您可能為基礎設施組態建立的 JSON 檔案變化。使用檔案編輯工具建立您自己的 JSON 檔案。

   **範例 1：從失敗的建置保留執行個體的組態**

   此範例會指定兩種執行個體類型 `m5.large`和 `m5.xlarge`。我們建議您指定多個執行個體類型，因為這可讓 Image Builder 從具有足夠容量的集區啟動執行個體。這可以減少您的暫時性建置失敗。

   `instanceProfileName` 指定執行個體描述檔，為執行個體提供執行自訂活動所需的許可。例如，如果您有一個從 Amazon S3 擷取資源的元件，執行個體描述檔需要存取這些檔案的許可。執行個體描述檔也需要一組最低的許可，EC2 Image Builder 才能成功與執行個體通訊。如需詳細資訊，請參閱[準備使用映像建置器建置自訂映像](set-up-ib-env.md)。

   ```
   {
       "name": "ExampleInfraConfigDontTerminate",
       "description": "An example that will retain instances of failed builds",
       "instanceTypes": [
           "m5.large", "m5.xlarge"
       ],
       "instanceProfileName": "myIAMInstanceProfileName",
       "securityGroupIds": [
           "sg-12345678"
       ],
       "subnetId": "sub-12345678",
       "logging": {
           "s3Logs": {
               "s3BucketName": "my-logging-bucket",
               "s3KeyPrefix": "my-path"
           }
       },
       "keyPair": "myKeyPairName",
       "terminateInstanceOnFailure": false,
       "snsTopicArn": "arn:aws:sns:us-west-2:123456789012:MyTopic"
   }
   ```

**範例 2：具有自動配置的 macOS 組態**  
此範例指定專用主機已啟用自動置放的 Mac 執行個體的執行個體類型和置放。

   ```
   {
      "name": "macOSInfraConfigAutoPlacement",
      "description": "An example infrastructure configuration for macOS.",
      "instanceProfileName": "EC2InstanceProfileForImageBuilder",
      "instanceTypes": ["mac1.metal, mac2.metal"],
      "terminateInstanceOnFailure": false,
      "placement": {
         "tenancy": "host"
      }
   }
   ```

**範例 3：指定主機 ID 的 macOS 組態**  
此範例指定以特定專用主機為目標之 Mac 執行個體的執行個體類型和放置位置。

   ```
   {
      "name": "macOSInfraConfigHostPlacement",
      "description": "An example infrastructure configuration for macOS.",
      "instanceProfileName": "EC2InstanceProfileForImageBuilder",
      "instanceTypes": ["mac2-m1ultra.metal"],
      "terminateInstanceOnFailure": false,
      "placement": {
         "tenancy": "host",
         "hostId" : "h-1234567890abcdef0"
      }
   }
   ```

1. 

**當您執行下列命令時，請使用您建立的檔案做為輸入。**

   ```
   aws imagebuilder create-infrastructure-configuration --cli-input-json file://create-infrastructure-configuration.json
   ```

------

# 更新基礎設施組態
<a name="update-infra-config"></a>

本節說明如何使用 中的映像建置器主控台或**imagebuilder**命令 AWS CLI 來更新基礎設施組態資源。若要追蹤您的 資源，您可以套用標籤，如下所示。標籤會輸入為索引鍵值對。
+ *資源標籤*會將中繼資料標籤指派給映像建置器在建置程序期間啟動的 Amazon EC2 執行個體。
+ *標籤*會將中繼資料標籤指派給 Image Builder 建立為輸出的基礎設施組態資源。

------
#### [ Console ]

您可以從 Image Builder 主控台編輯下列基礎設施組態詳細資訊：
+ 基礎設施組態的**描述**。
+ 要與執行個體描述檔建立關聯的 **IAM 角色**。
+ **AWS 基礎設施**，包括**執行個體類型**和通知的 **SNS 主題**。
+ **VPC、子網路和安全群組**。
+ **故障診斷設定**，包括**故障時終止執行個體**、用於連線的**金鑰對**，以及執行個體日誌的選用 S3 儲存貯體位置。

若要從 Image Builder 主控台更新基礎設施組態資源，請遵循下列步驟：

**選擇現有的映像建置器基礎設施組態**

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

1. 若要查看您帳戶下的基礎設施組態資源清單，請從導覽窗格中選擇**基礎設施組態**。

1. 若要檢視詳細資訊或編輯基礎設施組態，請選擇**組態名稱**連結。這會開啟基礎設施組態的詳細資訊檢視。
**注意**  
您也可以選取**組態名稱**旁的核取方塊，然後選擇**檢視詳細資訊**。

1. 從**基礎設施詳細資訊**面板的右上角，選擇**編輯** 。

1. 當您準備好儲存對基礎設施組態所做的更新時，請選擇**儲存變更**。

------
#### [ AWS CLI ]

下列範例顯示如何使用 中的 Image Builder **[update-infrastructure-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/update-infrastructure-configuration.html)**命令來更新映像的基礎設施組態 AWS CLI。

1. 

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

   此基礎設施組態範例使用與建立範例相同的設定，除了我們已將`terminateInstanceOnFailure`設定更新為 `false`。執行 **update-infrastructure-configuration**命令後，使用此基礎設施組態的管道會在建置失敗時終止建置和測試執行個體。

   使用檔案編輯工具建立 JSON 檔案，其中包含下列範例中顯示的索引鍵，以及適用於您環境的值。此範例使用名為 `update-infrastructure-configuration.json` 的檔案：

   ```
   {
   "infrastructureConfigurationArn": "arn:aws:imagebuilder:us-west-2:123456789012:infrastructure-configuration/my-example-infrastructure-configuration",
   "description": "An example that will terminate instances of failed builds",
   "instanceTypes": [
       "m5.large", "m5.2xlarge"
   ],
   "instanceProfileName": "myIAMInstanceProfileName",
   "securityGroupIds": [
       "sg-12345678"
   ],
   "subnetId": "sub-12345678",
   "logging": {
       "s3Logs": {
           "s3BucketName": "my-logging-bucket",
           "s3KeyPrefix": "my-path"
       }
   },
   "terminateInstanceOnFailure": true,
   "snsTopicArn": "arn:aws:sns:us-west-2:123456789012:MyTopic"
   }
   ```

1. 

**當您執行下列命令時，請使用您建立的檔案做為輸入。**

   ```
   aws imagebuilder update-infrastructure-configuration --cli-input-json file://update-infrastructure-configuration.json
   ```

------

# 映像建置器和 AWS PrivateLink 界面 VPC 端點
<a name="vpc-interface-endpoints"></a>

您可以建立介面 VPC *端點*，在 VPC 和 EC2 Image Builder 之間建立私有連線。介面端點採用 [AWS PrivateLink](https://aws.amazon.com/privatelink/)技術，可讓您在沒有網際網路閘道、NAT 裝置、VPN 連線或 Direct Connect 連線的情況下，私下存取映像建置器 APIs。VPC 中的執行個體不需要公有 IP 地址，即可與映像建置器 APIs通訊。VPC 和映像建置器之間的流量不會離開 Amazon 網路。

每個介面端點都是由您子網路中的一或多個[彈性網路介面](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)表示。建立新映像時，您可以在基礎設施組態中指定 VPC 子網路 ID。

**注意**  
您從 VPC 內存取的每個服務都有自己的界面端點，以及自己的端點政策。Image Builder 會下載 AWS TOE 元件管理員應用程式，並從 S3 儲存貯體存取受管資源以建立自訂映像。若要授予這些儲存貯體的存取權，您必須更新 S3 端點政策以允許它。如需詳細資訊，請參閱[S3 儲存貯體存取的自訂政策](#vpc-endpoint-policy-s3)。

如需 VPC 端點的詳細資訊，請參閱《Amazon VPC 使用者指南》**中的[介面 VPC 端點 (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)。

## 映像建置器 VPC 端點的考量事項
<a name="vpc-endpoint-considerations"></a>

在為映像建置器設定介面 VPC 端點之前，請務必檢閱《*Amazon VPC 使用者指南*》中的[介面端點屬性和限制](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#vpce-interface-limitations)。

Image Builder 支援從您的 VPC 呼叫其所有 API 動作。

## 為映像建置器建立介面 VPC 端點
<a name="vpc-endpoint-create"></a>

若要為 Image Builder 服務建立 VPC 端點，您可以使用 Amazon VPC 主控台或 AWS Command Line Interface (AWS CLI)。如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的[建立介面端點](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint)。

使用下列服務名稱為映像建置器建立 VPC 端點：
+ com.amazonaws.*region*.imagebuilder

如果您為端點啟用私有 DNS，則可以使用區域的預設 DNS 名稱向 Image Builder 提出 API 請求，例如：`imagebuilder.us-east-1.amazonaws.com`。若要查詢適用於目標區域的端點，請參閱 中的 [EC2 Image Builder 端點和配額](https://docs.aws.amazon.com/general/latest/gr/imagebuilder.html#imagebuilder_region)*Amazon Web Services 一般參考*。

如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的[透過介面端點存取服務](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#access-service-though-endpoint)。

## 為映像建置器建立 VPC 端點政策
<a name="vpc-endpoint-policy"></a>

您可以將端點政策連接至 VPC 端點，以控制對 Image Builder 的存取。此政策會指定下列資訊：
+ 可執行動作的主體。
+ 可執行的動作。
+ 可供執行動作的資源。

如果您在配方中使用 Amazon 受管元件，Image Builder 的 VPC 端點必須允許存取下列服務擁有的元件程式庫：

`arn:aws:imagebuilder:region:aws:component/*`

**重要**  
當非預設政策套用到 EC2 Image Builder 的介面 VPC 端點時，某些失敗的 API 請求`RequestLimitExceeded`可能不會記錄到 AWS CloudTrail 或 Amazon CloudWatch。

如需詳細資訊，請參閱《Amazon VPC 使用者指南》**中的[使用 VPC 端點控制對服務的存取](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)。

### S3 儲存貯體存取的自訂政策
<a name="vpc-endpoint-policy-s3"></a>

Image Builder 使用公開可用的 S3 儲存貯體來存放和存取受管資源，例如元件。它也會從單獨的 S3 儲存貯體下載 AWS TOE 元件管理應用程式。如果您在環境中為 Amazon S3 使用 VPC 端點，則需要確保您的 S3 VPC 端點政策允許 Image Builder 存取下列 S3 儲存貯體。每個 AWS 區域 (*區域*) 和應用程式環境 (*環境*) 的儲存貯體名稱都是唯一的。Image Builder 和 AWS TOE 支援下列應用程式環境：`prod`、 `preprod`和 `beta`。
+  AWS TOE 元件管理員儲存貯體：

  ```
  s3://ec2imagebuilder-toe-region-environment
  ```

  **範例：**s3：//ec2imagebuilder-toe-us-west-2-prod/\$1
+ Image Builder 受管資源儲存貯體：

  ```
  s3://ec2imagebuilder-managed-resources-region-environment/components
  ```

  **範例：**s3：//ec2imagebuilder-managed-resources-us-west-2-prod/components/\$1

### VPC 端點政策範例
<a name="vpc-endpoint-policy-examples"></a>

本節包含自訂 VPC 端點政策的範例。

**Image Builder 動作的一般 VPC 端點政策**  
下列 Image Builder 的端點政策範例拒絕刪除 Image Builder 映像和元件的許可。此範例政策也會授予執行所有其他 EC2 Image Builder 動作的許可。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": "imagebuilder:*",
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": "imagebuilder:DeleteImage",
            "Effect": "Deny",
            "Resource": "*"
        },
        {
            "Action": "imagebuilder:DeleteComponent",
            "Effect": "Deny",
            "Resource": "*"
        }
    ]
}
```

------

**依組織限制存取，允許受管元件存取**  
下列範例端點政策說明如何限制對屬於您組織的身分和資源的存取，並提供對 Amazon 受管映像建置器元件的存取。將 *region*、 *principal-org-id* 和 *resource-org-id* 取代為您組織的值。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRequestsByOrgsIdentitiesToOrgsResources",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "principal-org-id",
                    "aws:ResourceOrgID": "resource-org-id"
                }
            }
        },
        {
            "Sid": "AllowAccessToEC2ImageBuilderComponents",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "imagebuilder:GetComponent"
            ],
            "Resource": [
                "arn:aws:imagebuilder:us-east-1:aws:component/*"
            ]
        }
    ]
}
```

------

**Amazon S3 儲存貯體存取的 VPC 端點政策**  
下列 S3 端點政策範例示範如何提供存取 Image Builder 用來建置自訂映像的 S3 儲存貯體。將*區域*和*環境*取代為您組織的值。根據您的應用程式需求，將任何其他必要的許可新增至政策。

**注意**  
對於 Linux 映像，如果您未在映像配方中指定使用者資料，Image Builder 會新增指令碼，以在映像的建置和測試執行個體上下載並安裝 Systems Manager 代理程式。若要下載代理程式，Image Builder 會存取您建置區域的 S3 儲存貯體。  
為了確保 Image Builder 可以引導建置和測試執行個體，請將下列其他資源新增至 S3 端點政策：  
"`arn:aws:s3:::amazon-ssm-region/*`"

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowImageBuilderAccessToAppAndComponentBuckets",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::ec2imagebuilder-toe-region-environment/*",
        "arn:aws:s3:::ec2imagebuilder-managed-resources-region-environment/components/*"
      ]
    }
  ]
}
```

------

# 管理映像建置器分佈設定
<a name="manage-distribution-settings"></a>

在設定輸出映像的分佈設定之前，我們建議您驗證從分佈目標區域中的輸出映像啟動的任何基礎基礎設施或其他執行個體需求的可用性。例如，並非所有區域都支援 EC2 Mac 專用主機，這是從 macOS 映像啟動執行個體的必要項目。如需專用主機執行個體類型和定價的詳細資訊，請參閱 [Amazon EC2 專用主機定價](https://aws.amazon.com/ec2/dedicated-hosts/pricing/)。

使用 Image Builder 建立分佈設定後，您可以使用 Image Builder 主控台、Image Builder API 或 中的**imagebuilder**命令來管理它們 AWS CLI。使用分佈設定，您可以執行下列動作：

**AMI 分佈**
+ 指定輸出 AMI 的名稱和描述。
+ 授權其他 AWS 帳戶、組織和 OUs 從擁有者的帳戶啟動 AMI。擁有者帳戶會支付與 AMI 相關聯的費用。
**注意**  
若要公開 AMI，請將啟動許可授權帳戶設定為 `all`。如需資訊和範例，請參閱《*Amazon EC2 API 參考***[ModifyImageAttribute](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyImageAttribute.html)**》中的 。
+ 為目的地區域中的每個指定目標帳戶、組織和 OUs 建立輸出 AMI 的副本。目標帳戶、組織和 OUs 擁有其 AMI 複本，並支付任何相關費用。如需將 AMI 分發至 AWS Organizations 和 OUs 的詳細資訊，請參閱[與組織或 OUs 共用 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/share-amis-with-organizations-and-OUs.html)。
+ 將 AMI 複製到其他 中的擁有者帳戶 AWS 區域。
+ 將 VM 映像磁碟匯出至 Amazon Simple Storage Service (Amazon S3)。如需詳細資訊，請參閱[範例：從 建立輸出 VM 磁碟的分佈設定 AWS CLI](cr-upd-ami-distribution-settings.md#cli-create-vm-dist-config)。

**容器映像分佈**
+ 指定 ECR 儲存庫，Image Builder 會將輸出映像存放在分佈區域中。

您可以透過下列方式使用您的分發設定，將映像交付至目標區域、帳戶 AWS Organizations 和組織單位 (OUs)，一次，或在每次管道建置時：
+ 若要自動將更新後的映像交付至指定的區域、帳戶、組織和 OUs，請使用分佈設定搭配排程執行的映像建置器管道。
+ 若要建立新的映像並將其交付至指定的區域、帳戶、組織和 OUs，請使用分佈設定搭配您從映像建置器主控台執行一次的映像建置器管道，並使用**動作**選單中的**執行管道**。
+ 若要建立新的映像並將其交付至指定的區域、帳戶、組織和 OUs，請在 中使用分佈設定搭配下列 API 動作或映像建置器命令 AWS CLI：
  + Image Builder API 中的 **[CreateImage](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateImage.html)**動作。
  + 中的 **[create-image](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/create-image.html)**命令 AWS CLI。
+ 在一般映像建置程序中，將虛擬機器 (VM) 映像磁碟匯出至目標區域中的 S3 儲存貯體。

**提示**  
當您有多個相同類型的資源時，標記可協助您根據您指派給該資源的標籤來識別特定資源。如需使用 中的映像建置器命令標記資源的詳細資訊 AWS CLI，請參閱本指南的 [標籤資源](tag-resources.md)一節。

**Topics**
+ [

# 列出和檢視分佈組態詳細資訊
](distribution-settings-detail.md)
+ [

# 建立和更新 AMI 分佈組態
](cr-upd-ami-distribution-settings.md)
+ [

# 建立和更新容器映像的分佈設定
](cr-upd-container-distribution-settings.md)
+ [

# 使用映像建置器設定跨帳戶 AMI 分佈
](cross-account-dist.md)
+ [

# 使用 EC2 啟動範本設定 AMI 分佈
](dist-using-launch-template.md)
+ [

# 使用增強型 AMI 分佈功能
](distribution-enhanced_functionality.md)

# 列出和檢視分佈組態詳細資訊
<a name="distribution-settings-detail"></a>

本節說明您可以尋找資訊和檢視 EC2 Image Builder 分佈組態詳細資訊的各種方式。

**Topics**
+ [

## 從主控台列出分佈組態
](#list-distribution-config-console)
+ [

## 從主控台檢視分佈組態詳細資訊
](#view-distribution-config-details-console)
+ [

## 從 列出分佈 AWS CLI
](#cli-list-distributions)
+ [

## 從 取得分佈組態詳細資訊 AWS CLI
](#cli-get-distribution-configuration)

## 從主控台列出分佈組態
<a name="list-distribution-config-console"></a>

若要在 Image Builder 主控台中查看在您帳戶下建立的分佈組態清單，請遵循下列步驟：

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

1. 從導覽窗格中選擇**分佈設定**。這會顯示在您帳戶下建立的分佈組態清單。

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

## 從主控台檢視分佈組態詳細資訊
<a name="view-distribution-config-details-console"></a>

若要使用 Image Builder 主控台檢視特定分佈組態的詳細資訊，請使用中所述的步驟選取要檢閱的組態[從主控台列出分佈組態](#list-distribution-config-console)。

在分佈詳細資訊頁面上，您可以：
+ **刪除**分佈組態。如需在映像建置器中刪除資源的詳細資訊，請參閱 [刪除過期或未使用的映像建置器資源](delete-resources.md)。
+ **編輯**分佈詳細資訊。

## 從 列出分佈 AWS CLI
<a name="cli-list-distributions"></a>

下列範例示範如何使用 中的 **[list-distribution-configurations](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/list-distribution-configurations.html)**命令 AWS CLI 來列出所有分佈。

```
aws imagebuilder list-distribution-configurations
```

## 從 取得分佈組態詳細資訊 AWS CLI
<a name="cli-get-distribution-configuration"></a>

下列範例示範如何在 中使用 **[get-distribution-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/get-distribution-configuration.html)**命令 AWS CLI ，透過指定 Amazon Resource Name (ARN) 來取得分佈組態的詳細資訊。

```
aws imagebuilder get-distribution-configuration --distribution-configuration-arn arn:aws:imagebuilder:us-west-2:123456789012:distribution-configuration/my-example-distribution-configuration
```

# 建立和更新 AMI 分佈組態
<a name="cr-upd-ami-distribution-settings"></a>

本節涵蓋建立和更新映像建置器 AMI 的分佈組態。

**Topics**
+ [

## AMI 分佈先決條件
](#ami-distribution-config-prereqs)
+ [

## 建立 AMI 分佈組態
](#create-ami-distribution-config)
+ [

## 更新 AMI 分佈組態
](#update-ami-distribution-config)
+ [

## 範例：使用輸出 AMIs 的啟動範本啟用 EC2 Fast Launch
](#create-ami-dist-win-fast-launch)
+ [

## 範例：從 建立輸出 VM 磁碟的分佈設定 AWS CLI
](#cli-create-vm-dist-config)

## AMI 分佈先決條件
<a name="ami-distribution-config-prereqs"></a>

有些分佈設定具有先決條件，如下所示：

**Topics**
+ [SSM 輸出參數先決條件](#ami-distribution-prereqs-ssm-param)
+ [EC2 Fast Launch 先決條件](#ami-distribution-prereqs-fast-launch)

### SSM 輸出參數的先決條件
<a name="ami-distribution-prereqs-ssm-param"></a>

建立新的 AMI 分佈組態來設定 AWS Systems Manager 參數存放區參數 (SSM 參數） 之前，請確定您符合下列先決條件。

**執行角色**  
當您在 中建立管道或使用 create-image 命令時 AWS CLI，您只能指定一個 Image Builder 執行角色。如果您已定義 Image Builder 工作流程執行角色，您可以將任何其他功能許可新增至該角色。否則，您會建立新的自訂角色，其中包含必要的許可。  
+ 若要在分發期間將輸出 AMI ID 存放在 SSM 參數中，您必須在 Image Builder 執行角色中指定 `ssm:PutParameter`動作，並將 參數列為資源。
+ 當您將參數資料類型設定為 `AWS EC2 Image` 以向 Systems Manager 發出訊號，以驗證參數值為 AMI ID 時，您也必須新增 `ec2:DescribeImages`動作。

### EC2 Fast Launch 的先決條件
<a name="ami-distribution-prereqs-fast-launch"></a>

為 EC2 Fast Launch for Windows AMIs 建立新的分發組態之前，請確定您符合下列先決條件。
+ 若您在設定 EC2 Fast Launch 時提供自訂啟動範本，此服務會使用您在啟動範本中定義的 VPC 和其他組態設定。如需詳細資訊，請參閱[設定 EC2 Fast Launch 時使用啟動範本](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/win-fast-launch-configure.html#win-fast-launch-with-template)。
+ 如果您不使用自訂啟動範本來設定設定，則必須將[https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-iam-awsmanpol-EC2FastLaunchFullAccess.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-iam-awsmanpol-EC2FastLaunchFullAccess.html)政策連接至 Image Builder 用來建立映像的 IAM 角色。當您在 中建立管道或使用 create-image 命令時 AWS CLI，您只能指定一個 Image Builder 執行角色。如果您已定義 Image Builder 工作流程執行角色，您可以將任何其他功能許可新增至該角色。否則，您會建立新的自訂角色，其中包含必要的許可。

  然後，當映像建置器複製映像時，EC2 Fast Launch 會自動在 中建立具有下列資源的 CloudFormation 堆疊 AWS 帳戶。
  + 虛擬私有雲端 (VPC)
  + 跨多個可用區域的私有子網路
  + 已設定執行個體中繼資料服務第 2 版 (IMDSv2) 的啟動範本
  + 無傳入或傳出規則的安全群組

**注意**  
Image Builder 不支援預先啟用 EC2 Fast Launch 的 AMIs 跨帳戶分佈。必須從目的地帳戶啟用 EC2 Fast Launch。

## 建立 AMI 分佈組態
<a name="create-ami-distribution-config"></a>

分佈組態包括輸出 AMI 名稱、加密的特定區域設定、啟動許可 AWS 帳戶，以及可啟動輸出 AMI 的組織和組織單位 (OUs)，以及授權組態。

分佈組態可讓您指定輸出 AMI 的名稱和描述、授權其他 AWS 帳戶 啟動 AMI、將 AMI 複製到其他帳戶，以及將 AMI 複製到其他 AWS 區域。它還允許您將 AMI 匯出到 Amazon Simple Storage Service (Amazon S3)，或為輸出 Windows AMIs 設定 EC2 Fast Launch。若要公開 AMI，請將啟動許可授權帳戶設定為 `all`。請參閱 EC2 上公開 AMI 的範例**[ModifyImageAttribute](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyImageAttribute.html)**。

------
#### [ Console ]

請依照下列步驟，在 中建立新的 AMI 分佈組態 AWS 管理主控台：

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

1. 從導覽窗格中選擇**分佈設定**。這會顯示在您帳戶下建立的分佈組態清單。

1. 選擇**分佈設定面板頂端附近的建立****分佈設定**。

1. 在**映像類型**區段中，選擇 **Amazon Machine Image (AMI)** 輸出類型。

1. 在**一般**區段中，輸入分佈組態**的名稱**，以及選用的描述。

1. 在**區域設定**區段中，輸入您要分發 AMI 的每個區域的下列詳細資訊：

   1. 根據預設，AMI 會分佈到目前的區域 (**區域 1**)。**區域 1** 是分佈的來源。**區域 1** 的某些設定未開啟以供編輯。對於您新增的任何區域，您可以從區域下拉式清單中選擇**區域**。

      **Kms 金鑰**可識別 AWS KMS key 用於加密目標區域中影像 EBS 磁碟區的 。請務必注意，這不適用於組建在來源區域 (**區域 1**) 中您的帳戶下建立的原始 AMI。在建置的分佈階段執行的加密僅適用於分佈到其他帳戶或區域的映像。

      若要加密在 帳戶來源區域中建立之 AMI 的 EBS 磁碟區，您必須在 主控台的影像配方區塊型設備映射 (**儲存 （磁碟區）) **中設定 KMS 金鑰。

      Image Builder 會將 AMI 複製到您為區域指定的**目標帳戶**。
**先決條件**  
若要跨帳戶複製映像，您必須在所有分發目標帳戶中建立`EC2ImageBuilderDistributionCrossAccountRole`角色，並將 [Ec2ImageBuilderCrossAccountDistributionAccess 政策](security-iam-awsmanpol.md#sec-iam-manpol-Ec2ImageBuilderCrossAccountDistributionAccess)受管政策連接至角色。

      **輸出 AMI 名稱**是選用的。如果您提供名稱，最終輸出 AMI 名稱會包含 AMI 建置時的附加時間戳記。如果您未指定名稱，Image Builder 會將建置時間戳記附加至配方名稱。這可確保每個組建的唯一 AMI 名稱。

      1. 透過 AMI 共用，您可以授予指定 AWS 委託人從 AMI 啟動執行個體的存取權。如果您展開 **AMI 共用**區段，您可以輸入下列詳細資訊：
         + **啟動許可** – 如果您想要保持 AMI **的**私有，請選取私有，並允許特定 AWS 委託人從您的私有 AMI 啟動執行個體。如果您想要將 AMI 設為**公**有，請選取公有。任何 AWS 委託人都可以從您的公有 AMI 啟動執行個體。
         + **委託人** – 您可以授予下列委託 AWS 人啟動執行個體的存取權：
           + **AWS 帳戶** – 授予特定 AWS 帳戶的存取權
           + **組織單位 (OU)** – 授予 OU 及其所有子實體的存取權。子實體包括 OUs和 AWS 帳戶。
           + **組織** – 授予您 AWS Organizations及其所有子實體的存取權。子實體包括 OUs和 AWS 帳戶。

             首先，選取主體類型。然後在下拉式清單右側的方塊中，輸入您要授予存取權之 AWS 委託人的 ID。您可以輸入不同類型的多個 IDs。

      1. 您可以展開**授權組態**區段，將以 建立的授權組態連接到 AWS License Manager 映像建置器映像。授權組態包含以企業協議條款為基礎的授權規則。Image Builder 會自動包含與您的基礎 AMI 相關聯的授權組態。

      1. 您可以展開**啟動範本組態**區段，指定用於從您建立的 AMI 啟動執行個體的 EC2 啟動範本。

         如果您使用的是 EC2 啟動範本，您可以指示 Image Builder 在建置完成後建立新的啟動範本版本，其中包含最新的 AMI ID。若要更新啟動範本，請設定下列設定：
         + **啟動範本名稱** – 選取您要 Image Builder 更新的啟動範本名稱。
         + **設定預設版本** – 選取此核取方塊，將啟動範本預設版本更新為新版本。

         若要新增另一個啟動範本組態，請選擇**新增啟動範本組態**。每個區域最多可以有五個啟動範本組態。

      1. 您可以展開 **SSM 參數組態**區段來設定 SSM 參數，以存放分佈至目的地區域的映像輸出 AMI ID。您可以選擇性地在 區域中指定分佈帳戶。

         **參數名稱** – 輸入參數的名稱。例如 `/output/image/param`。

         **資料類型** – 保留預設值 (`AWS EC2 Image`)。這可讓 Systems Manager 驗證參數值，以確保其為有效的 AMI ID。

   1. 若要新增另一個區域的分佈設定，請選擇**新增區域**。

1. 完成後，請選擇**建立設定**。

------
#### [ AWS CLI ]

下列範例說明如何使用 **create-distribution-configuration**命令，為您的 AMI 建立新的分佈組態 AWS CLI。

1. 

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

   使用檔案編輯工具建立 JSON 檔案，其中包含下列其中一個範例中顯示的金鑰，以及適用於您環境的值。這些範例會定義哪些 AWS 帳戶 AWS Organizations 或組織單位 OUs) 具有啟動您分發到指定區域的 AMI 的許可。將檔案命名為 `create-ami-distribution-configuration.json`，以供下一個步驟使用：

**範例 1：分發至 AWS 帳戶**  
此範例會將 AMI 分配到兩個區域，並指定 在每個區域中 AWS 帳戶 具有啟動許可。

   ```
   {
   	"name": "MyExampleAccountDistribution",
   	"description": "Copies AMI to eu-west-1, and specifies accounts that can launch instances in each Region.",
   	"distributions": [
   		{
   			"region": "us-west-2",
   			"amiDistributionConfiguration": {
   				"name": "Name {{imagebuilder:buildDate}}",
   				"description": "An example image name with parameter references",
   				"amiTags": {
   					"KeyName": "Some Value"
   				},
   				"launchPermission": {
   					"userIds": [
   						"987654321012"
   					]
   				}
   			}
   		},
   		{
   			"region": "eu-west-1",
   			"amiDistributionConfiguration": {
   				"name": "My {{imagebuilder:buildVersion}} image {{imagebuilder:buildDate}}",
   				"amiTags": {
   					"KeyName": "Some value"
   				},
   				"launchPermission": {
   					"userIds": [
   						"100000000001"
   					]
   				}
   			}
   		}
   	]
   }
   ```

**範例 2：分發至 Organizations 和 OUs**  
此範例會將 AMI 分配至來源區域，並指定組織和 OU 啟動許可。

   ```
   {
   	"name": "MyExampleAWSOrganizationDistribution",
   	"description": "Shares AMI with the Organization and OU",
   	"distributions": [
   		{
   			"region": "us-west-2",
   			"amiDistributionConfiguration": {
   				"name": "Name {{ imagebuilder:buildDate }}",
   				"launchPermission": {
   					"organizationArns": [
   						"arn:aws:organizations::123456789012:organization/o-myorganization123"
   					],
   					"organizationalUnitArns": [
   						"arn:aws:organizations::123456789012:ou/o-123example/ou-1234-myorganizationalunit"
   					]
   				}
   			}
   		}
   	]
   }
   ```

**範例 3：將輸出 AMI ID 儲存在 SSM 參數中**  
此範例會將輸出 AMI ID 存放在分佈區域的 AWS Systems Manager 參數存放區參數中。

   ```
   {
   	"name": "SSMParameterOutputAMI",
   	"description": "Updates an SSM parameter with the output AMI ID for the distribution.",
   	"distributions": [
   		{
   			"region": "us-west-2",
   			"amiDistributionConfiguration": {
   				"name": "Name {{ imagebuilder:buildDate }}"
   			},
   			"ssmParameterConfigurations": [
   				{
   					"amiAccountId": "111122223333",
   					"parameterName": "/output/image/param",
   					"dataType": "aws:ec2:image"
   				}
   			]
   		}
   	]
   }
   ```

1. 

**使用您建立做為輸入的檔案，執行下列命令。**

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

   如需詳細資訊，請參閱《 *AWS CLI 命令參考***[create-distribution-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/create-distribution-configuration.html)**》中的 。

------

## 更新 AMI 分佈組態
<a name="update-ami-distribution-config"></a>

您可以變更 AMI 分佈組態。不過，您所做的變更不適用於 Image Builder 已分發的任何資源。例如，如果您已將 AMI 分發到稍後從分發中移除的區域，則已分發的 AMI 會保留在該區域中，直到您手動將其移除為止。

------
#### [ AWS 管理主控台 ]

請遵循 中的 AMI 分佈組態步驟 AWS 管理主控台：

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

1. 從導覽窗格中選擇**分佈設定**。這會顯示在您帳戶下建立的分佈組態清單。

1. 若要檢視詳細資訊或更新分佈組態，請選擇**組態名稱**連結。這會開啟分佈設定的詳細資訊檢視。
**注意**  
您也可以選取**組態名稱**旁的核取方塊，然後選擇**檢視詳細資訊**。

1. 若要編輯分佈組態，請從**分佈詳細資訊**區段的右上角選擇**編輯**。有些欄位已鎖定，例如分佈組態**的名稱**，以及顯示為**區域** **1 的預設區域**。如需分佈組態設定的詳細資訊，請參閱 [建立 AMI 分佈組態](#create-ami-distribution-config)。

1. 完成後，請選擇 **Save changes** (儲存變更)。

------
#### [ AWS CLI ]

下列範例說明如何使用 **[update-distribution-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/update-distribution-configuration.html)**命令來更新 AMI 的分佈設定 AWS CLI。

1. 

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

   使用檔案編輯工具建立 JSON 檔案，其中包含下列範例中顯示的金鑰，以及適用於您環境的值。此範例使用名為 的檔案`update-ami-distribution-configuration.json`。

   ```
   {
   	"distributionConfigurationArn": "arn:aws:imagebuilder:us-west-2:123456789012:distribution-configuration/update-ami-distribution-configuration.json",
   	"description": "Copies AMI to eu-west-2, and specifies accounts that can launch instances in each Region.",
   	"distributions": [
   	  {
   			"region": "us-west-2",
   			"amiDistributionConfiguration": {
   				"name": "Name {{imagebuilder:buildDate}}",
   				"description": "An example image name with parameter references",
   				"launchPermissions": {
   					"userIds": [
   						"987654321012"
   					]
   				}
   			}
   		},
   		{
   			"region": "eu-west-2",
   			"amiDistributionConfiguration": {
   				"name": "My {{imagebuilder:buildVersion}} image {{imagebuilder:buildDate}}",
   				"tags": {
   					"KeyName": "Some value"
   				},
   				"launchPermissions": {
   					"userIds": [
   						"100000000001"
   					]
   				}
   			}
   		}
   	]
   }
   ```

1. 

**使用您建立做為輸入的檔案，執行下列命令。**

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

   如需詳細資訊，請參閱《 *AWS CLI 命令參考***[update-distribution-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/update-distribution-configuration.html)**》中的 。若要更新分佈組態資源的標籤，請參閱[標籤資源](tag-resources.md)一節。

------

## 範例：使用輸出 AMIs 的啟動範本啟用 EC2 Fast Launch
<a name="create-ami-dist-win-fast-launch"></a>

下列範例示範如何使用 **[create-distribution-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/create-distribution-configuration.html)**命令搭配啟動範本，從 建立已為您的 AMI 設定 EC2 Fast Launch 的分佈設定 AWS CLI。

若要在沒有啟動範本的情況下設定 EC2 Fast Launch 設定，請確定您已符合所有 ，[EC2 Fast Launch 先決條件](#ami-distribution-prereqs-fast-launch)再建立分發組態。

1. 

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

   使用檔案編輯工具建立具有金鑰的 JSON 檔案，如下列範例所示，加上適用於您環境的值。

   此範例會同時為其所有目標資源啟動執行個體，因為平行啟動的最大數量大於目標資源計數。此檔案在下一個步驟`ami-dist-config-win-fast-launch.json`中顯示的命令範例中命名。

   ```
   {
   "name": "WinFastLaunchDistribution",
   "description": "An example of Windows AMI EC2 Fast Launch settings in the distribution configuration.",
   "distributions": [
   	{
   		"region": "us-west-2",
   		"amiDistributionConfiguration": {
   			"name": "Name {{imagebuilder:buildDate}}",
   			"description": "Includes Windows AMI EC2 Fast Launch settings.",
   			"amiTags": {
   				"KeyName": "Some Value"
   			}
   		},
   		"fastLaunchConfigurations": [{
   			"enabled": true,
   			"snapshotConfiguration": {
   				"targetResourceCount": 5
   			},
   			"maxParallelLaunches": 6,
   			"launchTemplate": {
   				"launchTemplateId": "lt-0ab1234c56d789012",
   				"launchTemplateVersion": "1"
   			 }
   		}],
   		"launchTemplateConfigurations": [{
   				   "launchTemplateId": "lt-0ab1234c56d789012",
   				   "setDefaultVersion": true
   		  }]
   	}]
   }
   ```
**注意**  
您可以在 `launchTemplate`區段`launchTemplateId`中指定 `launchTemplateName`，而不是 ，但無法同時指定名稱和 ID。

1. 

**使用您建立做為輸入的檔案，執行下列命令。**

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

   如需詳細資訊，請參閱《 *AWS CLI 命令參考***[create-distribution-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/create-distribution-configuration.html)**》中的 。

## 範例：從 建立輸出 VM 磁碟的分佈設定 AWS CLI
<a name="cli-create-vm-dist-config"></a>

下列範例示範如何使用 **create-distribution-configuration**命令來建立分佈設定，以在每次建置映像時將 VM 映像磁碟匯出至 Amazon S3。

1. 

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

   您可以簡化在 中使用的**create-distribution-configuration**命令 AWS CLI。若要執行此作業，請建立 JSON 檔案，其中包含您要傳入命令的所有匯出組態。
**注意**  
JSON 檔案中資料值的命名慣例遵循為映像建置器 API 操作請求參數指定的模式。若要檢閱 API 操作請求參數，請參閱 *EC2 Image Builder API 參考*中的 **[CreateDistributionConfiguration](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateDistributionConfiguration.html)**命令。  
若要提供資料值做為命令列參數，請參閱 *AWS CLI Command Reference* 中指定的參數名稱。 會將**create-distribution-configuration**命令做為選項。

   以下是我們在 `s3ExportConfiguration` JSON 物件中為此範例指定的參數摘要：
   + **roleName** （字串，必要） – 授予 VM Import/Export 許可將映像匯出至 S3 儲存貯體的角色名稱。
   + **diskImageFormat** （字串，必要） – 將更新的磁碟映像匯出為下列其中一個支援的格式：
     + **Virtual Hard Disk (VHD)** – 與 Citrix Xen 和 Microsoft Hyper-V 虛擬化產品相容。
     + **串流最佳化 ESX 虛擬機器磁碟 (VMDK)** – 與 VMware ESX 和 VMware vSphere 第 4、5 和 6 版相容。
     + **原始** – 原始格式。
   + **s3Bucket** （字串，必要） – 存放 VM 輸出磁碟映像的 S3 儲存貯體。

   儲存檔案為 `export-vm-disks.json`。在 **create-distribution-configuration**命令中使用檔案名稱。

   ```
   {
   	"name": "example-distribution-configuration-with-vm-export",
   	"description": "example",
   	"distributions": [
   		{
   			"region": "us-west-2",
   			"amiDistributionConfiguration": {
   				"description": "example-with-vm-export"
   
   			},
   			"s3ExportConfiguration": {
   				"roleName": "vmimport",
   				"diskImageFormat": "RAW",
   				"s3Bucket": "vm-bucket-export"
   			}
   		}],
   	"clientToken": "abc123def4567ab"
   }
   ```

1. 

**使用您建立做為輸入的檔案，執行下列命令。**

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

   如需詳細資訊，請參閱《 *AWS CLI 命令參考***[create-distribution-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/create-distribution-configuration.html)**》中的 。

# 建立和更新容器映像的分佈設定
<a name="cr-upd-container-distribution-settings"></a>

本節涵蓋建立和更新映像建置器容器映像的分佈設定。

**Topics**
+ [

## 從 建立映像建置器容器映像的分佈設定 AWS CLI
](#cli-create-container-distribution-configuration)
+ [

## 從 更新容器映像的分佈設定 AWS CLI
](#cli-update-container-distribution-configuration)

## 從 建立映像建置器容器映像的分佈設定 AWS CLI
<a name="cli-create-container-distribution-configuration"></a>

分佈組態可讓您指定輸出容器映像的名稱和描述，並將容器映像複寫到其他 AWS 區域。您也可以將個別標籤套用至分佈組態資源，以及每個區域內的容器映像。

1. 

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

   使用您偏好的檔案編輯工具，以下列範例所示的索引鍵建立 JSON 檔案，加上適用於您環境的值。此範例使用名為 `create-container-distribution-configuration.json` 的檔案：

   ```
   {
   	"name": "distribution-configuration-name",
   	"description": "Distributes container image to Amazon ECR repository in two regions.",
   	"distributions": [
   		{
   			"region": "us-west-2",
   			"containerDistributionConfiguration": {
   				"description": "My test image.",
   				"targetRepository": {
   					"service": "ECR",
   					"repositoryName": "testrepo"
   				},
   				"containerTags": ["west2", "image1"]
   			}
   		},
   		{
   			"region": "us-east-1",
   			"containerDistributionConfiguration": {
   				"description": "My test image.",
   				"targetRepository": {
   					"service": "ECR",
   					"repositoryName": "testrepo"
   				},
   			   "containerTags": ["east1", "imagedist"]
   			}
   		}
   	],
   	"tags": {
   	   "DistributionConfigurationTestTagKey1": "DistributionConfigurationTestTagValue1",
   	   "DistributionConfigurationTestTagKey2": "DistributionConfigurationTestTagValue2"
   	}
   }
   ```

1. 

**使用您建立做為輸入的檔案，執行下列命令。**

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

   如需詳細資訊，請參閱《 *AWS CLI 命令參考***[create-distribution-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/create-distribution-configuration.html)**》中的 。

## 從 更新容器映像的分佈設定 AWS CLI
<a name="cli-update-container-distribution-configuration"></a>

下列範例說明如何使用 **[update-distribution-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/update-distribution-configuration.html)**命令來更新容器映像的分佈設定 AWS CLI。您也可以更新每個區域中容器映像的標籤。

1. 

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

   使用您偏好的檔案編輯工具來建立 JSON 檔案，其中包含下列範例中顯示的金鑰，以及適用於您環境的值。此範例使用名為 `update-container-distribution-configuration.json` 的檔案：

   ```
   {
   	"distributionConfigurationArn": "arn:aws:imagebuilder:us-west-2:123456789012:distribution-configuration/update-container-distribution-configuration.json",
   	"description": "Distributes container image to Amazon ECR repository in two regions.",
   	"distributions": [
   		{
   			"region": "us-west-2",
   			"containerDistributionConfiguration": {
   				"description": "My test image.",
   				"targetRepository": {
   					"service": "ECR",
   					"repositoryName": "testrepo"
   				},
   				"containerTags": ["west2", "image1"]
   			}
   		},
   		{
   			"region": "us-east-2",
   			"containerDistributionConfiguration": {
   				"description": "My test image.",
   				"targetRepository": {
   					"service": "ECR",
   					"repositoryName": "testrepo"
   				},
   			   "containerTags": ["east2", "imagedist"]
   			}
   		}
   	]
   }
   ```

1. 

**使用您建立做為輸入的 檔案，執行下列命令：**

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

   如需詳細資訊，請參閱《 *AWS CLI 命令參考***[update-distribution-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/imagebuilder/update-distribution-configuration.html)**》中的 。若要更新分佈組態資源的標籤，請參閱[標籤資源](tag-resources.md)一節。

# 使用映像建置器設定跨帳戶 AMI 分佈
<a name="cross-account-dist"></a>

本節說明如何設定分佈設定，將映像建置器 AMI 交付至您指定的其他帳戶。

然後，目的地帳戶可以視需要啟動或修改 AMI。

**注意**  
AWS CLI 本節中的 命令範例假設您先前已建立映像配方和基礎設施組態 JSON 檔案。若要為映像配方建立 JSON 檔案，請參閱 [使用 建立映像配方 AWS CLI](create-image-recipes.md#create-image-recipe-cli)。若要建立基礎設施組態的 JSON 檔案，請參閱 [建立基礎架構組態](create-infra-config.md)。

## 跨帳戶 AMI 分佈的先決條件
<a name="cross-account-dist-prereqs"></a>

為了確保目標帳戶可以從映像建置器映像成功啟動執行個體，您必須為所有區域中的所有目的地帳戶設定適當的許可。

如果您使用 AWS Key Management Service (AWS KMS) 加密 AMI，您必須 AWS KMS key 為用來加密新映像的帳戶設定 。

當 Image Builder 為加密AMIs 執行跨帳戶分佈時，來源帳戶中的映像會解密並推送到目標區域，並在該區域使用指定的金鑰重新加密。由於 Image Builder 代表目標帳戶，並使用您在目的地區域中建立的 IAM 角色，因此該帳戶必須能夠存取來源和目的地區域中的金鑰。

### 加密金鑰
<a name="cross-account-prereqs-encryption"></a>

如果您的映像是使用 加密，則需要下列先決條件 AWS KMS。下一章節將介紹 IAM 先決條件。

**來源帳戶需求**
+ 在您建置和分發 AMI 的所有區域中，在您的 帳戶中建立 KMS 金鑰。您也可以使用現有的金鑰。
+ 更新所有這些金鑰的金鑰政策，以允許目的地帳戶使用您的金鑰。

**目的地帳戶需求**
+ 將內嵌政策新增至 `EC2ImageBuilderDistributionCrossAccountRole` ，以允許角色執行必要動作來分發加密的 AMI。如需 IAM 組態步驟，請參閱[IAM 政策](#cross-account-prereqs-iam)先決條件一節。

如需使用 跨帳戶存取的詳細資訊 AWS KMS，請參閱《 *AWS Key Management Service 開發人員指南*》[中的允許其他帳戶中的使用者使用 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

在映像配方中指定您的加密金鑰，如下所示：
+ 如果您使用的是映像建置器主控台，請從配方的儲存 **（磁碟區） 區段中的加密 (KMS 別名**) 下拉式清單中選擇您的加密金鑰。 ****
+ 如果您使用 **CreateImageRecipe** API 動作或 中的 **create-image-recipe**命令 AWS CLI，請在 JSON 輸入中的 `ebs`區段`blockDeviceMappings`中設定您的金鑰。

  下列 JSON 程式碼片段顯示映像配方的加密設定。除了提供加密金鑰之外，您還必須將 `encrypted`旗標設定為 `true`。

  ```
  {
  	...
  	"blockDeviceMappings": [
  	{
  		"deviceName": "Example root volume",
  		"ebs": { 
  			"deleteOnTermination": true,
  			"encrypted": true,
  			"iops": 100,
  			"kmsKeyId": "image-owner-key-id",
  			...
  		},
  		...
  	}],
  	...
  }
  ```

### IAM 政策
<a name="cross-account-prereqs-iam"></a>

若要在 AWS Identity and Access Management (IAM) 中設定跨帳戶分佈許可，請遵循下列步驟：

1. 若要使用跨帳戶分佈的映像建置器 AMIs，目的地帳戶擁有者必須在其帳戶中建立新的 IAM 角色，稱為 `EC2ImageBuilderDistributionCrossAccountRole`。

1. 他們必須將 [Ec2ImageBuilderCrossAccountDistributionAccess 政策](security-iam-awsmanpol.md#sec-iam-manpol-Ec2ImageBuilderCrossAccountDistributionAccess) 連接至角色，才能啟用跨帳戶分佈。如需 受管政策的詳細資訊，請參閱*AWS Identity and Access Management 《 使用者指南*》中的 [受管政策和內嵌政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

1. 確認來源帳戶 ID 已新增至連接到目的地帳戶的 IAM 角色的信任政策。下列範例顯示目的地帳戶中的信任政策，指定來自來源帳戶的帳戶 ID。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [{
           "Effect": "Allow",
           "Principal": {
               "AWS": "arn:aws:iam::444455556666:root"
           },
           "Action": "sts:AssumeRole"
       }]
   }
   ```

------

   如需信任政策的詳細資訊，請參閱*AWS Identity and Access Management 《 使用者指南*》中的以[資源為基礎的政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based)。

1. 如果您分發的 AMI 已加密，目的地帳戶擁有者必須將下列內嵌政策新增至其帳戶中`EC2ImageBuilderDistributionCrossAccountRole`的 ，以便他們可以使用您的 KMS 金鑰。`Principal` 區段包含其帳戶號碼。這可讓 Image Builder 在使用 AWS KMS 來加密和解密每個區域的 AMI 時，代表他們採取行動。

------
#### [ JSON ]

****  

   ```
   {
   	"Version":"2012-10-17",		 	 	 
   	"Statement": [
   		{
   			"Sid": "AllowRoleToPerformKMSOperationsOnBehalfOfTheDestinationAccount",
   			"Effect": "Allow",
   			"Action": [
   				"kms:Encrypt",
   				"kms:Decrypt",
   				"kms:ReEncrypt*",
   				"kms:GenerateDataKey*",
   				"kms:DescribeKey",
   				"kms:CreateGrant",
   				"kms:ListGrants",
   				"kms:RevokeGrant"
   			],
   			"Resource": "*"
   		}
   	]
   }
   ```

------

   如需內嵌政策的詳細資訊，請參閱*AWS Identity and Access Management 《 使用者指南*》中的[內嵌政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#inline-policies)。

1. 如果您使用 `launchTemplateConfigurations`指定 Amazon EC2 啟動範本，您還必須在`EC2ImageBuilderDistributionCrossAccountRole`每個目的地帳戶中將下列政策新增至您的 。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:CreateLaunchTemplateVersion",
                   "ec2:ModifyLaunchTemplate"
               ],
               "Resource": "*",
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceTag/CreatedBy": "EC2 Image Builder"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:DescribeLaunchTemplates"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:CreateTags"
               ],
               "Resource": "arn:aws:ec2:*:*:launch-template/*",
               "Condition": {
                   "StringEquals": {
                       "aws:RequestTag/CreatedBy": "EC2 Image Builder"
                   }
               }
           }
       ]
   }
   ```

------

1. 如果您使用 AWS Systems Manager 參數存放區參數來存放分佈帳戶和區域的輸出 AMI AMI 的 AMI ID，則必須將下列政策新增至每個目的地帳戶中`EC2ImageBuilderDistributionCrossAccountRole`的 。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:PutParameter"
               ],
               "Resource": "arn:aws:ssm:*:111122223333:parameter/ImageBuilder-*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:DescribeImages"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

## 跨帳戶分佈的限制
<a name="cross-account-dist-limits"></a>

跨帳戶分佈映像建置器映像時有一些限制：
+ 目的地帳戶限制為每個目的地區域 50 個並行 AMI 複本。
+ 如果您想要將全虛擬化 (PV) 虛擬化 AMI 複製到另一個區域，則目的地區域必須支援 PV 虛擬化 AMIs。如需詳細資訊，請參閱 [Linux AMI 虛擬化類型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/virtualization_types.html)。
+ 您無法建立加密快照的未加密複本。如果您未為 `KmsKeyId` 參數指定 AWS Key Management Service (AWS KMS) 客戶受管金鑰，Image Builder 會使用 Amazon Elastic Block Store (Amazon EBS) 的預設金鑰。如需詳細資訊，請參閱《[Amazon Elastic Compute Cloud 使用者指南》中的 Amazon EBS 加密](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html)。 **

如需詳細資訊，請參閱 *EC2 Image Builder API 參考*中的 [CreateDistributionConfiguration](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateDistributionConfiguration.html)。

## 從主控台設定映像建置器 AMI 的跨帳戶分佈
<a name="cross-account-dist-console-create-ami"></a>

本節說明如何使用 建立和設定映像建置器 AMIs 跨帳戶分佈的分佈設定 AWS 管理主控台。設定跨帳戶分佈需要特定的 IAM 許可。您必須完成本節[跨帳戶 AMI 分佈的先決條件](#cross-account-dist-prereqs)的 ，才能繼續。

若要在映像建置器主控台中建立分佈設定，請遵循下列步驟：

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

1. 從導覽窗格中選擇**分佈設定**。這會顯示在您帳戶下建立的分佈設定清單。

1. 在**分佈設定**頁面頂端，選擇**建立分佈設定**。這會帶您前往**建立分佈設定**頁面。

1. 在**映像類型**區段中，選擇 **Amazon Machine Image (AMI)** 作為**輸出類型**。這是預設設定。

1. 在**一般**區段中，輸入您要建立的分佈設定資源**名稱** (*必要*)。

1. 在**區域設定**區段中，輸入您要在所選區域**的目標帳戶中將 AMI 分配到**的 12 位數帳戶 ID，然後按 **Enter** 鍵。這會檢查格式是否正確，然後在方塊下方顯示您輸入的帳戶 ID。重複此程序以新增更多帳戶。

   若要移除您輸入的帳戶，請選擇帳戶 ID 右側的 **X**。

   輸入每個區域的**輸出 AMI 名稱**。

1. 繼續指定您需要的任何其他設定，然後選擇**建立設定**以建立新的分佈設定資源。

## 從 設定映像建置器 AMI 的跨帳戶分佈 AWS CLI
<a name="cross-account-dist-cli-ami-create"></a>

本節說明如何設定分佈設定檔案，並使用 中的 **create-image**命令 AWS CLI ，在帳戶之間建置和分佈映像建置器 AMI。

設定跨帳戶分佈需要特定的 IAM 許可。您必須先完成本節[跨帳戶 AMI 分佈的先決條件](#cross-account-dist-prereqs)的 ，才能執行 **create-image**命令。

1. 

**設定分佈設定檔案**

   在 中使用 **create-image**命令 AWS CLI 來建立分佈到另一個帳戶的映像建置器 AMI 之前，您必須先建立 `DistributionConfiguration` JSON 結構，在`AmiDistributionConfiguration`設定中指定目標帳戶 IDs。您必須在`AmiDistributionConfiguration`來源區域中指定至少一個。

   下列名為 的範例檔案`create-distribution-configuration.json`顯示來源區域中跨帳戶映像分佈的組態。

   ```
   {
   	"name": "cross-account-distribution-example",
   	"description": "Cross Account Distribution Configuration Example",
   	"distributions": [
   		{
   			"amiDistributionConfiguration": {
   				"targetAccountIds": ["123456789012", "987654321098"],
   				"name": "Name {{ imagebuilder:buildDate }}", 
   				"description": "ImageCopy Ami Copy Configuration"
   			}, 
   			"region": "us-west-2"
   		}
   	]
   }
   ```

1. 

**建立分佈設定**

   若要使用 中的 [create-distribution-configuration](https://docs.aws.amazon.com/cli/latest/reference/imagebuilder/create-distribution-configuration.html) 命令建立 Image Builder 分佈設定資源 AWS CLI，請在 命令中提供下列參數：
   + 在 `--name` 參數中輸入分佈的名稱。
   + 連接您在 `--cli-input-json` 參數中建立的分佈組態 JSON 檔案。

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

*您也可以使用 `--distributions` 參數，直接在 命令中提供 JSON。*

# 使用 EC2 啟動範本設定 AMI 分佈
<a name="dist-using-launch-template"></a>

若要協助確保 Image Builder AMI 在目標帳戶和區域中的啟動體驗一致，您可以使用 在分發設定中指定 Amazon EC2 啟動範本`launchTemplateConfigurations`。在分發過程中`launchTemplateConfigurations`出現 時，Image Builder 會建立新的啟動範本版本，其中包含範本中的所有原始設定，以及建置的新 AMI ID。如需使用啟動範本啟動 EC2 執行個體的詳細資訊，請參閱下列其中一個連結，視您的目標作業系統而定。
+ [從啟動範本啟動 Linux 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)
+ [從啟動範本啟動 Windows 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)

**注意**  
當您在映像中包含啟動範本以啟用 Windows Fast Launch 時，啟動範本必須包含下列標籤，以便 Image Builder 可以代表您啟用 Windows Fast Launch。  
`CreatedBy: EC2 Image Builder`

## 從主控台將 EC2 啟動範本新增至 AMI 分佈設定
<a name="dist-using-launch-template-console"></a>

若要使用輸出 AMI 提供啟動範本，請遵循主控台中的下列步驟：

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

1. 從導覽窗格中選擇**分佈設定**。這會顯示在您帳戶下建立的分佈設定清單。

1. 在**分佈設定**頁面頂端，選擇**建立分佈設定**。這會開啟**建立分佈設定**頁面。

1. 在**映像類型**區段中，選擇 **Amazon Machine Image (AMI)** **輸出類型**。這是預設設定。

1. 在**一般**區段中，輸入您要建立的分佈設定資源**名稱** (*必要*)。

1. 在**區域設定**區段中，從清單中選擇 EC2 啟動範本的名稱。如果您的帳戶中沒有啟動範本，請選擇**建立新的啟動範本**，這會在 **EC2 儀表板**中開啟**啟動範本**。

   選取**設定預設版本**核取方塊，將啟動範本預設版本更新為 Image Builder 使用輸出 AMI 建立的新版本。

   若要將另一個啟動範本新增至選取的區域，請選擇**新增啟動範本組態**。

   若要移除啟動範本，請選擇**移除**。

1. 繼續指定您需要的任何其他設定，然後選擇**建立設定**以建立新的分佈設定資源。

## 從 將 EC2 啟動範本新增至 AMI 分佈設定 AWS CLI
<a name="dist-using-launch-template-cli"></a>

本節說明如何使用啟動範本設定分佈設定檔案，並使用 AWS CLI 中的 **create-image**命令來建置和分佈 Image Builder AMI 和使用它的啟動範本新版本。

1. 

**設定分佈設定檔案**

   您必須先 AWS CLI建立指定`launchTemplateConfigurations`設定的分佈組態 JSON 結構，才能使用啟動範本建立映像建置器 AMI。您必須在來源區域中指定至少一個`launchTemplateConfigurations`項目。

   下列名為 的範例檔案`create-distribution-config-launch-template.json`顯示來源區域中啟動範本組態的一些可能案例。

   ```
   {
       "name": "NewDistributionConfiguration",
       "description": "This is just a test",
       "distributions": [
           {
               "region": "us-west-2",
               "amiDistributionConfiguration": {
                   "name": "test-{{imagebuilder:buildDate}}-{{imagebuilder:buildVersion}}",
                   "description": "description"
               },
               "launchTemplateConfigurations": [
                   {
                       "launchTemplateId": "lt-0a1bcde2fgh34567",
                       "accountId": "935302948087",
                       "setDefaultVersion": true
                   },
                   {
                       "launchTemplateId": "lt-0aaa1bcde2ff3456"
                   },
                   {
                       "launchTemplateId": "lt-12345678901234567",
                       "accountId": "123456789012"
                   }
               ]
           }
       ],
       "clientToken": "clientToken1"
   }
   ```

1. 

**建立分佈設定**

   若要使用 中的 [create-distribution-configuration](https://docs.aws.amazon.com/cli/latest/reference/imagebuilder/create-distribution-configuration.html) 命令建立 Image Builder 分佈設定資源 AWS CLI，請在 命令中提供下列參數：
   + 在 `--name` 參數中輸入分佈的名稱。
   + 連接您在 `--cli-input-json` 參數中建立的分佈組態 JSON 檔案。

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

*您也可以使用 `--distributions` 參數，直接在 命令中提供 JSON。*

# 使用增強型 AMI 分佈功能
<a name="distribution-enhanced_functionality"></a>

Image Builder 提供進階分佈功能，可讓您靈活地控制 AMIs區域和帳戶之間的分佈方式。這些功能將分發與建置程序分開，可讓您隨需分發現有的映像、有效率地從分發失敗中復原，並透過可自訂的工作流程實作受控的多階段分發策略。

您可以使用映像建置器中的增強型 AMI 分佈功能直接執行分佈活動，而不需要重新執行完整的映像建置。

## 解耦分佈
<a name="decoupled-distribution"></a>

DistributeImage API 接受三種類型的來源映像參考：
+ **AMI ID** – 標準 AMI 識別符 （例如 `ami-0abcdef1234567890`)
+ **SSM 參數** – 存放 AMI ID 的 SSM 參數 （例如 `ssm:/my/ami/parameter`)
+ **映像建置器版本 ARN** – 映像建置器映像版本 ARN

## 分發重試
<a name="distribution-retry"></a>

如果映像分佈失敗，請使用 `RetryImage` API 重試分佈。這可減少透過避免完成映像重建來疑難排解失敗原因的時間。在解決分佈失敗的根本原因`RetryImage`後使用 。

RetryImage API 接受映像建置版本 ARN （例如，`arn:aws:imagebuilder:us-west-2:123456789012:image/my-image/1.0.0/1`)。當您叫用 API 時，Image Builder 會使用原始分佈組態和設定，自動從失敗點繼續分佈程序。`RetryImage` API 可以重試分佈階段、測試階段或整合階段期間失敗的分佈。它適用於下列狀態AMIs：待定、失敗、已刪除或可用。

**先決條件** 

重試分佈之前，請確定下列事項：
+ 您已識別並解決失敗的根本原因。檢閱 CloudWatch Logs 中的分佈日誌以取得錯誤詳細資訊。
+ 您擁有重試映像建置所需的 IAM 許可。
+ 對於跨帳戶分佈失敗，請確認目的地帳戶中`EC2ImageBuilderDistributionCrossAccountRole`的 已連接`Ec2ImageBuilderCrossAccountDistributionAccess`政策。

**重要：**在不修正基礎問題的情況下重試會導致重複失敗。

## 分佈工作流程
<a name="distribution-workflows"></a>

分佈工作流程是補充建置和測試工作流程的新工作流程類型，可讓您使用循序步驟定義和控制分佈程序。透過分發工作流程，您可以建立自訂分發程序，其中包含 AMI 複製操作、wait-for-action檢查點、影像屬性修改和其他分發相關步驟。這可讓您透過步驟層級可見性、平行分佈功能和精細錯誤報告，對 AMIs分佈方式進行結構化控制。

若要進一步了解如何建立和自訂工作流程，請參閱[管理映像工作流程](manage-image-workflows.html)。