

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

# 教學課程：部署 "hello， world！" 應用程式搭配 CodeDeploy (Windows Server)
<a name="tutorials-windows"></a>

在本教學課程中，您將單一網頁部署至執行網際網路資訊服務 (IIS) 做為其 Web 伺服器的單一 Windows Server Amazon EC2 執行個體。此網頁會顯示簡單的「Hello， World！」 訊息。

不是您想找的內容嗎？
+ 若要改為練習部署到 Amazon Linux 或 Red Hat Enterprise Linux (RHEL) Amazon EC2 執行個體，請參閱 [教學課程：將 WordPress 部署到 Amazon EC2 執行個體 (Amazon Linux 或 Red Hat Enterprise Linux 和 Linux、macOS 或 Unix)](tutorials-wordpress.md)。
+ 若要練習改為部署至現場部署執行個體，請參閱[教學課程：使用 CodeDeploy 將應用程式部署至內部部署執行個體 (Windows Server、Ubuntu Server 或 Red Hat Enterprise Linux)](tutorials-on-premises-instance.md)。

本教學課程的步驟會從 Windows 觀點進行說明。雖然您可以在執行 Linux、macOS 或 Unix 的本機電腦上完成大部分的步驟，但您必須調整涵蓋 Windows 型目錄路徑的步驟，例如 `c:\temp`。此外，如果您想要連線至 Amazon EC2 執行個體，您需要可透過遠端桌面通訊協定 (RDP) 連線至執行 Windows Server 的 Amazon EC2 執行個體的用戶端應用程式。(根據預設，Windows 包含 RDP 連線用戶端應用程式)。

開始本教學課程之前，您必須完成 中的先決條件[CodeDeploy 入門](getting-started-codedeploy.md)，包括設定使用者、安裝或升級 AWS CLI，以及建立 IAM 執行個體描述檔和服務角色。

**Topics**
+ [步驟 1：啟動 Windows Server Amazon EC2 執行個體](tutorials-windows-launch-instance.md)
+ [步驟 2：設定您的來源內容以部署至 Windows Server Amazon EC2 執行個體](tutorials-windows-configure-content.md)
+ [步驟 3：上傳您的「hello， world！」 應用程式至 Amazon S3](tutorials-windows-upload-application.md)
+ [步驟 4：部署您的 Hello World 應用程式](tutorials-windows-deploy-application.md)
+ [步驟 5：更新並重新部署您的「hello， world！」 應用程式](tutorials-windows-update-and-redeploy-application.md)
+ [步驟 6：清除您的 "hello， world！" 應用程式和相關資源](tutorials-windows-clean-up.md)

# 步驟 1：啟動 Windows Server Amazon EC2 執行個體
<a name="tutorials-windows-launch-instance"></a>

若要使用 CodeDeploy 部署 Hello World 應用程式，您需要執行 Windows Server 的 Amazon EC2 執行個體。

請遵循中的說明進行[為 CodeDeploy 建立 Amazon EC2 執行個體](instances-ec2-create.md) 當您準備好將 Amazon EC2 執行個體標籤指派給執行個體時，請務必指定 的標籤索引鍵**Name**和 的標籤值**CodeDeployDemo**。(如果您指定不同的標籤鍵或標籤值，[步驟 4：部署您的 Hello World 應用程式](tutorials-windows-deploy-application.md)中的說明可能會產生非預期的結果)。

啟動 Amazon EC2 執行個體後，請返回此頁面並繼續下一節。請不要繼續進行[使用 CodeDeploy 建立應用程式](applications-create.md)做為下一步。

## 連線至 Amazon EC2 執行個體
<a name="tutorials-windows-launch-instance-connect"></a>

啟動 Amazon EC2 執行個體之後，請依照這些指示來練習與其連線。

**注意**  
在這些說明中，假設您正在執行 Windows 和 Windows 桌面連線用戶端應用程式。如需詳細資訊，請參閱[使用 RDP 連線至 Windows 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html)。您可能需要針對其他作業系統或其他 RDP 連線用戶端應用程式調整這些說明。

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

1. 在導覽窗格的 **Instances (執行個體)** 下方，選擇 **Instances (執行個體)**。

1. 瀏覽並選擇清單中的 Windows Server 執行個體。

1. 選擇**連線**。

1. 選擇 **Get Password (取得密碼)**，然後選擇 **Choose File (選擇檔案)**。

1. 瀏覽並選擇與 Windows Server Amazon EC2 執行個體相關聯的 Amazon EC2 執行個體金鑰對檔案，然後選擇**開啟**。

1. 選擇 **Decrypt Password** (解密密碼)。請記下顯示的密碼。您在步驟 10 會用到。

1. 選擇 **Download Remote Desktop File (下載遠端桌面檔案)**，然後開啟檔案。

1. 即使無法識別遠端連線發佈者的情況下，如果系統依然提示您連線，請繼續。

1. 輸入您於步驟 7 記下的密碼，然後繼續。(如果您的 RDP 連線用戶端應用程式提示您輸入使用者名稱，請輸入 **Administrator**)。

1. 在即使無法驗證遠端電腦身分的情況下，如果系統依然提示您連線，請繼續。

1. 連線之後，即會顯示執行 Windows Server 的 Amazon EC2 執行個體桌面。

1. 您現在可以中斷與 Amazon EC2 執行個體的連線。
**警告**  
請不要停止或終止執行個體。否則，CodeDeploy 無法部署至其中。

## 新增允許 HTTP 流量至 Windows Server Amazon EC2 執行個體的傳入規則
<a name="tutorials-windows-launch-instance-add-inbound-rule"></a>

下一步確認您的 Amazon EC2 執行個體具有開放的 HTTP 連接埠，因此您可以在瀏覽器中查看 Windows Server Amazon EC2 執行個體上部署的網頁。

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

1. 選擇**執行個體**，然後選擇您的執行個體。

1. 在**描述**索引標籤**的安全群組**下，選擇**檢視傳入規則**。

   您應該會在安全群組中看到規則清單，如下所示：

   ```
   Security Groups associated with i-1234567890abcdef0
    Ports     Protocol     Source     launch-wizard-N
    22        tcp          0.0.0.0/0          ✔
   ```

1.  在**安全群組**下，選擇 Amazon EC2 執行個體的安全群組。其可能被命名為 **launch-wizard-*N***。名稱中的 ***N*** 是一個您的執行個體建立時指派到安全群組的數字。

    選擇 **Inbound (傳入)** 標籤。如果執行個體的安全群組設定正確，您應該會看到具有下列值的規則：
   + **類型**：HTTP
   + **Protocol (通訊協定)**：TCP
   + **Port Range (連接埠範圍)**：80
   + **來源**：0.0.0.0/0

1.  如果您沒有看到具有這些值的規則，請使用將[規則新增至安全群組](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html#adding-security-group-rule)中的程序，將規則新增至新的安全規則。

# 步驟 2：設定您的來源內容以部署至 Windows Server Amazon EC2 執行個體
<a name="tutorials-windows-configure-content"></a>

現在是時候設定應用程式的來源內容，讓您可以部署到 Amazon EC2 執行個體。在本教學課程中，您將部署單一網頁至執行 Windows Server 的 Amazon EC2 執行個體，該執行個體將執行網際網路資訊服務 (IIS) 做為其 Web 伺服器。此網頁會顯示簡單的「Hello， World！」 訊息。

**Topics**
+ [建立網頁](#tutorials-windows-configure-content-download-code)
+ [建立指令碼以執行您的應用程式](#tutorials-windows-configure-content-create-scripts)
+ [新增應用程式規格檔案](#tutorials-windows-configure-content-add-appspec-file)

## 建立網頁
<a name="tutorials-windows-configure-content-download-code"></a>

1. 在 `c:\temp` 資料夾中建立名為 `HelloWorldApp` 的子目錄 (子資料夾)，然後切換至該資料夾。

   ```
   mkdir c:\temp\HelloWorldApp
   cd c:\temp\HelloWorldApp
   ```
**注意**  
您不需要使用 `c:\temp` 位置或 `HelloWorldApp` 子資料夾名稱。如果您使用不同的位置或子資料夾名稱，請務必在本教學中予以使用。

1. 使用文字編輯器，在資料夾內建立檔案。將檔案命名為 `index.html`。

   ```
   notepad index.html
   ```

1. 將下列 HTML 程式碼新增至檔案，然後儲存檔案。

   ```
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
   <html>
   <head>
     <title>Hello, World!</title>
     <style>
       body {
         color: #ffffff;
         background-color: #0188cc;
         font-family: Arial, sans-serif;  
         font-size:14px;
       }
     </style>
   </head>
   <body>
     <div align="center"><h1>Hello, World!</h1></div>
     <div align="center"><h2>You have successfully deployed an application using CodeDeploy</h2></div>
     <div align="center">
       <p>What to do next? Take a look through the <a href="https://aws.amazon.com/codedeploy">CodeDeploy Documentation</a>.</p>
     </div>
   </body>
   </html>
   ```

## 建立指令碼以執行您的應用程式
<a name="tutorials-windows-configure-content-create-scripts"></a>

接著，您將建立 CodeDeploy 用來在目標 Amazon EC2 執行個體上設定 Web 伺服器的指令碼。

1. 在 `index.html` 檔案儲存所在的相同子資料夾中，使用文字編輯器來建立另一個檔案。將檔案命名為 `before-install.bat`。

   ```
   notepad before-install.bat
   ```

1. 將下列批次指令碼程式碼新增至檔案，然後儲存檔案。

   ```
   REM Install Internet Information Server (IIS).
   c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -Command Import-Module -Name ServerManager
   c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -Command Install-WindowsFeature Web-Server
   ```

## 新增應用程式規格檔案
<a name="tutorials-windows-configure-content-add-appspec-file"></a>

接下來，除了網頁和批次指令碼檔案之外，您還會新增應用程式規格檔案 (AppSpec 檔案）。AppSpec 檔案是 CodeDeploy [http://www.yaml.org](http://www.yaml.org)用來：
+ 將應用程式修訂中的來源檔案，映射至執行個體上的目標。
+ 指定要在部署期間於執行個體上執行的指令碼。

AppSpec 檔案必須命名為 `appspec.yml`。它必須放置在應用程式來源碼的根資料夾中。

1. 在 `index.html` 和 `before-install.bat` 檔案儲存所在的相同子資料夾中，使用文字編輯器來建立另一個檔案。將檔案命名為 `appspec.yml`。

   ```
   notepad appspec.yml
   ```

1. 將下列 YAML 程式碼新增至檔案，然後儲存檔案。

   ```
   version: 0.0
   os: windows
   files:
     - source: \index.html
       destination: c:\inetpub\wwwroot
   hooks:
     BeforeInstall:
       - location: \before-install.bat
         timeout: 900
   ```

CodeDeploy 將使用此 AppSpec 檔案，將應用程式原始碼根資料夾中`index.html`的檔案複製到目標 Amazon EC2 執行個體上的 `c:\inetpub\wwwroot` 資料夾。在部署期間，CodeDeploy 會在**BeforeInstall**部署生命週期事件期間，在目標 Amazon EC2 執行個體上執行`before-install.bat`批次指令碼。如果此指令碼需要超過 900 秒 (15 分鐘） 才能執行，CodeDeploy 會停止部署，並將 Amazon EC2 執行個體的部署標記為失敗。

如需這些設定的詳細資訊，請參閱[CodeDeploy AppSpec 檔案參考](reference-appspec-file.md)。

**重要**  
此檔案中每個項目之間的空格位置和數目十分重要。如果間距不正確，CodeDeploy 將引發可能難以偵錯的錯誤。如需詳細資訊，請參閱[AppSpec 檔案間距](reference-appspec-file.md#reference-appspec-file-spacing)。

# 步驟 3：上傳您的「hello， world！」 應用程式至 Amazon S3
<a name="tutorials-windows-upload-application"></a>

現在，您將準備來源內容並將其上傳至 CodeDeploy 可以從中部署該內容的位置。下列指示說明如何佈建 Amazon S3 儲存貯體、準備儲存貯體的應用程式修訂版檔案、綁定修訂版的檔案，然後將修訂版推送至儲存貯體。

**注意**  
雖然本教學課程未涵蓋，但您可以使用 CodeDeploy 將應用程式從 GitHub 儲存庫部署到執行個體。如需詳細資訊，請參閱[將 CodeDeploy 與 GitHub 整合](integrations-partners-github.md)。

**Topics**
+ [佈建 Amazon S3 儲存貯體](#tutorials-windows-upload-application-create-s3-bucket)
+ [準備儲存貯體的應用程式檔案](#tutorials-windows-upload-application-prepare-application-files)
+ [將應用程式的檔案綁定到單一封存檔案中，並推送封存檔案](#tutorials-windows-upload-application-bundle-and-push-archive)

## 佈建 Amazon S3 儲存貯體
<a name="tutorials-windows-upload-application-create-s3-bucket"></a>

在 Amazon S3 中建立儲存容器或*儲存貯*體，或使用現有的儲存貯體。請確定您可以將修訂版上傳至儲存貯體，而且部署中使用的 Amazon EC2 執行個體可以從儲存貯體下載修訂版。

您可以使用 AWS CLI、Amazon S3 主控台或 Amazon S3 APIs 來建立 Amazon S3 儲存貯體。建立儲存貯體之後，請務必將存取許可授予儲存貯體和 CodeDeploy 使用者。

**注意**  
所有 AWS 帳戶的 Amazon S3 儲存貯體名稱必須是唯一的。如果您無法使用 **amzn-s3-demo-bucket**，請嘗試不同的儲存貯體名稱 (例如後接破折號和您的縮寫或其他唯一識別符的 **amzn-s3-demo-bucket**)。然後，請務必將在本教學中看到的所有 **amzn-s3-demo-bucket** 都替代為您的儲存貯體名稱。  
Amazon S3 儲存貯體必須在啟動目標 Amazon EC2 執行個體的相同 AWS 區域中建立。例如，如果您在美國東部 （維吉尼亞北部） 區域建立儲存貯體，則必須在美國東部 （維吉尼亞北部） 區域啟動目標 Amazon EC2 執行個體。

**Topics**
+ [建立 Amazon S3 儲存貯體 (CLI)](#tutorials-windows-upload-application-create-s3-bucket-cli)
+ [建立 Amazon S3 儲存貯體 （主控台）](#tutorials-windows-upload-application-create-s3-bucket-console)
+ [將許可授予 Amazon S3 儲存貯體和 AWS 您的帳戶](#tutorials-windows-upload-application-create-s3-bucket-grant-permission)

### 建立 Amazon S3 儲存貯體 (CLI)
<a name="tutorials-windows-upload-application-create-s3-bucket-cli"></a>

呼叫 **mb**命令來建立名為 的 Amazon S3 儲存貯體**amzn-s3-demo-bucket**：

```
aws s3 mb s3://amzn-s3-demo-bucket --region region
```

### 建立 Amazon S3 儲存貯體 （主控台）
<a name="tutorials-windows-upload-application-create-s3-bucket-console"></a>

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 在 Amazon S3 主控台中，選擇**建立儲存貯**體。

1. 在 **Bucket name (儲存貯體名稱)** 方塊中，輸入儲存貯體的名稱。

1. 在 **Region (區域)** 清單中，選擇目標區域，然後選擇 **Create (建立)**。

### 將許可授予 Amazon S3 儲存貯體和 AWS 您的帳戶
<a name="tutorials-windows-upload-application-create-s3-bucket-grant-permission"></a>

您必須具有上傳到 Amazon S3 儲存貯體的許可。您可以透過 Amazon S3 儲存貯體政策指定這些許可。例如，在下列 Amazon S3 儲存貯體政策中，使用萬用字元 (\$1) `111122223333` 可讓 AWS 帳戶將檔案上傳至名為 的 Amazon S3 儲存貯體中的任何目錄`amzn-s3-demo-bucket`：

```
{
    "Statement": [
        {
            "Action": [
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "111122223333"
                ]
            }
        }
    ]
}
```

若要檢視 AWS 您的帳戶 ID，請參閱[尋找 AWS 您的帳戶 ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId)。

現在是驗證 Amazon S3 儲存貯體是否允許從每個參與的 Amazon EC2 執行個體下載請求的好時機。您可以透過 Amazon S3 儲存貯體政策指定此項目。例如，在下列 Amazon S3 儲存貯體政策中，使用萬用字元 (\$1) 允許任何具有連接 IAM 執行個體描述檔的 Amazon EC2 執行個體`arn:aws:iam::444455556666:role/CodeDeployDemo`，其中包含 ARN，從名為 的 Amazon S3 儲存貯體中的任何目錄下載檔案`amzn-s3-demo-bucket`：

```
{
    "Statement": [
        {
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::444455556666:role/CodeDeployDemo"
                ]
            }
        }
    ]
}
```

如需有關如何產生和連接 Amazon S3 儲存貯體政策的資訊，請參閱[儲存貯體政策範例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)。

您在 中建立的 CodeDeploy 管理使用者[步驟 1：設定](getting-started-setting-up.md)也必須具有將修訂上傳至 Amazon S3 儲存貯體的許可。其中一種指定方式是透過您新增至使用者許可集或 IAM 角色 （您允許使用者擔任） 的 IAM 政策。下列 IAM 政策允許使用者在名為 的 Amazon S3 儲存貯體中的任何位置上傳修訂`amzn-s3-demo-bucket`：

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

****  

```
{
  "Version":"2012-10-17",		 	 	   
  "Statement":[
    {
      "Effect":"Allow",
      "Action":["s3:PutObject"],
      "Resource":"arn:aws:s3:::amzn-s3-demo-bucket/*"
    }
  ]
}
```

------

如需如何建立 IAM 政策的資訊，請參閱《[IAM 使用者指南》中的建立 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。 **如需將政策新增至許可集的資訊，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[建立許可集](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocreatepermissionset.html)。

## 準備儲存貯體的應用程式檔案
<a name="tutorials-windows-upload-application-prepare-application-files"></a>

請確定網頁、AppSpec 檔案和指令碼在您的開發機器上組織如下：

```
c:\
  |-- temp\
        |--HelloWorldApp\
             |-- appspec.yml
             |-- before-install.bat
             |-- index.html
```

## 將應用程式的檔案綁定到單一封存檔案中，並推送封存檔案
<a name="tutorials-windows-upload-application-bundle-and-push-archive"></a>

將檔案綁定到封存檔案 (稱為應用程式「修訂版本」**)。

**注意**  
可能會向您收取下列作業的費用：在儲存貯體中存放物件，以及將應用程式修訂傳入和傳出儲存貯體。如需詳細資訊，請參閱 [Simple Storage Service (Amazon S3) 定價](https://aws.amazon.com/s3/pricing/)。

1. 在開發電腦上，切換至檔案存放所在的資料夾：

   ```
   cd c:\temp\HelloWorldApp
   ```
**注意**  
如果您未切換至此資料夾，將會在目前的資料夾開始檔案綁定。例如，如果您的目前資料夾是 `c:\temp`，而不是 `c:\temp\HelloWorldApp`，將會開始綁定 `c:\temp` 資料夾中的檔案和子資料夾，而此資料夾可能不只包含 `HelloWorldApp` 子資料夾。

1. 呼叫 **create-application**命令，向 CodeDeploy **HelloWorld\$1App** 註冊名為 的新應用程式：

   ```
   aws deploy create-application --application-name HelloWorld_App
   ```

1. 呼叫 CodeDeploy [推送](https://docs.aws.amazon.com/cli/latest/reference/deploy/push.html)命令，將檔案綁定在一起、上傳修訂至 Amazon S3，以及向 CodeDeploy 註冊有關上傳修訂的資訊，全部都在一個動作中。

   ```
   aws deploy push --application-name HelloWorld_App --s3-location s3://amzn-s3-demo-bucket/HelloWorld_App.zip --ignore-hidden-files
   ```

   此命令會將目前目錄中的檔案 （不含任何隱藏檔案） 封裝至名為 的單一封存檔案`HelloWorld_App.zip`、上傳修訂至 儲存**amzn-s3-demo-bucket**貯體，以及向 CodeDeploy 註冊有關上傳修訂的資訊。

# 步驟 4：部署您的 Hello World 應用程式
<a name="tutorials-windows-deploy-application"></a>

現在您已部署上傳到 Amazon S3 的範例 Hello World 應用程式修訂版。您可以使用 AWS CLI 或 CodeDeploy 主控台來部署修訂並監控部署進度。成功部署應用程式修訂版之後，您要檢查結果。

**Topics**
+ [使用 CodeDeploy 部署您的應用程式修訂版](#tutorials-windows-deploy-application-create-deployment)
+ [監控您的部署並進行疑難排解](#tutorials-windows-deploy-application-monitor)
+ [驗證您的部署](#tutorials-windows-deploy-application-verify)

## 使用 CodeDeploy 部署您的應用程式修訂版
<a name="tutorials-windows-deploy-application-create-deployment"></a>

 您可以使用 CLI 或主控台部署您的應用程式。

**Topics**
+ [部署應用程式修訂 (CLI)](#tutorials-windows-deploy-application-create-deployment-cli)
+ [部署應用程式修訂 (主控台)](#tutorials-windows-deploy-application-create-deployment-console)

### 部署應用程式修訂 (CLI)
<a name="tutorials-windows-deploy-application-create-deployment-cli"></a>

1. 首先，部署需要部署群組。不過，在您建立部署群組之前，需要服務角色 ARN。服務角色是 IAM 角色，提供服務代表您採取行動的許可。在此情況下，服務角色會授予 CodeDeploy 存取 Amazon EC2 執行個體的許可，以展開 （讀取） 其 Amazon EC2 執行個體標籤。

   您應該已經遵循[建立服務角色 (CLI)](getting-started-create-service-role.md#getting-started-create-service-role-cli) 中的說明，來建立服務角色。若要取得服務角色的 ARN，請參閱[取得服務角色 ARN (CLI)](getting-started-create-service-role.md#getting-started-get-service-role-cli)。

1. 現在您已擁有 ARN，請呼叫 **create-deployment-group**命令來建立名為 的部署群組**HelloWorld\$1DepGroup**，此群組與名為 的應用程式相關聯**HelloWorld\$1App**，並使用名為 的 Amazon EC2 執行個體標籤**CodeDeployDemo**和名為 的部署組態**CodeDeployDefault.OneAtATime**，以及服務角色 ARN：

   ```
   aws deploy create-deployment-group --application-name HelloWorld_App --deployment-group-name HelloWorld_DepGroup --deployment-config-name CodeDeployDefault.OneAtATime --ec2-tag-filters Key=Name,Value=CodeDeployDemo,Type=KEY_AND_VALUE --service-role-arn serviceRoleARN
   ```
**注意**  
[create-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html) 命令支援建立觸發，導致將部署和執行個體中指定事件的相關 Amazon SNS 通知傳送給主題訂閱者。命令也支援自動轉返部署和設定警示的選項，以在符合 Amazon CloudWatch 警示中的監控閾值時停止部署。本教學課程不包含這些動作的命令。

1. 建立部署之前，部署群組中的執行個體必須安裝 CodeDeploy 代理程式。您可以使用 AWS Systems Manager 與下列命令，從命令列安裝代理程式：

   ```
   aws ssm create-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo --parameters action=Install,name=AWSCodeDeployAgent --schedule-expression "cron(0 2 ? * SUN *)" 
   ```

   此命令會在 Systems Manager State Manager 中建立關聯，以安裝 CodeDeploy 代理程式，然後嘗試在每週日上午 2：00 進行更新。如需 CodeDeploy 代理程式的詳細資訊，請參閱[使用 CodeDeploy 代理程式](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent.html)。如需 Systems Manager 的詳細資訊，請參閱[什麼是 AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) 。

1. 現在，請在名為 **amzn-s3-demo-bucket** 的儲存貯體中使用名為 **HelloWorld\$1App.zip** 的應用程式修訂，呼叫 **create-deployment** 命令來建立與名為 **HelloWorld\$1App** 之應用程式、名為 **CodeDeployDefault.OneAtATime** 之部署組態和名為 **HelloWorld\$1DepGroup** 之部署群組建立關聯的部署：

   ```
   aws deploy create-deployment --application-name HelloWorld_App --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name HelloWorld_DepGroup --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=HelloWorld_App.zip
   ```

### 部署應用程式修訂 (主控台)
<a name="tutorials-windows-deploy-application-create-deployment-console"></a>

1. 在使用 CodeDeploy 主控台部署應用程式修訂版之前，您需要服務角色 ARN。服務角色是 IAM 角色，提供服務代表您採取行動的許可。在此情況下，服務角色會授予 CodeDeploy 存取 Amazon EC2 執行個體的許可，以展開 （讀取） 其 Amazon EC2 執行個體標籤。

   您應該已經遵循[建立服務角色 （主控台）](getting-started-create-service-role.md#getting-started-create-service-role-console) 中的說明，來建立服務角色。若要取得服務角色的 ARN，請參閱[取得服務角色 ARN （主控台）](getting-started-create-service-role.md#getting-started-get-service-role-console)。

1. 現在您已擁有 ARN，您可以使用 CodeDeploy 主控台來部署應用程式修訂版。

   登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) 開啟 CodeDeploy 主控台。
**注意**  
使用您在 中設定的相同使用者登入[CodeDeploy 入門](getting-started-codedeploy.md)。

1. 在導覽窗格中，展開**部署**，然後選擇**應用程式**。

1. 選擇 **HelloWorld\$1App**。

1. 在 **Deployment groups (部署群組)** 標籤中，選擇 **Create deployment group (建立部署群組)**。

1. 在 **Deployment group name (部署群組名稱)** 中，輸入 **HelloWorld\$1DepGroup**。

1. 在 **Service Role (服務角色)** 中，選擇服務角色的名稱。

1. 在 **Deployment type (部署類型)** 中，選擇 **In-place (就地)**。

1. 在**環境組態**中，選取 **Amazon EC2 執行個體**。

1. 在**具有 的客服人員組態 AWS Systems Manager**中，保留預設值。

1. 在 **Key (金鑰)** 中，輸入 **Name**。

1. 在 **Value (值)** 中輸入 **CodeDeployDemo**。

1. 在**部署組態**中，選擇 **CodeDeployDefault.OneAtATime**。

1. 在 **Load Balancer (負載平衡器)** 中，清除 **Enable load balancing (啟用負載平衡)**。

1. 選擇 **Create deployment group (建立部署群組)**。

1. 選擇 **Create deployment (建立部署)**。

1. 在 **Deployment group (部署群組)** 中，選擇 **HelloWorld\$1DepGroup**

1. 在**修訂類型**中，選擇**我的應用程式存放在 Amazon S3** 中，然後在**修訂位置**中輸入您先前上傳至 Amazon S3 的範例 Hello World 應用程式修訂的位置。取得位置：

   1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

   1. 在儲存貯體清單中，選擇 **amzn-s3-demo-bucket** （或您上傳應用程式修訂版的儲存貯體名稱）。

   1. 在物件清單中，選擇 **HelloWorld\$1App.zip**。

   1. 在 **Overview (概觀) **標籤上，選擇 **Copy path (複製路徑)**。

   1. 返回 CodeDeploy 主控台，並在**修訂位置**中貼上**連結**欄位值。

1. 針對 **Revision file type (修訂檔案類型)**，選擇 **.zip**。

1. (選用) 在 **Deployment description (部署描述)** 中輸入註解。

1. 選擇 **Create deployment (建立部署)**。新建立部署的相關資訊會顯示在 **Deployments (部署)** 頁面上。

## 監控您的部署並進行疑難排解
<a name="tutorials-windows-deploy-application-monitor"></a>

使用 AWS CLI 或 主控台來監控和疑難排解您的部署。

**Topics**
+ [監控部署並進行疑難排解 (CLI)](#tutorials-windows-deploy-application-monitor-cli)
+ [監控和故障診斷部署 (主控台)](#tutorials-windows-deploy-application-monitor-console)

### 監控部署並進行疑難排解 (CLI)
<a name="tutorials-windows-deploy-application-monitor-cli"></a>

1. 針對名為 **HelloWorld\$1App** 的應用程式和名為 **HelloWorld\$1DepGroup** 的部署群組呼叫 **list-deployments** 命令，來取得部署 ID：

   ```
   aws deploy list-deployments --application-name HelloWorld_App --deployment-group-name HelloWorld_DepGroup --query "deployments" --output text
   ```

1. 使用部署 ID，呼叫 **get-deployment** 命令：

   ```
   aws deploy get-deployment --deployment-id deploymentID --query "deploymentInfo.status" --output text
   ```

1. 此命令傳回部署的整體狀態。如果成功，值為 `Succeeded`。

   如果整體狀態為 `Failed`，您可以呼叫 [list-deployment-instances](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-instances.html) 和 [get-deployment-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/get-deployment-instance.html) 等命令進行故障診斷。如需其他故障診斷選項，請參閱[分析日誌檔案以調查執行個體的部署失敗](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures)。

### 監控和故障診斷部署 (主控台)
<a name="tutorials-windows-deploy-application-monitor-console"></a>

在 CodeDeploy 主控台的**部署**頁面上，您可以在狀態欄中監控部署**的狀態**。

若要取得部署的詳細資訊，特別是在 **Status (狀態)** 欄位中，有任何數值不是 **Succeeded (成功)** 的情況下，則可執行以下動作：

1. 在 **Deployments (部署)** 資料表中，選擇部署 ID。在部署失敗之後，說明失敗原因的訊息會顯示在部署的詳細資訊頁面中。

1. 。 隨即顯示部署執行個體的詳細資訊。部署失敗後，您可能可以判斷部署失敗的 Amazon EC2 執行個體和步驟。

1. 您可以使用[使用 CodeDeploy 檢視執行個體詳細資訊](instances-view-details.md)中所述的這類技術，藉此執行其他疑難排解。您也可以分析 Amazon EC2 執行個體上的部署日誌檔案。如需詳細資訊，請參閱[分析日誌檔案以調查執行個體的部署失敗](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures)。

## 驗證您的部署
<a name="tutorials-windows-deploy-application-verify"></a>

在您的部署成功之後，請驗證安裝運作中。使用 Amazon EC2 執行個體的公有 DNS 地址，在 Web 瀏覽器中檢視網頁。（若要取得公有 DNS 值，請在 Amazon EC2 主控台中選擇 Amazon EC2 執行個體，然後在**描述**索引標籤上尋找**公有 DNS** 中的值。)

例如，如果 Amazon EC2 執行個體的公有 DNS 地址為 **ec2-01-234-567-890.compute-1.amazonaws.com**，您可以使用下列 URL：

```
http://ec2-01-234-567-890.compute-1.amazonaws.com
```

如果成功，您應該會看到 Hello World 網頁。

# 步驟 5：更新並重新部署您的「hello， world！」 應用程式
<a name="tutorials-windows-update-and-redeploy-application"></a>

現在您已成功部署應用程式修訂版，請在開發機器上更新網頁的程式碼，然後使用 CodeDeploy 重新部署網站。重新部署後，您應該能夠查看 Amazon EC2 執行個體上的變更。

**Topics**
+ [修改網頁](#tutorials-windows-update-and-redeploy-application-modify-code)
+ [重新部署網站](#tutorials-windows-update-and-redeploy-application-deploy-updates)

## 修改網頁
<a name="tutorials-windows-update-and-redeploy-application-modify-code"></a>

1. 移至 `c:\temp\HelloWorldApp` 子資料夾，然後使用文字編輯器修改 `index.html` 檔案：

   ```
   cd c:\temp\HelloWorldApp
   notepad index.html
   ```

1. 修訂 `index.html` 檔案的內容，變更網頁的背景顏色和一些文字，然後儲存檔案。

   ```
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
   <html>
   <head>
     <title>Hello Again, World!</title>
     <style>
       body {
         color: #ffffff;
         background-color: #66cc00;
         font-family: Arial, sans-serif;  
         font-size:14px;
       }
     </style>
   </head>
   <body>
     <div align="center"><h1>Hello Again, World!</h1></div>
     <div align="center"><h2>You have successfully deployed a revision of an application using CodeDeploy</h2></div>
     <div align="center">
       <p>What to do next? Take a look through the <a href="https://aws.amazon.com/codedeploy">CodeDeploy Documentation</a>.</p>
     </div>
   </body>
   </html>
   ```

## 重新部署網站
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates"></a>

現在您已修改程式碼，請使用 Amazon S3 和 CodeDeploy 重新部署網頁。

綁定變更並將其上傳至 Amazon S3，如 中所述[將應用程式的檔案綁定到單一封存檔案中，並推送封存檔案](tutorials-windows-upload-application.md#tutorials-windows-upload-application-bundle-and-push-archive)。(當您遵循這些說明時，不需要建立新的應用程式)。如以前一樣將相同的金鑰給予修訂 (**HelloWorld\$1App.zip**)。將其上傳至您先前建立的相同 Amazon S3 儲存貯體 （例如 **amzn-s3-demo-bucket**)。

使用 AWS CLI 或 CodeDeploy 主控台重新部署網站。

**Topics**
+ [重新部署網站 (CLI)](#tutorials-windows-update-and-redeploy-application-deploy-updates-cli)
+ [重新部署網站 (主控台)](#tutorials-windows-update-and-redeploy-application-deploy-updates-console)

### 重新部署網站 (CLI)
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates-cli"></a>

再次於名為 **amzn-s3-demo-bucket** 的儲存貯體中使用名為 **HelloWorld\$1App** 的應用程式、名為 **CodeDeployDefault.OneAtATime** 的部署組態、名為 **HelloWorld\$1DepGroup** 的部署群組和名為 **HelloWorld\$1App.zip** 的修訂，根據上傳的修訂以呼叫 **create-deployment** 命令來建立部署：

```
 aws deploy create-deployment --application-name HelloWorld_App --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name HelloWorld_DepGroup --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=HelloWorld_App.zip
```

您可以檢查新部署的狀態，如[監控您的部署並進行疑難排解](tutorials-windows-deploy-application.md#tutorials-windows-deploy-application-monitor)中所述。

當 CodeDeploy 重新部署網站時，請在 Web 瀏覽器中重新瀏覽網站，以確認網頁上的背景顏色和文字已變更。(您可能需要重新整理瀏覽器)。如果背景顏色和文字已變更，恭喜您！您已修改並重新部署該網站！

### 重新部署網站 (主控台)
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates-console"></a>

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) 開啟 CodeDeploy 主控台。
**注意**  
使用您在 中設定的相同使用者登入[CodeDeploy 入門](getting-started-codedeploy.md)。

1. 在導覽窗格上，選擇 **Applications (應用程式)**。

1. 在 **Applications (應用程式)** 清單中，選擇 **HelloWorld\$1App**。

1. 在 **Deployments (部署)** 標籤中，選擇 **Create deployment (建立部署)**。

   1. 在 **Deployment group (部署群組)** 清單中，選擇 **HelloWorld\$1DepGroup**。

   1.  在**修訂位置**中，輸入修訂的 Amazon S3 連結。

      尋找連結值：

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

         瀏覽並開啟 **amzn-s3-demo-bucket**，然後在 Amazon S3 主控台中選擇您的修訂**HelloWorld\$1App.zip**版本 。

      1. 如果在 Amazon S3 主控台中看不到**屬性**窗格，請選擇**屬性**按鈕。

      1. 在 **Properties (屬性)** 窗格中，複製 **Link (連結)** 欄位的值。

      1. 返回 CodeDeploy 主控台，然後將連結貼到**修訂位置**。

   1. 在 **Revision file type (修訂檔案類型)** 中，如果顯示的訊息指出偵測不到檔案類型，請選擇 **.zip**。

   1. 將 **Deployment description (部署描述)** 空白。

   1. 展開**部署群組覆寫** 在**部署組態**清單中，選擇 **CodeDeployDefault.OneAtATime**，然後選擇**建立部署**。

      接著，您便能檢查部署的狀態，如[監控您的部署並進行疑難排解](tutorials-windows-deploy-application.md#tutorials-windows-deploy-application-monitor)中所述。

      當 CodeDeploy 重新部署網站時，請在 Web 瀏覽器中重新瀏覽網站，以確認網頁上的背景顏色和文字已變更。(您可能需要重新整理瀏覽器)。如果背景顏色和文字已變更，恭喜您！您已修改並重新部署該網站！

# 步驟 6：清除您的 "hello， world！" 應用程式和相關資源
<a name="tutorials-windows-clean-up"></a>

您現在已成功更新「Hello， World！」 程式碼並重新部署網站。為了避免完成本教學課程所建立的資源持續發生費用，您應該刪除：
+ 任何 CloudFormation 堆疊 （或終止任何 Amazon EC2 執行個體，如果您在 外部建立這些執行個體 CloudFormation)。
+ 任何 Amazon S3 儲存貯體。
+ CodeDeploy 中的`HelloWorld_App`應用程式。
+ CodeDeploy 代理程式 AWS Systems Manager 的狀態管理員關聯。

您可以使用 AWS CLI、 CloudFormation、Amazon S3、Amazon EC2 和 CodeDeploy 主控台或 AWS APIs來執行清除。

**Topics**
+ [若要使用清除資源(CLI)](#tutorials-windows-clean-up-cli)
+ [清除資源 (主控台)](#tutorials-windows-clean-up-console)
+ [後續步驟？](#tutorials-windows-clean-up-whats-next)

## 若要使用清除資源(CLI)
<a name="tutorials-windows-clean-up-cli"></a>

1. 如果您將 CloudFormation 堆疊用於本教學課程，請針對名為 的堆疊呼叫 **delete-stack**命令來刪除堆疊**CodeDeployDemoStack**。這會終止所有隨附的 Amazon EC2 執行個體，並刪除所有最初由堆疊建立的隨附 IAM 角色。

   ```
   aws cloudformation delete-stack --stack-name CodeDeployDemoStack
   ```

1. 若要刪除 Amazon S3 儲存貯體，請針對名為 的儲存貯體使用 **--recursive** 切換來呼叫 **rm**命令**amzn-s3-demo-bucket**。這會刪除儲存貯體以及儲存貯體中的所有物件。

   ```
   aws s3 rm s3://amzn-s3-demo-bucket --recursive --region region
   ```

1. 若要從 CodeDeploy 刪除`HelloWorld_App`應用程式，請呼叫 **delete-application**命令。這會刪除應用程式的所有相關聯部署群組記錄和部署記錄。

   ```
   aws deploy delete-application --application-name HelloWorld_App
   ```

1. 若要刪除 Systems Manager 狀態管理員關聯，請呼叫 **delete-association**命令。

   ```
   aws ssm delete-association --assocation-id association-id
   ```

   您可以呼叫 **describe-association**命令來取得 *association-id*。

   ```
   aws ssm describe-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo
   ```

1. 如果您未在本教學課程中使用 CloudFormation 堆疊，請呼叫 **terminate-instances**命令來終止您手動建立的 Amazon EC2 執行個體。提供要終止的 Amazon EC2 執行個體 ID。

   ```
   aws ec2 terminate-instances --instance-ids instanceId
   ```

## 清除資源 (主控台)
<a name="tutorials-windows-clean-up-console"></a>

如果您將我們的 CloudFormation 範本用於本教學課程，請刪除相關聯的 CloudFormation 堆疊。

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

1. 在搜尋方塊中，輸入 CloudFormation 堆疊名稱 （例如，**CodeDeployDemoStack**)。

1. 選取堆疊名稱旁的方塊。

1. 在 **Actions (動作)** 選單中，選擇 **Delete Stack (刪除堆疊)**。這會刪除堆疊、終止所有隨附的 Amazon EC2 執行個體，以及刪除所有隨附的 IAM 角色。

若要終止您在 CloudFormation 堆疊外部建立的 Amazon EC2 執行個體：

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

1. 在 **Instances (執行個體)** 區域中，選擇 **Instances (執行個體)**。

1. 在搜尋方塊中，輸入您要終止的 Amazon EC2 執行個體名稱，然後按 **Enter** 鍵。

1. 選擇 Amazon EC2 執行個體。

1. 選擇 **Actions (動作)**，指向 **Instance State (執行個體狀態)**，然後選擇 **Terminate (終止)**。出現提示時，選擇 **Yes, Terminate (是，終止)**。針對任何其他 Amazon EC2 執行個體重複這些步驟。

若要刪除 Amazon S3 儲存貯體：

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

1. 在儲存貯體清單中，瀏覽並選擇 Amazon S3 儲存貯體的名稱 （例如 **amzn-s3-demo-bucket**)。

1. 您必須先刪除其內容，才能刪除儲存貯體。選擇儲存貯體中的所有檔案，例如 **HelloWorld\$1App.zip**。在**操作**功能表中，選擇**刪除**。出現提示要您確認刪除時，選擇 **OK (確定)**。

1. 儲存貯體清空之後，您即可刪除儲存貯體。在儲存貯體清單中，選擇儲存貯體的資料列 (但不是儲存貯體名稱)。選擇 **Delete bucket (刪除儲存貯體)**，然後在出現確認提示時，選擇 **OK (確定)**。

若要從 CodeDeploy 刪除`HelloWorld_App`應用程式：

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) 開啟 CodeDeploy 主控台。
**注意**  
使用您在 中設定的相同使用者登入[CodeDeploy 入門](getting-started-codedeploy.md)。

1. 在導覽窗格中，展開**部署**，然後選擇**應用程式**。

   

1. 選擇 **`HelloWorld_App`**。

1. 選擇**刪除應用程式**。

1. 當出現提示時，輸入 **Delete**，然後選擇 **Delete (刪除)**。

若要刪除 Systems Manager 狀態管理員關聯：

1. 在 https：//https://console.aws.amazon.com/systems-manager 開啟 AWS Systems Manager 主控台。

1. 在導覽窗格中，選擇 **State Manager (狀態管理員)**。

1. 選擇您建立的關聯，然後選擇 **Delete (刪除)**。

## 後續步驟？
<a name="tutorials-windows-clean-up-whats-next"></a>

如果您已抵達這裡，表示您已成功使用 CodeDeploy 完成部署。恭喜您！