

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

# 使用自訂 AMI
<a name="workinginstances-custom-ami"></a>

**重要**  
 AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止，並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問，請透過 [AWS re：Post](https://repost.aws/) 或透過 [AWS Premium Support](https://aws.amazon.com/support) 聯絡 AWS 支援 團隊。

OpsWorks Stacks 支援兩種自訂執行個體的方式：自訂 [Amazon Machine Image (AMIs)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html) 和 Chef 配方。這兩種方法都可讓您控制所安裝的套件和套件版本、其設定方式，以此類推。不過，每種方法都有不同的優點，因此最好的方法取決於您的需求。

以下是考慮使用自訂 AMI 的主要原因：
+ 您想要預先綁定特定套件，而不是在啟動執行個體之後安裝它們。
+ 您想要控制套件更新的時間，以提供 layer 的一致基礎映像。
+ 您想要盡快啟動執行個體 (特別是[負載類型](workinginstances-autoscaling.md)執行個體)。

以下是考慮使用 Chef 配方的主要原因：
+ 它們比自訂 AMI 更具彈性。
+ 它們更容易更新。
+ 它們可以在執行中執行個體上執行更新。

 實際上，最佳解決方案可能是這兩種方法的組合。如需配方的詳細資訊，請參閱[技術指南和配方](workingcookbook.md)。

**Topics**
+ [

## 自訂 AMIs 如何使用 OpsWorks Stacks
](#workinginstances-custom-ami-work)
+ [

## 為 OpsWorks Stacks 建立自訂 AMI
](#workinginstances-custom-ami-create)

## 自訂 AMIs 如何使用 OpsWorks Stacks
<a name="workinginstances-custom-ami-work"></a>

若要為您的執行個體指定自訂 AMI，請在建立新執行個體時，選取**使用自訂 AMI** 做為執行個體的作業系統。 OpsWorks 堆疊接著會顯示堆疊區域中自訂 AMIs。如需詳細資訊，請參閱[將執行個體新增至 Layer](workinginstances-add.md)。

**注意**  
您無法將特定自訂 AMI 指定為堆疊的預設作業系統。您可以將 `Use custom AMI` 設定為堆疊的預設作業系統，但只有在將新的執行個體新增至 layer 時才能指定特定 AMI。如需詳細資訊，請參閱[將執行個體新增至 Layer](workinginstances-add.md)及[建立新的堆疊](workingstacks-creating.md)。雖然可以使用其他作業系統 (例如 CentOS 6.*x*) (從自訂或社群產生的 AMI 所建立) 建立執行個體，但並未正式受到支援。

本主題討論您在建立或使用自訂 AMI 之前應該考慮的一些一般問題。

**Topics**
+ [

### 啟動行為
](#workinginstances-custom-ami-work-startup)
+ [

### 選擇 Layer
](#workinginstances-custom-ami-work-layer)
+ [

### 處理應用程式
](#workinginstances-custom-ami-work-apps)

### 啟動行為
<a name="workinginstances-custom-ami-work-startup"></a>

當您啟動執行個體時， OpsWorks Stacks 會使用指定的自訂 AMI 來啟動新的 Amazon EC2 執行個體。 OpsWorks Stacks 接著會使用 [cloud-init](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonLinuxAMIBasics.html#included-aws-command-line-tools) 在執行個體上安裝 OpsWorks Stacks 代理程式，代理程式會執行執行個體的設定配方，後面接著部署配方。執行個體上線之後，代理程式會執行堆疊中每個執行個體的設定配方 (包括新增的執行個體)。

### 選擇 Layer
<a name="workinginstances-custom-ami-work-layer"></a>

Stacks OpsWorks 代理程式通常不會與已安裝的套件衝突。不過，執行個體必須是至少一個 layer 的成員。 OpsWorks Stacks 一律會執行該 layer 的配方，這可能會導致問題。您應該確切了解 layer 的配方對執行個體所執行的作業，再將具有自訂 AMI 的執行個體新增至 layer。

若要查看特定 layer 類型在您執行個體上執行的配方，請開啟包含該 layer 的堆疊。然後按一下導覽窗格中的 **Layers (Layer)**，然後按一下感興趣 layer 的 **Recipes (配方)**。若要查看實際程式碼，請按一下配方名稱。

**注意**  
對於 Linux AMIs，降低衝突可能性的一種方法是使用 OpsWorks Stacks 佈建和設定執行個體，這是自訂 AMI 的基礎。如需詳細資訊，請參閱[從 Stacks OpsWorks 執行個體建立自訂 Linux AMI](#workinginstances-custom-ami-create-opsworks)。

### 處理應用程式
<a name="workinginstances-custom-ami-work-apps"></a>

除了套件之外，也建議您在 AMI 中包括應用程式。如果您有大型複雜應用程式，則將它包括在 AMI 中可以縮短執行個體的啟動時間。您可以在 AMI 中包含小型應用程式，但相對於讓 OpsWorks Stacks 部署應用程式，通常沒有或很少的時間優勢。

其中一個選項是將應用程式包括在 AMI 中，同時[建立應用程式](workingapps-creating.md)，以將應用程式從儲存庫部署至執行個體。這種方法可縮短開機時間，同時提供方便的方法以在執行個體執行之後更新應用程式。請注意，Chef 配方為等冪操作，因此只要儲存庫中的版本與執行個體上版本相同，部署配方就不會修改應用程式。

## 為 OpsWorks Stacks 建立自訂 AMI
<a name="workinginstances-custom-ami-create"></a>

若要搭配 Stacks OpsWorks 使用自訂 AMI，您必須先從自訂執行個體建立 AMI。您可以從兩個選項中選擇：
+ 使用 Amazon EC2 主控台或 API，根據其中一個 [OpsWorks Stacks 支援的 AMIs](workinginstances-os.md) 的 64 位元版本來建立和自訂執行個體。
+ 對於 Linux AMIs，請使用 OpsWorks 根據其關聯層的組態來建立 Amazon EC2 執行個體。

建立自訂 Linux AMI 之前，請在`/tmp`分割區`noexec`上停用 ，以允許 OpsWorks Stacks 在自訂 Linux 執行個體上安裝其代理程式。

**注意**  
請注意，AMI 可能無法使用所有執行個體類型，因此請確定您的啟動中 AMI 與您計劃使用的執行個體類型相容。具體而言，[R3](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/r3-instances.html) 執行個體類型需要硬體輔助虛擬化 (HVM) AMI。

然後，您可以使用 Amazon EC2 主控台或 API 從自訂執行個體建立自訂 AMI。將執行個體新增至 layer，並指定自訂 AMI，即可在相同區域的任何堆疊中使用自訂 AMI。如需如何建立利用自訂 AMI 之執行個體的詳細資訊，請參閱[將執行個體新增至 Layer](workinginstances-add.md)。

**注意**  
根據預設， OpsWorks Stacks 會在開機時安裝所有 Amazon Linux 更新，為您提供最新版本。此外，Amazon Linux 大約每六個月會發行新版本，其中涉及大量變更。根據預設，當新的 Amazon Linux 版本發行時，以其為依據的自訂 AMI 會自動更新到該版本。建議作法是將自訂 AMI 鎖定為特定 Amazon Linux 版本，讓您可以將更新延遲到您測試過新版本為止。如需詳細資訊，請參閱[如何將 AMI 鎖定為特定版本？](https://aws.amazon.com/amazon-linux-ami/faqs/#lock)。

**Topics**
+ [

### 使用 Amazon EC2 建立自訂 AMI
](#workinginstances-custom-ami-create-ec2)
+ [

### 從 Stacks OpsWorks 執行個體建立自訂 Linux AMI
](#workinginstances-custom-ami-create-opsworks)
+ [

### 建立自訂 Windows AMI
](#w2ab1c14c55c15c13c21c20)

### 使用 Amazon EC2 建立自訂 AMI
<a name="workinginstances-custom-ami-create-ec2"></a>

建立自訂 AMI 的最簡單方法是使用 Amazon EC2 主控台或 API 執行整個任務，這是 Windows AMIs 的唯一選項。如需下列步驟的詳細資訊，請參閱[建立自己的 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami.html)。

**使用 Amazon EC2 主控台或 API 建立自訂 AMI**

1. 使用其中一個 [OpsWorks Stacks 支援 AMI](workinginstances-os.md) 的 64 位元版本，來建立執行個體。

1. 從步驟 1 自訂執行個體，方法是設定執行個體、安裝套件，以此類推。請記住，會根據 AMI 以在每個執行個體上重新產生您安裝的每個項目，因此請不要包括特定執行個體特有的項目。

1. 停止執行個體，並建立自訂 AMI。

### 從 Stacks OpsWorks 執行個體建立自訂 Linux AMI
<a name="workinginstances-custom-ami-create-opsworks"></a>

若要使用自訂 OpsWorks 的 Stacks Linux 執行個體來建立 AMI，請注意 OpsWorks 建立的每個 Amazon EC2 執行個體都包含唯一的身分。如果您從這類執行個體建立自訂 AMI，它會包含該身分，而且所有以 AMI 為基礎的執行個體都有相同的身分。為了確保根據您自訂 AMI 的執行個體具有唯一的身分，您必須先從自訂的執行個體移除身分，再建立 AMI。

**從 Stacks OpsWorks 執行個體建立自訂 AMI**

1. [建立 Linux 堆疊](workingstacks-creating.md)，並[新增一或多 layer](workinglayers-basics-create.md)，以定義自訂執行個體的組態。您可以使用內建 layer、適當地自訂，以及完全自訂 layer。如需詳細資訊，請參閱[自訂 OpsWorks Stacks](customizing.md)。

1. [編輯 layer](workinglayers-basics-edit.md) 並停用 AutoHealing。

1. [新增具有您慣用 Linux 發行版本的執行個體](workinginstances-add.md)至一或多 layer，並[啟動它](workinginstances-starting.md)。建議使用 Amazon EBS 支援的執行個體。開啟執行個體的詳細資訊頁面，並記錄其 Amazon EC2 ID 以供稍後使用。

1. 執行個體上線時，請[使用 SSH 登入](workinginstances-ssh.md)，並根據執行個體作業系統執行接下來四個步驟之一。

1. 對於 Chef 11 或 Chef 12 堆疊中的 Amazon Linux 執行個體，或 Chef 11 堆疊中的 Red Hat Enterprise Linux 7 執行個體，執行下列動作。

   1. `sudo /etc/init.d/monit stop`

   1. `sudo /etc/init.d/opsworks-agent stop`

   1. `sudo rm -rf /etc/aws/opsworks/ /opt/aws/opsworks/ /var/log/aws/opsworks/ /var/lib/aws/opsworks/ /etc/monit.d/opsworks-agent.monitrc /etc/monit/conf.d/opsworks-agent.monitrc /var/lib/cloud/ /etc/chef`
**注意**  
對於 Chef 12 堆疊中的執行個體，請將下列兩個資料夾新增至此命令：  
`/var/chef`
`/opt/chef`

   1. `sudo rpm -e opsworks-agent-ruby`

   1. `sudo rpm -e chef`

1. 用於 Chef 12 堆疊中的 Ubuntu 16.04 LTS 或 18.04 LTS 執行個體時，請執行下列動作。

   1. `sudo systemctl stop opsworks-agent`

   1. `sudo rm -rf /etc/aws/opsworks/ /opt/aws/opsworks/ /var/log/aws/opsworks/ /var/lib/aws/opsworks/ /etc/monit.d/opsworks-agent.monitrc /etc/monit/conf.d/opsworks-agent.monitrc /var/lib/cloud/ /var/chef /opt/chef /etc/chef`

   1. `sudo apt-get -y remove chef`

   1. `sudo dpkg -r opsworks-agent-ruby`

   1. `systemctl stop apt-daily.timer`

   1. `systemctl stop apt-daily-upgrade.timer`

   1. `rm /var/lib/systemd/timers/stamp-apt-daily.timer`

   1. `rm /var/lib/systemd/timers/stamp-apt-daily-upgrade.timer`

1. 如需 Chef 12 堆疊中其他支援的 Ubuntu 版本，執行下列動作。

   1. `sudo /etc/init.d/monit stop`

   1. `sudo /etc/init.d/opsworks-agent stop`

   1. `sudo rm -rf /etc/aws/opsworks/ /opt/aws/opsworks/ /var/log/aws/opsworks/ /var/lib/aws/opsworks/ /etc/monit.d/opsworks-agent.monitrc /etc/monit/conf.d/opsworks-agent.monitrc /var/lib/cloud/ /var/chef /opt/chef /etc/chef`

   1. `sudo apt-get -y remove chef`

   1. `sudo dpkg -r opsworks-agent-ruby`

1. 對於 Chef 12 堆疊中的 Red Hat Enterprise Linux 7 執行個體，執行下列動作。

   1. `sudo systemctl stop opsworks-agent`

   1. `sudo rm -rf /etc/aws/opsworks/ /opt/aws/opsworks/ /var/log/aws/opsworks/ /var/lib/aws/opsworks/ /etc/monit.d/opsworks-agent.monitrc /etc/monit/conf.d/opsworks-agent.monitrc /var/lib/cloud/ /etc/chef /var/chef`

   1. `sudo rpm -e opsworks-agent-ruby`

   1. `sudo rpm -e chef`

1. 此步驟取決於執行個體類型：
   + 對於 Amazon EBS 後端執行個體，請使用 OpsWorks Stacks 主控台[停止執行個體](workinginstances-starting.md)並建立 AMI，如[建立 Amazon EBS 後端 Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html) 中所述。
   + 對於執行個體後端執行個體，請依照建立[執行個體後端 Linux AMI 所述建立 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-instance-store.html)，然後使用 OpsWorks Stacks 主控台停止執行個體。

     當您建立 AMI 時，請務必包括憑證檔案。例如，您可以呼叫 [https://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/CLTRG-ami-bundle-vol.html](https://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/CLTRG-ami-bundle-vol.html)命令，並將`-i`引數設為 `-i $(find /etc /usr /opt -name '*.pem' -o -name '*.crt' -o -name '*.gpg' | tr '\n' ',')`。請不要在綁定時移除 apt 公有金鑰。預設 `ec2-bundle-vol` 命令會處理此任務。

1. 返回 Stacks OpsWorks 主控台並從堆疊[刪除執行個體，](workinginstances-delete.md)以清除您的堆疊。

### 建立自訂 Windows AMI
<a name="w2ab1c14c55c15c13c21c20"></a>

下列程序會為 Windows Server 2022 Base 建立自訂 AMIs。您可以在 Amazon EC2 管理主控台中選擇其他 Windows Server 作業系統。

**重要**  
目前，Stacks OpsWorks 代理程式無法安裝在使用英文 - OpsWorks 美國 (en-US) 以外的系統 UI 語言的 Windows 執行個體上，也無法管理。 ****

**Topics**
+ [

#### 使用 `Sysprep` 建立自訂 Windows AMI
](#w2ab1c14c55c15c13c21c20b9)
+ [

#### 不使用 `Sysprep` 建立自訂 Windows AMI
](#w2ab1c14c55c15c13c21c20c11)
+ [

#### 使用自訂 Windows AMI 新增執行個體
](#w2ab1c14c55c15c13c21c20c13)

#### 使用 `Sysprep` 建立自訂 Windows AMI
<a name="w2ab1c14c55c15c13c21c20b9"></a>

使用 Sysprep 建立自訂 Windows AMI 通常會導致較慢的執行個體啟動但較乾淨的程序。由於`Sysprep`活動、重新啟動、 OpsWorks 堆疊佈建和第一個 OpsWorks Stacks 執行，包括設定和組態，從 建立的映像建立的執行個體第一次啟動`Sysprep`需要更多時間。完成在 Amazon EC2 主控台中建立自訂 Windows AMI 的步驟。

**使用 Sysprep 建立自訂 Windows AMI**

1. 在 Amazon EC2 主控台中，選擇**啟動執行個體**。

1. 尋找 **Microsoft Windows Server 2022 Base**，然後選擇**選取**。

1. 選擇您想要的執行個體類型，然後選擇 **Configure Instance Details (設定執行個體詳細資訊)**。變更 AMI 的組態 (包括機器名稱、儲存體和安全群組設定)。選擇**啟動**。

1. 執行個體啟動程序完成之後，請取得密碼，然後在 Windows **Remote Desktop Connection (遠端桌面連線)** 視窗中連線至執行個體。

1. 在 Windows **Start (開始)** 畫面上，選擇 **Start (開始)**，然後開始輸入 **ec2configservice**，直到結果顯示 **EC2ConfigServiceSettings** 主控台為止。開啟 主控台。

1. 在**一般**索引標籤上，確定已填入**啟用 UserData 執行**核取方塊 （雖然 不需要此選項`Sysprep`，但 OpsWorks Stacks 必須安裝其代理程式）。清除 **Set the computer name of the instance... (設定執行個體的電腦名稱...)** 選項的核取方塊，因為此選項可能會導致 OpsWorks Stacks 的重新啟動迴圈。

1. 在**映像**索引標籤上，將**管理員密碼**設定為 **Random**，以允許 Amazon EC2 自動產生您可以使用 SSH 金鑰擷取的密碼，或**指定 **以指定您自己的密碼。 會`Sysprep`儲存此設定。如果您指定自己的密碼，請將密碼存放在便利的位置。建議您不要選擇 **Keep Existing (保留現有)**。

1. 選擇 **Apply (套用)**，然後選擇 **Shutdown with Sysprep (使用 Sysprep 關機)**。出現確認提示時，選擇 **Yes (是)**。

1. 執行個體停止後，在 Amazon EC2 主控台中，在執行個體清單中的**執行個體**上按一下滑鼠右鍵，選擇**映像**，然後選擇**建立映像**。

1. 在 **Create Image (建立映像)** 頁面上，提供映像的名稱和描述，並指定磁碟區組態。完成之後，請選擇 **Create Image (建立映像)**。

1. 開啟 **Images (映像)** 頁面，並等待映像從 **pending (待定)** 階段變更為 **available (可用)**。新的 AMI 現在已可使用。

#### 不使用 `Sysprep` 建立自訂 Windows AMI
<a name="w2ab1c14c55c15c13c21c20c11"></a>

完成在 Amazon EC2 主控台中建立自訂 Windows AMI 的步驟。

**不使用 Sysprep 建立自訂 Windows AMI**

1. 在 Amazon EC2 主控台中，選擇**啟動執行個體**。

1. 尋找 **Microsoft Windows Server 2022 Base**，然後選擇**選取**。

1. 選擇您想要的執行個體類型，然後選擇 **Configure Instance Details (設定執行個體詳細資訊)**。變更 AMI 的組態 (包括機器名稱、儲存體和安全群組設定)。選擇**啟動**。

1. 執行個體啟動程序完成之後，請取得密碼，然後在 Windows **Remote Desktop Connection (遠端桌面連線)** 視窗中連線至執行個體。

1. 在執行個體上，開啟 `C:\Program Files\Amazon\Ec2ConfigService\Settings\config.xml`，並變更下列兩種設定，然後儲存和關閉檔案：
   + `Ec2SetPassword` 至 `Enabled`
   + `Ec2HandleUserData` 至 `Enabled`

1. 中斷與**遠端桌面**工作階段的連線，並返回 Amazon EC2 主控台。

1. 在 **Instances (執行個體)** 清單中，停止執行個體。

1. 在執行個體停止後，在 Amazon EC2 主控台中，以滑鼠右鍵按一下執行個體清單中**的執行個體**，選擇**映像**，然後選擇**建立映像**。

1. 在 **Create Image (建立映像)** 頁面上，提供映像的名稱和描述，並指定磁碟區組態。完成之後，請選擇 **Create Image (建立映像)**。

1. 開啟 **Images (映像)** 頁面，並等待映像從 **pending (待定)** 階段變更為 **available (可用)**。新的 AMI 現在已可使用。

#### 使用自訂 Windows AMI 新增執行個體
<a name="w2ab1c14c55c15c13c21c20c13"></a>

在您的映像變更為 **available (可用)** 狀態之後，即可建立根據自訂 Windows AMI 的新執行個體。當您從 **Operating system (作業系統)** 清單中選擇 **Use custom Windows AMI (使用自訂 Windows AMI)** 時， OpsWorks Stacks 會顯示自訂 AMI 清單。

**新增根據自訂 Windows AMI 的執行個體**

1. 當您的新 AMI 可用時，請前往 OpsWorks Stacks 主控台，開啟 Windows 堆疊的**執行個體**頁面，然後選擇頁面底部附近的 **\$1 執行個體**來新增執行個體。

1. 在 **New (新增)** 標籤上，選擇 **Advanced (進階)**。

1. 在 **Operating system (作業系統)** 下拉式清單上，選擇 **Use custom Windows AMI (使用自訂 Windows AMI)**。

1. 在 **Custom AMI (自訂 AMI)** 下拉式清單上，選擇您所建立的 AMI，然後選擇 **Add Instance (新增執行個體)**。

您現在可以啟動並執行執行個體。