

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

# 在 Elastic Beanstalk 環境中使用自訂 Amazon Machine Image (AMI)
<a name="using-features.customenv"></a>

本節說明何時考慮使用自訂 AMI，並提供在您的環境中設定和管理自訂 AMI 的程序。建立 AWS Elastic Beanstalk 環境時，您可以指定要使用的 Amazon Machine Image (AMI)，而不是平台版本中包含的標準 Elastic Beanstalk AMI。如果您需要安裝標準 AMI 中未包含的許多軟體，則自訂 AMI 可在您環境中啟動執行個體時，縮短佈建的時間。

使用[組態檔案](ebextensions.md)可有效快速且一致地自訂您的環境。雖然在環境建立和更新期間，套用組態可能需要很長的時間。如果您在組態檔中執行許多伺服器組態，可以透過自訂 AMI (其中包含您所需的軟體和設定)，來縮短執行作業的時間。

自訂 AMI 也可讓您變更低層級元件 (例如，Linux 核心)，這類元件難以實作或需要花費很長的時間來套用至組態檔案。若要建立自訂的 AMI，請在 Amazon EC2 中啟動 Elastic Beanstalk 平台的 AMI、根據您的需要來自訂軟體和設定，然後停止執行個體和儲存產生的 AMI。

## 建立自訂 AMI
<a name="using-features.customenv.create"></a>

您可以使用 [EC2 Image Builder](https://aws.amazon.com/image-builder) 來建立和管理自訂 AMIs，作為這些程序的替代方案。如需詳細資訊，請參閱[映像建置器使用者指南](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)。

**識別基礎 Elastic Beanstalk AMI**

1. 在命令視窗中，執行如下所示的命令。如需詳細資訊，請參閱 *AWS CLI 命令參考文件*中的 [describe-platform-version](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-platform-version.html)。

   指定您要使用自訂 AMI AWS 的區域，並以應用程式所在的 Elastic Beanstalk 平台取代平台 ARN 和版本編號。

     
**Example – Mac 作業系統/Linux 作業系統**  

   ```
   $ aws elasticbeanstalk describe-platform-version --region {{us-east-2}} \
         --platform-arn "arn:aws:elasticbeanstalk:{{us-east-2}}::platform/{{Node.js 20 running on 64bit Amazon Linux 2023}}/{{6.1.7}}" \
         --query PlatformDescription.CustomAmiList
   [
       {
           "VirtualizationType": "pv",
           "ImageId": ""
       },
       {
           "VirtualizationType": "hvm",
           "ImageId": "{{ami-020ae06fdda6a0f66}}"
       }
   ]
   ```  
**Example – Windows 作業系統**  

   ```
   C:\> aws elasticbeanstalk describe-platform-version --region {{us-east-2}} --platform-arn"arn:aws:elasticbeanstalk:{{us-east-2}}::platform/{{
   IIS 10.0 running on 64bit Windows Server 2022}}/{{2.15.3}}" --query PlatformDescription.CustomAmiList
   [
       {
           "VirtualizationType": "pv",
           "ImageId": ""
       },
       {
           "VirtualizationType": "hvm",
           "ImageId": "{{ami-020ae06fdda6a0f66}}"
       }
   ]
   ```

1. 請記錄結果中看起來像是 `ami-020ae06fdda6a0f66` 的 `ImageId` 值。

此值是與應用程式相關的平台版本、EC2 執行個體架構和 AWS 區域的庫存 Elastic Beanstalk AMI。如果您需要為多個平台、架構或 AWS 區域建立 AMIs，請重複此程序來識別每個組合的正確基礎 AMI。

**注意**  
請勿利用 Elastic Beanstalk 環境中已啟動的執行個體，來建立 AMI。Elastic Beanstalk 會在佈建時對執行個體進行變更，而這可能會在儲存的 AMI 中造成問題。如果從 Elastic Beanstalk 環境中的執行個體儲存映像，也會製作已經部署到固定映像部分之執行個體的應用程式版本。

對於 Linux，您也可以利用 Elastic Beanstalk 未發佈的社群 AMI，來建立自訂的 AMI。您可以使用最新的 [Amazon Linux](https://aws.amazon.com/amazon-linux-ami/) AMI 做為起點。當您以非 Elastic Beanstalk 管理之 Linux AMI 啟動環境時，Elastic Beanstalk 會嘗試安裝平台軟體 (語言、框架、代理伺服器等) 和其他元件以支援功能，例如[增強型運作狀態報告](health-enhanced.md)。

**注意**  
以 Windows 伺服器為基礎的自訂 AMI 需要從 `describe-platform-version` 傳回的庫存 Elastic Beanstalk AMI，如先前步驟 1 所示。

雖然 Elastic Beanstalk 可使用非 Elastic Beanstalk 管理的 AMI，但因為 Elastic Beanstalk 安裝缺少元件所造成的佈建時間增加，會降低或消除一開始就建立自訂 AMI 時所預期帶來的效益。其他的 Linux 版本也許可以在進行一些故障排除後使用，但並未正式支援。如果您的應用程式需要特定的 Linux 發行版本，一個替代方法是建立 Docker 影像，然後在 Elastic Beanstalk 上的 [Docker 平台](docker.md)或[多容器 Docker 平台](create_deploy_docker_ecs.md)上執行此影像。

**若要建立自訂的 AMI**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 選擇**啟動執行個體**。

1. 如果您識別了Elastic Beanstalk AMI (使用 `describe-platform-version`) 或 Amazon Linux AMI，請搜尋方塊中輸入其 AMI ID。然後按 **Enter**。

   您也可以搜尋清單，來尋找符合您需求的其他社群 AMI。
**注意**  
我們建議您選擇使用 HVM 虛擬化的 AMI。這些 AMI 會在描述中顯示 **Virtualization type: hvm (虛擬化類型：hvm)**。  
如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[虛擬化類型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#virtualization_types)。

1. 選擇 **Select (選取)** 來選擇 AMI。

1. 選取執行個體類型，然後選擇 **Next: Configure Instance Details (下一步：設定執行個體的詳細資訊)**。

1. **（適用於已淘汰的 Amazon Linux AMI (AL1) 平台）** 如果您的環境在支援的 Linux 平台或 Windows 平台上執行，請略過此步驟。

   展開**進階詳細資訊**區段，並在**使用者資料**欄位中貼上下列文字。

   ```
   #cloud-config
     repo_releasever: {{repository version number}}
     repo_upgrade: none
   ```

   *儲存庫版本編號*代表 AMI 名稱中的版本年份和月份。例如，採用 Amazon Linux 2015 年 3 月版的 AMI，會具有 `2015.03` 的儲存庫版本編號。對於 Elastic Beanstalk 映像，這符合您[平台版本](concepts.platforms.md)解決方案堆疊名稱中所顯示的日期 (根據 Amazon Linux AMI，先前為 Amazon Linux 2)。
**注意**  
此 `repo_releasever` 設定會設定 Amazon Linux AMI 的啟動鎖定功能。這會導致 AMI 在啟動時使用固定的特定儲存庫版本。Amazon Linux 2 不支援此功能 — 如果您的環境使用目前的 Amazon Linux 2 平台分支，則請勿指定。如果您只在 Amazon Linux AMI 平台分支上將自訂 AMI 搭配 Elastic Beanstalk 使用 (先前為 Amazon Linux 2)，則需要此設定。  
此 `repo_upgrade` 設定會停用自動安裝安全性更新的功能。如果要將自訂 AMI 搭配 Elastic Beanstalk 使用，需執行這兩項動作。

1. 繼續透過精靈來[啟動 EC2 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/launching-an-instance.html)。出現提示時，請選擇您有權存取的金鑰對，以連接到執行個體來進行後續步驟。

1.  使用 SSH 或 RDP 來[連接到執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)。

1. 進行任何所需的自訂。

1. **(Windows 平台)** 執行 EC2Config 服務 Sysprep。有關 EC2Config 的詳細資訊，請參閱[使用 EC2Config 服務來設定 Windows 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/UsingConfig_WinAMI.html)。請確定將 Sysprep 設定為產生隨機密碼，此密碼可以從 AWS 管理主控台擷取。

1. 在 Amazon EC2 主控台，停止 EC2 執行個體。然後在 **Instance Actions (執行個體動作)** 功能表中，選擇 **Create Image (EBS AMI) (建立映像 (EBS AMI))**。

1. 若要避免產生 AWS 額外費用，[請終止 EC2 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)。

**若要在 Elastic Beanstalk 環境使用您的自訂 AMI**

1. 開啟 [Elastic Beanstalk 主控台](https://console.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

1. 在導覽窗格中，選擇**環境**，然後在清單中選擇您環境的名稱。

1. 在導覽窗格中，選擇 **Configuration** (組態)。

1. 在 **Capacity (容量)** 組態類別中，選擇 **Edit (編輯)**。

1. 如需 **AMI ID**，請輸入您的自訂 AMI ID。

1. 若要儲存變更，請選擇頁面底部的**儲存變更**。

當您使用自訂的 AMI 來建立新的環境時，您應該使用做為基礎來建立 AMI 時所使用的相同平台版本。

## 使用自訂 AMI 管理環境
<a name="using-features.customenv.managing"></a>

### 平台更新
<a name="using-features.customenv.platform-updates."></a>

使用自訂 AMI 時，Elastic Beanstalk 會在更新其平台版本時，繼續在環境中使用相同的自訂 AMI，無論更新是手動套用還是透過受管平台更新。環境**將不會**重設為使用新平台版本的庫存 AMI。

我們建議您根據新平台版本的庫存 AMI 建立新的自訂 AMI。這樣做將套用新平台版本中可用的修補程式，並將由於不相容的套件或程式庫版本而導致的部署失敗降至最低。

如需建立新的自訂 AMI 的詳細資訊，請參閱本主題稍[建立自訂 AMI](#using-features.customenv.create)早的 。

### 移除自訂 AMI
<a name="using-features.customenv.platform-updates."></a>

如果您想要從環境移除自訂 AMI，並將其重設為使用環境平台版本的庫存 AMI，請使用下列 CLI 命令。

```
aws elasticbeanstalk update-environment \
  --application-name {{my-application}} \
  --environment-name {{my-environment}} \
  --region {{us-east-1 }}\
  --options-to-remove Namespace=aws:autoscaling:launchconfiguration,OptionName=ImageId
```

**注意**  
為了避免服務中斷，請在將此變更套用至生產環境之前，先使用庫存 AMI 測試您的應用程式。

## 清除自訂 AMI
<a name="using-features.customenv.cleanup"></a>

當您完成自訂 AMI 且不需要再啟動 Elastic Beanstalk 環境，請考慮將其清除，以將儲存成本降到最低。清除自訂 AMI 涉及從 Amazon EC2 取消註冊，並刪除其他關聯的資源。如需詳細資訊，請參閱[取消註冊您的 Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/deregister-ami.html) 或[取消註冊您的 Windows AMI](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/deregister-ami.html)。