

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

# 使用 建立 AWS OpsWorks for Chef Automate 伺服器 CloudFormation
<a name="opscm-create-server-cfn"></a>

**重要**  
AWS OpsWorks for Chef Automate 已於 2024 年 5 月 5 日結束生命週期，並已針對新客戶和現有客戶停用。我們建議現有客戶遷移至 Chef SaaS 或替代解決方案。如果您有任何問題，可以在 [AWS re：Post](https://repost.aws/) 或透過 [AWS Premium Support](https://aws.amazon.com/support) 聯絡 AWS 支援 團隊。

AWS OpsWorks for Chef Automate 可讓您在 中執行 [Chef Automate](https://www.chef.io/automate/) 伺服器 AWS。只要約 15 分鐘就能佈建 Chef Automate 伺服器。

從 2021 年 5 月 3 日開始， 會在 中 AWS OpsWorks for Chef Automate 存放一些 Chef Automate 伺服器屬性 AWS Secrets Manager。如需詳細資訊，請參閱[與 整合 AWS Secrets Manager](data-protection.md#data-protection-secrets-manager)。

下列逐步解說可協助您在 中建立堆疊， AWS OpsWorks for Chef Automate 以在 中建立伺服器 CloudFormation。

**Topics**
+ [先決條件](#opscm-create-server-cfn-prereqs)
+ [在 CloudFormation中建立 Chef Automate 伺服器](#opscm-create-server-cfn-main)

## 先決條件
<a name="opscm-create-server-cfn-prereqs"></a>

在建立新的 Chef Automate 伺服器之前，請先建立 AWS OpsWorks for Chef Automate 之外的資源，即您將用來存取和管理 Chef 伺服器的資源。如需詳細資訊，請參閱本指南中「入門」一節的[先決條件](gettingstarted-opscm.md#gettingstarted-opscm-prereq)。

檢閱 *CloudFormation 使用者指南*範本參考的 [OpsWorks-CM 區段](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworkscm-server.html)，以了解您用來建立伺服器的 CloudFormation 範本中支援和必要的值。

如果您要建立使用自訂網域的伺服器，您需要自訂網域、憑證和私密金鑰。您必須為 CloudFormation 範本中這三個參數指定值。如需 `CustomDomain`、 `CustomCertificate`和 `CustomPrivateKey` 參數需求的詳細資訊，請參閱《*OpsWorks CM API 參考*》中的 [CreateServer](https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_CreateServer.html)。

建立 `CHEF_AUTOMATE_ADMIN_PASSWORD` 引擎屬性值的密碼值。密碼長度最少 八個字元，最多 32 個字元。密碼可包含字母、數字和特殊字元 `(!/@#$%^+=_)`。密碼必須包含至少一個小寫字母、一個大寫字母、一個數字和一個特殊字元。您可以在 CloudFormation 範本中指定此密碼，或在建立堆疊時將此密碼指定為 `CHEF_AUTOMATE_ADMIN_PASSWORD` 參數的值。

開始建立 Chef Automate 伺服器之前，請先產生 base64 編碼的 RSA 金鑰對 CloudFormation。金鑰對的公有金鑰，就是 `CHEF_AUTOMATE_PIVOTAL_KEY` 的值，Chef 特定 [EngineAttributes](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworkscm-server.html#cfn-opsworkscm-server-engineattributes)，來源是 [CreateServer](https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_CreateServer.html) API。此金鑰在 CloudFormation 主控台中以**參數**的值提供，或在 的 **create-stack**命令中提供 AWS CLI。若要產生這個金鑰，我們建議採用以下方法。
+ 在 Linux 電腦上，您可以執行以下 [OpenSSL](https://www.openssl.org/) 命令來產生此金鑰。

  ```
  openssl genrsa -out pivotal_key_file_name.pem 2048
  ```

  然後，將金鑰對的 RSA 公有金鑰部分匯出到檔案。公有金鑰會變成 `CHEF_AUTOMATE_PIVOTAL_KEY` 的值。

  ```
  openssl rsa -in pivotal_key_file_name.pem -pubout -out public.pem -outform PEM
  ```
+ 您可以在以 Windows 為基礎的電腦，使用 PuTTYgen 公用程式來產生 base64 編碼的 RSA 金鑰對。如需詳細資訊，請參閱 SSH.com 上的 [PuTTYgen – 適用於 Windows 上 PuTTY 的金鑰產生器](https://www.ssh.com/ssh/putty/windows/puttygen)。

## 在 CloudFormation中建立 Chef Automate 伺服器
<a name="opscm-create-server-cfn-main"></a>

本節說明如何使用 CloudFormation 範本來建置建立 AWS OpsWorks for Chef Automate 伺服器的堆疊。您可以使用 CloudFormation 主控台或 來執行此操作 AWS CLI。您可以使用[範例 CloudFormation 範本](samples/opsworkscm-server.zip)來建置 AWS OpsWorks for Chef Automate 伺服器堆疊。請務必使用您自己的伺服器名稱、IAM 角色、執行個體描述檔、伺服器描述、備份保留計數、維護選項和選用標籤來更新範例範本。如果您的伺服器將使用自訂網域，您必須在 CloudFormation 範本中指定 `CustomDomain`、 `CustomCertificate`和 `CustomPrivateKey` 參數的值。您可以在 CloudFormation 範本中指定 `CHEF_AUTOMATE_ADMIN_PASSWORD`和`CHEF_AUTOMATE_PIVOTAL_KEY`引擎屬性及其值，或僅提供屬性，然後在 CloudFormation **建立堆疊**精靈或**create-stack**命令中指定屬性的值。如需有關這些屬性的詳細資訊，請參閱本指南「入門」一節的[在 中建立 Chef Automate 伺服器 AWS 管理主控台](gettingstarted-opscm-create.md#gettingstarted-opscm-create-console)。

**Topics**
+ [使用 CloudFormation (主控台) 建立 Chef Automate 伺服器](#opscm-create-server-cfn-console)
+ [使用 CloudFormation (CLI) 建立 Chef Automate 伺服器](#opscm-create-server-cfn-cli)

### 使用 CloudFormation (主控台) 建立 Chef Automate 伺服器
<a name="opscm-create-server-cfn-console"></a>

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在 CloudFormation 首頁上，選擇**建立堆疊**。

1. 在**先決條件 - 準備範本**中，如果您使用[範例 CloudFormation 範本](samples/opsworkscm-server.zip)，請選擇**範本已就緒**。

1. 在 **Specify template (指定範本)** 中，請選擇範本的來源。在此演練中，選擇**上傳範本檔案**，然後上傳建立 Chef Automate 伺服器的 CloudFormation 範本。瀏覽您的範本檔案，然後選擇 **Next (下一步)**。

    CloudFormation 範本可以是 YAML 或 JSON 格式。[範例 CloudFormation 範本](samples/opsworkscm-server.zip)可供您使用；請務必將範例值取代為您自己的值。您可以使用 CloudFormation 範本設計工具來建立新的範本或驗證現有的範本。如需如何執行此操作的詳細資訊，請參閱*CloudFormation 《 使用者指南*》中的[CloudFormation 設計工具界面概觀](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer-overview.html)。  
![\[CloudFormation 建立堆疊頁面\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/images/cfn_select_template.png)

1. 在 **Specify stack details (指定堆疊詳細資訊)** 頁面上，輸入堆疊的名稱。這個名稱不會與您的伺服器名稱相同，這只是堆疊名稱。在 **Parameters (參數)** 區域中，貼上您已在 [先決條件](#opscm-create-server-cfn-prereqs) 中建立的值。在 **Password (密碼)** 中輸入密碼。

   在 **PivotalKey** 中貼入 RSA 金鑰檔案的內容。在 CloudFormation 主控台中，您必須在樞紐索引鍵值的每一行結尾新增換行 (**\$1n**) 字元，如下列螢幕擷取畫面所示。選擇**下一步**。  
![\[在 CloudFormation 中指定堆疊詳細資訊頁面\]](http://docs.aws.amazon.com/zh_tw/opsworks/latest/userguide/images/cfn_template_params_opscm.png)

1. 在**設定堆疊選項**頁面上，您可以將標籤新增至使用堆疊建立的伺服器，如果您尚未指定要在範本中使用的 IAM 角色，請選擇用於建立資源的 IAM 角色。指定選項完成後，選擇 **Next (下一步)**。如需復原觸發等進階選項的詳細資訊，請參閱*CloudFormation 《 使用者指南*》中的[設定 CloudFormation 堆疊選項](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html)。

1. 在 **Review (檢閱)** 頁面上，檢視您的選擇。當您準備好建立伺服器堆疊時，請選擇 **Create stack (建立堆疊)**。

   當您等待 CloudFormation 建立堆疊時，請檢視堆疊建立狀態。如果堆疊建立失敗，則檢閱顯示在主控台中的錯誤訊息，以協助您解決問題。如需 CloudFormation 針對堆疊中的錯誤進行故障診斷的詳細資訊，請參閱*CloudFormation 《 使用者指南*》中的[故障診斷錯誤](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors)。

   伺服器建立完成之後， AWS OpsWorks for Chef Automate 首頁即會顯示您的 Chef Automate 伺服器，且狀態為 **online (線上)**。從伺服器的「屬性」頁面，產生新的 Starter Kit (入門套件) 和 Chef Automate 儀表板登入資料。伺服器上線之後，伺服器的網域會提供 Chef Automate 儀表板，URL 格式如下：`https://your_server_name-randomID.region.opsworks-cm.io`。
**注意**  
如果您為伺服器指定自訂網域、憑證和私有金鑰，請在企業的 DNS 管理工具中建立 CNAME 項目，將您的自訂網域映射到為伺服器 AWS OpsWorks for Chef Automate 自動產生的端點。您無法管理伺服器或連接到伺服器的 Chef Automate 儀表板，直到您將產生的端點對應到您的自訂網域值。  
若要取得產生的端點值，請在伺服器上線後執行下列 AWS CLI 命令：  

   ```
   aws opsworks describe-servers --server-name server_name
   ```

### 使用 CloudFormation (CLI) 建立 Chef Automate 伺服器
<a name="opscm-create-server-cfn-cli"></a>

如果您的本機電腦尚未執行 AWS CLI， AWS CLI 請依照《*AWS Command Line Interface 使用者指南*》中的[安裝說明](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)下載並安裝 。本節不會說明您可以搭配 **create-stack** 命令使用的所有參數。如需 **create-stack** 參數的詳細資訊，請參閱「[ 參考」**create-stack**](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html)中的 *AWS CLI *。

1. 請務必完成[先決條件](gettingstarted-opscm.md#gettingstarted-opscm-prereq)建立伺服器的 AWS OpsWorks for Chef Automate 。

1. 建立服務角色和執行個體描述檔。

   尋找並複製您帳戶中服務角色ARNs。

   ```
   aws iam list-roles --path-prefix "/service-role/" --no-paginate
   ```

   在 `list-roles` 命令的結果中，尋找類似如下的服務角色和執行個體描述檔項目。記下服務角色和執行個體描述檔的 ARNs，並將其新增至您用來建立伺服器堆疊的 CloudFormation 範本。

1. 再次執行 **create-stack**命令來建立 AWS OpsWorks for Chef Automate 伺服器。
   + 將 *stack\$1name* 更換成您的堆疊名稱。這是 CloudFormation 堆疊的名稱，而不是您的 Chef Automate 伺服器。Chef Automate 伺服器名稱是 CloudFormation 範本`ServerName`中的 值。
   + 將 *template* 更換成您的範本檔案路徑，並視情況，將副檔名*yaml 或 json* 改成 `.yaml` 或 `.json`。
   + `--parameters` 的值會對應到 [EngineAttributes](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-opsworkscm-server.html#cfn-opsworkscm-server-engineattributes)，其來源是 [CreateServer](https://docs.aws.amazon.com/opsworks-cm/latest/APIReference/API_CreateServer.html) API。處理 Chef 時，用於建立伺服器、由使用者提供的引擎屬性是 `CHEF_AUTOMATE_PIVOTAL_KEY`，即您依據[先決條件](#opscm-create-server-cfn-prereqs)所述步驟，使用公用程式產生的 base64 編碼 RSA 公用金鑰；以及 `CHEF_AUTOMATE_ADMIN_PASSWORD`，即您所建立，長度介於 8 和 32 個字元的密碼。如需 `CHEF_AUTOMATE_ADMIN_PASSWORD` 的詳細資訊，請參閱 [使用 建立 Chef Automate 伺服器 AWS CLI](gettingstarted-opscm-create.md#gettingstarted-opscm-create-cli)。您可以依照範例所示，提供指向包含關鍵金鑰之 PEM 檔案的指標，做為 `PivotalKey` 參數的值。如果您的範本中`CHEF_AUTOMATE_PIVOTAL_KEY`未指定 `CHEF_AUTOMATE_ADMIN_PASSWORD`和 的值，您必須在 AWS CLI 命令中提供這些值。

   ```
   aws cloudformation create-stack --stack-name stack_name --template-body file://template.yaml or json --parameters ParameterKey=PivotalKey,ParameterValue="base64_encoded_RSA_public_key_value"
   ```

   下面範例包括了 `CHEF_AUTOMATE_ADMIN_PASSWORD` 和 `CHEF_AUTOMATE_PIVOTAL_KEY` 屬性的示範值。如果您未在 CloudFormation 範本中指定這些屬性的值，請執行類似的命令。

   ```
   aws cloudformation create-stack --stack-name "OpsWorksCMChefServerStack" --template-body file://opsworkscm-server.yaml --parameters ParameterKey=PivotalKey,ParameterValue="$(openssl rsa -in "pivotalKey.pem" -pubout)" ParameterKey=Password,ParameterValue="SuPer\$ecret890"
   ```

1. 堆疊建立完成後，請在 AWS OpsWorks for Chef Automate 主控台中開啟新伺服器的屬性頁面，並下載入門套件。下載新的入門套件會重設 Chef Automate 儀表板管理員密碼。

1. 如果您的伺服器將使用自訂網域、憑證和私有金鑰，請遵循在 `knife.rb`中設定的步驟[(選用) 設定 `knife` 以使用自訂網域](opscm-starterkit.md#opscm-starterkit-customdomain)，然後前往步驟 7。

1. 若要在新伺服器上使用 `knife` 命令，請更新 Chef `knife.rb` 組態檔案設定。入門套件中隨附一個範例 `knife.rb` 檔案。下列範例顯示如何在不使用自訂網域的伺服器上設定 `knife.rb`。如果您正在使用自訂網域，請參閱 [(選用) 設定 `knife` 以使用自訂網域](opscm-starterkit.md#opscm-starterkit-customdomain) 以取得 `knife` 組態指示。
   + 將 *ENDPOINT* 更換成伺服器的端點值。這是堆疊建立操作輸出的一部分。您可以執行以下命令來取得端點。

     ```
     aws cloudformation describe-stacks --stack-name stack_name 
     ```
   + 將`client_key`組態中的 *key\$1pair\$1file.pem* 取代為 PEM 檔案名稱，其中包含`CHEF_AUTOMATE_PIVOTAL_KEY`您用來建立伺服器的 。

     ```
     base_dir = File.join(File.dirname(File.expand_path(__FILE__)), '..')
     
     log_level                :info
     log_location             STDOUT
     node_name                'pivotal'
     client_key               File.join(base_dir, '.chef', 'key_pair_file.pem')
     syntax_check_cache_path  File.join(base_dir, '.chef', 'syntax_check_cache')
     cookbook_path            [File.join(base_dir, 'cookbooks')]
     
     chef_server_url          'ENDPOINT/organizations/default'
     ssl_ca_file              File.join(base_dir, '.chef', 'ca_certs', 'opsworks-cm-ca-2020-root.pem')
     trusted_certs_dir        File.join(base_dir, '.chef', 'ca_certs')
     ```

1. 完成伺服器建立程序之後，繼續[使用入門套件設定 Chef 伺服器](opscm-starterkit.md)。如果堆疊建立失敗，則檢閱顯示在主控台中的錯誤訊息，以協助您解決問題。如需 CloudFormation 針對堆疊中的錯誤進行疑難排解的詳細資訊，請參閱*CloudFormation 《 使用者指南*》中的[對錯誤進行疑難排解](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors)。