

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

# 建立 Amazon ECS 線性部署
<a name="deploy-linear-service"></a>

透過使用 Amazon ECS 線性部署，您可以在指定的時間間隔內逐步以相同的增量轉移流量。這會在部署程序的每個步驟提供受控驗證。

## 先決條件
<a name="deploy-linear-service-prerequisites"></a>

開始線性部署之前，請執行下列操作。

1. 設定相應的許可。
   + 如需有關 Elastic Load Balancing 許可的資訊，請參閱[負載平衡器的 Amazon ECS 基礎結構 IAM 角色](AmazonECSInfrastructureRolePolicyForLoadBalancers.md)。
   + 如需有關 Lambda 許可的資訊，請參閱 [Amazon ECS 藍/綠部署中 Lambda 函式所需的許可](blue-green-permissions.md)。

1. Amazon ECS 線性部署需要您的服務使用下列其中一項功能：設定適當的資源。
   + Application Load Balancer – 如需詳細資訊，請參閱[藍/綠、線性和金絲雀部署的 Application Load Balancer 資源](alb-resources-for-blue-green.md)。
   + Network Load Balancer – 如需詳細資訊，請參閱[Amazon ECS 藍/綠、線性和 Canary 部署的 Network Load Balancer 資源](nlb-resources-for-blue-green.md)。
   + Service Connect – 如需詳細資訊，請參閱[Amazon ECS 藍色/綠色、線性和 Canary 部署的 Service Connect 資源](service-connect-blue-green.md)。

## 程序
<a name="deploy-linear-service-procedure"></a>

您可以使用 主控台或 AWS CLI 來建立 Amazon ECS 線性部署服務。

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

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 決定您要從中啟動服務的資源。    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/deploy-linear-service.html)

   **建立服務**頁面隨即顯示。

1. 在**服務詳細資訊**下，執行下列動作：

   1. 在**任務定義系列**欄位中選擇要使用的任務定義。然後，在**任務定義修訂版**欄位中輸入要使用的修訂版。

   1. 針對 **Service name** (服務名稱)，輸入服務的名稱。

1. 若要在現有叢集中執行服務，請在**現有叢集**欄位中選擇叢集。若要在新叢集中執行服務，請選擇**建立叢集** 

1. 選擇任務在叢集基礎結構中的分佈方式。在**運算組態**下選擇選項。    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/deploy-linear-service.html)

1. 在**部署組態**下，執行下列動作：

   1. 在**服務類型**欄位中選擇**複本**。

   1. 針對 **Desired tasks** (所需任務)，輸入要在服務中啟動並維護的任務數。

   1. 若要讓 Amazon ECS 監控可用區域間的任務分佈，並在出現不平衡時重新分佈，請在**可用區域服務重新平衡**下，選取**可用區域服務重新平衡**。

   1. 在**運作狀態檢查寬限期**欄位中，輸入時間 (以秒為單位)，這是服務排程器在任務首次啟動後忽略運作狀態不良的 Elastic Load Balancing、VPC Lattice 與容器運作狀態檢查的時間。如果您未指定運作狀態檢查寬限期間值，則會使用預設值 0。

1. 在**部署組態**下，設定線性部署設定：

   1. 針對**部署策略**，選擇**線性**。

   1. 對於**流量增量百分比**，輸入以每個增量移動的流量百分比 （例如，以 10% 增量移動流量的 10%)。

   1. 針對**增量之間的間隔**，輸入每個流量轉移增量之間等待的時間，以分鐘為單位。

   1. 針對**製作時間**，輸入藍色和綠色服務修訂在終止藍色修訂之前，在最終流量轉移後同時執行的分鐘數。

   1. (選用) 執行要在部署的特定階段執行的 Lambda 函式。在**部署 lifecycle hook** 下，選取要執行 lifecycle hook 的階段。

      若要新增 lifecycle hook：

      1. 選擇**新增**。

      1. 在 **Lambda 函式**欄位中，輸入函式名稱或 ARN。

      1. 在**角色**欄位中，選取具有調用 Lambda 函式許可的 IAM 角色。

      1. 在**生命週期階段**欄位中，選取 Lambda 函式應執行的階段。

1. 若要設定 Amazon ECS 如何偵測並處理部署失敗，請展開 **Deployment failure detection** (部署失敗偵測)，然後選擇您的選項。

   1. 若要在任務無法啟動時停止部署，請選取 **Use the Amazon ECS deployment circuit breaker** (使用 Amazon ECS 部署斷路器)。

      在部署斷路器將部署設定為失敗狀態時，若要讓軟體自動將部署復原至上次完成的部署狀態，請選取**失敗時復原**。

   1. 若要根據應用程式指標停止部署，請選取**使用 CloudWatch 警示**。然後，從**CloudWatch 警示名稱**欄位中選擇警示。要建立新的警示，請前往 CloudWatch 主控台。

      在 CloudWatch 警示將部署設定為失敗狀態時，若要讓軟體自動將部署復原至上次完成的部署狀態，請選取**失敗時復原**。

1. (選用) 若要使用 Service Connect 與服務互連，請展開 **Service Connect** 區段，然後指定下列項目：

   1.  選取**開啟 Service Connect**。

   1. 在 **Service Connect configuration** (Service Connect 組態) 下，指定用戶端模式。
      + 如果服務執行的網路用戶端應用程式只需要連線至命名空間中的其他服務，請選擇**僅用戶端**。
      + 如果服務執行的是網路或 Web 服務應用程式，且需要為此服務提供端點，並連線至命名空間中的其他服務，請選擇 **Client and server** (用戶端和伺服器)。

   1. 若要使用非預設叢集命名空間的命名空間，請在 **Namespace** (命名空間) 欄位中選擇服務命名空間。這可以是 AWS 區域 在您的相同 中分別建立的命名空間， AWS 帳戶 或是使用 AWS Resource Access Manager () 與您的帳戶共用的相同區域中的命名空間AWS RAM。如需共用 AWS Cloud Map 命名空間的詳細資訊，請參閱《 *AWS Cloud Map 開發人員指南*》中的[跨帳戶 AWS Cloud Map 命名空間共用](https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html)。

   1. （選用） 設定線性部署的測試流量標頭規則。在**測試流量路由**下，指定下列項目：

      1. 選取**啟用測試流量標頭規則**，以在測試期間將特定請求路由至綠色服務修訂版。

      1. 在**標頭比對規則**欄位中，設定路由測試流量的條件：
         + **標頭名稱**：輸入要比對的 HTTP 標頭名稱 (例如 `X-Test-Version` 或 `User-Agent`)。
         + **比對類型**：選擇比對條件：
           + **完全相符**：標頭值與指定值完全相符的路由請求
           + **標頭存在**：包含指定標頭的路由請求，無論其值為何
           + **模式比對**：標頭值與指定模式相符的路由請求
         + **標頭值** (如果使用「完全相符」或「模式相符」)：輸入要比對的值或模式。

         您可以新增多個標頭比對規則來建立複雜的路由邏輯。符合任何已設定規則的請求將路由至綠色服務修訂版進行測試。

      1. 選擇**新增標頭規則**以設定其他標頭比對條件。
**注意**  
測試流量標頭規則讓您可以在完成完整部署之前，使用受控流量驗證新功能。這允許您使用特定請求 (例如來自內部測試工具或 Beta 版使用者的請求) 測試綠色服務修訂版，同時維持流向藍色服務修訂版的正常流量流程。

   1. (選用) 指定日誌組態。選取**使用日誌收集**。預設選項會將容器日誌傳送至 CloudWatch 日誌。其他日誌驅動程式選項是使用 AWS FireLens 設定。如需詳細資訊，請參閱[將 Amazon ECS 日誌傳送至 AWS 服務或 AWS Partner](using_firelens.md)。

      下方更詳細地描述了每個容器日誌目的地。
      + **Amazon CloudWatch** – 將任務設定為將容器日誌傳送至 CloudWatch Logs。系統會提供預設日誌驅動程式選項，用來代表您建立 CloudWatch 日誌群組。若要指定不同的日誌群組名稱，請變更驅動程式選項值。
      + **Amazon Data Firehose** – 將任務設定為將容器日誌傳送至 Firehose。系統會提供預設日誌驅動程式選項，用來將日誌傳送至 Firehose 傳送串流。若要指定不同的交付串流名稱，請變更驅動程式選項值。
      + **Amazon Kinesis Data Streams** – 將任務設定為將容器日誌傳送至 Amazon Kinesis Data Streams。系統會提供預設日誌驅動程式選項，用來將日誌傳送至 Kinesis Data Streams 串流。若要指定不同的串流名稱，請變更驅動程式選項值。
      + **Amazon OpenSearch Service** – 將任務設定為將容器日誌傳送至 OpenSearch Service 網域。務必提供日誌驅動程式選項。
      + **Amazon S3**：將任務設定為將容器日誌傳送至 Amazon S3 儲存貯體。系統會提供預設日誌驅動程式選項，但您必須指定有效的 Amazon S3 儲存貯體名稱。

1. （選用） 設定**線性部署的負載平衡**。    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/AmazonECS/latest/developerguide/deploy-linear-service.html)

1. (選用) 為協助識別您的服務和任務，請展開 **Tags** (標籤) 區段，然後設定標籤。

   若要讓 Amazon ECS 使用叢集名稱和任務定義標籤，自動標記所有新啟動的任務，請選取 **Turn on Amazon ECS managed tags** (開啟 Amazon ECS 受管標籤)，然後針對 **Propagate tags from** (傳播標籤來源)，選取 **Task definitions** (任務定義)。

   若要讓 Amazon ECS 使用叢集名稱和服務標籤，自動標記所有新啟動的任務，請選取 **Turn on Amazon ECS managed tags** (開啟 Amazon ECS 受管標籤)，然後針對 **Propagate tags from** (傳播標籤來源)，選取 **Service** (服務)。

   新增或移除標籤。
   + [新增標籤] 選擇**新增標籤**，然後執行下列操作︰
     + 在**索引鍵**中，輸入索引鍵名稱。
     + 在**值**中，進入索引鍵值。
   + [移除標籤] 在標籤旁邊，選擇**移除標籤**。

1. 選擇**建立**。

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

1. 建立名為 `linear-service-definition.json` 且具有下列內容的檔案。

   將 {{user-input}} 取代為實際值。

   ```
   {
     "serviceName": "myLinearService",
     "cluster": "arn:aws:ecs:us-west-2:123456789012:cluster/sample-fargate-cluster",
     "taskDefinition": "sample-fargate:1",
     "desiredCount": 5,
     "launchType": "FARGATE",
     "networkConfiguration": {
       "awsvpcConfiguration": {
         "subnets": [
           "subnet-09ce6e74c116a2299",
           "subnet-00bb3bd7a73526788",
           "subnet-0048a611aaec65477"
         ],
         "securityGroups": [
           "sg-09d45005497daa123"
         ],
         "assignPublicIp": "ENABLED"
       }
     },
     "deploymentController": {
       "type": "ECS"
     },
     "deploymentConfiguration": {
       "strategy": "LINEAR",
       "maximumPercent": 200,
       "minimumHealthyPercent": 100,
       "linearConfiguration": {
         "stepPercentage": 10.0,
         "stepBakeTimeInMinutes":6
       },
       "bakeTimeInMinutes": 10,
       "alarms": {
         "alarmNames": [
           "myAlarm"
         ],
         "rollback": true,
         "enable": true
       }
     },
     "loadBalancers": [
       {
         "targetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/blue-target-group/54402ff563af1197",
         "containerName": "fargate-app",
         "containerPort": 80,
         "advancedConfiguration": {
           "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/green-target-group/cad10a56f5843199",
           "productionListenerRule": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-linear-demo/32e0e4f946c3c05b/9cfa8c482e204f7d/831dbaf72edb911",
           "roleArn": "arn:aws:iam::123456789012:role/LoadBalancerManagementforECS"
         }
       }
     ]
   }
   ```

1. 執行 `create-service`。

   ```
   aws ecs create-service --cli-input-json file://linear-service-definition.json
   ```

------

## 後續步驟
<a name="deploy-linear-service-next-steps"></a>
+ 更新服務以開始部署。如需詳細資訊，請參閱[更新 Amazon ECS 服務](update-service-console-v2.md)。
+ 監控部署程序，以確保其遵循線性模式：
  + 綠色服務修訂版已建立並向上擴展
  + 流量會以指定的間隔遞增轉移
  + 每個增量在下一個輪班之前等待指定的間隔
  + 轉移所有流量後，製作時間開始
  + 封裝時間過期後，藍色修訂版會終止