AWS CodeDeploy 常見問答集

一般問題

AWS CodeDeploy 是可自動化任何執行個體程式碼部署的服務,包括 Amazon EC2 執行個體與執行現場部署的執行個體。AWS CodeDeploy 可讓您輕鬆快速地發佈新功能、協助您避免在部署時停機,並處理複雜的應用程式更新。您可以使用 AWS CodeDeploy 進行自動化部署,這樣就不需要採用容易出錯的手動操作,而且服務可隨您的基礎設施擴展,讓您能輕鬆地部署到一個或甚至數千個執行個體。

AWS CodeDeploy 專為需要將應用程式部署到任何執行個體的開發人員和管理員所設計,包括 Amazon EC2 執行個體與執行現場部署的執行個體。它不但有彈性,而且可供任何想在執行個體上更新軟體或執行指令碼的人使用。

AWS CodeDeploy 可用於部署任何類型的應用程式。要使用 AWS CodeDeploy,您需指定要複製的檔案以及要在部署期間在每個執行個體上執行的指令碼。AWS CodeDeploy 適用於各種程式設計語言和架構,因此您可以將指令碼用於任何自訂部署邏輯。

AWS CodeDeploy 支援多種類型的作業系統。AWS CodeDeploy 提供已在 Amazon Linux、Red Hat Enterprise Linux、Ubuntu Server 和 Microsoft Windows Server 上測試過的代理程式。如果您想使用其他作業系統,AWS CodeDeploy 代理程式可在此以開放原始碼軟體形式提供。有關作業系統支援的更多資訊,請參閱 AWS CodeDeploy 文件

是。AWS CodeDeploy 可與各種設定管理系統、持續整合和部署系統,以及原始程式碼控制系統搭配使用。如需更多資訊,請參閱產品整合頁面。

AWS CodeDeploy 是一項建構區塊服務,重點在於協助開發人員部署和更新任何執行個體上的軟體,包括 Amazon EC2 執行個體與執行現場部署的執行個體。AWS Elastic Beanstalk 和 AWS OpsWorks 是端對端應用程式管理解決方案。

是。AWS CodeDeploy 支援任何執行個體,只要執行個體可以安裝 CodeDeploy 代理程式並連接到 AWS 公用端點

概念

應用程式是部署到一組執行個體的軟體和設定集合。通常,群組中的執行個體會執行相同的軟體。例如,如果您有一個大型分散式系統,Web 層可能由一個應用程式組成,資料層由另一個應用程式組成。

修訂版是可部署內容的特定版本,如原始程式碼、建構後成品、網頁、可執行檔和部署指令碼以及 AppSpec 檔案。AWS CodeDeploy 代理程式可從 GitHub 或 Amazon S3 儲存貯體存取修訂版。

部署群組是 AWS CodeDeploy 實體,用於將 EC2 執行個體或 AWS Lambda 函數分組在 CodeDeploy 部署中。如果是 EC2 部署,部署群組是一組執行個體,與您作為部署目標的應用程式相關。您可以指定標籤、Auto Scaling 群組名稱或同時指定兩者,將執行個體新增到部署群組。在 AWS Lambda 部署中,部署群組可為群組未來的無伺服器 Lambda 部署定義一組 AWS CodeDeploy 組態,像是警示和復原。

您可以為一個應用程式定義多個部署群組,如模擬和生產。有關標籤的更多資訊,請參閱在主控台中使用 Amazon EC2 標籤。有關部署到 Auto Scaling 群組的更多資訊,請參閱 Auto Scaling 整合

部署組態可指定進行部署的行為,包括如何透過部署群組處理部署失敗。您可以使用部署設定執行多執行個體部署群組的無停機時間部署。例如,如果您的應用程式需要部署群組中至少有 50% 的執行個體啟動並提供流量,您可以在部署設定中指定,使部署不會導致停機。如果沒有與部署或部署群組相關聯的部署設定,則根據預設,AWS CodeDeploy 會一次部署到一個執行個體。 有關部署設定的更多資訊,請參閱執行個體運作狀態

您需要為部署指定三個參數:

  1. 修訂版 – 指定要部署的版本。
  2. 部署群組 – 指定部署位置。
  3. 部署設定 – 指定如何部署的可選參數。

AppSpec 檔案是一種設定檔,用於指定要複製的檔案和要執行的指令碼。AppSpec 檔案使用 YAML 格式,您將其包含在修訂版的根目錄中。AppSpec 檔案由 AWS CodeDeploy 代理程式使用,包含兩個部分。檔案部分指定修訂版中要複製的原始檔案,以及每個執行個體的目的地資料夾。勾點部分指定在各個部署階段要執行的指令碼的位置 (作為從修訂版套件組合根目錄起始的相對路徑)。每個部署階段稱為部署生命週期事件。以下是範例 AppSpec 檔案。有關 AppSpec 檔案的更多資訊,包括所有可指定的選項,請參閱 AppSpec File Reference

os: linux

檔案: 

# 您可以在檔案區段指定一個或多個映射。

  - source: /

    destination: /var/www/html/WordPress

勾點:

 # lifecycle hook 區段能讓您指定部署指令碼。

ApplicationStop: 

# 步驟 1:停止正在執行的 Apache 和 MySQL。

    - location: helper_scripts/stop_server.sh

安裝前: 

# 步驟 2:安裝 Apache 和 MySQL。

# 您可以為每個部署生命週期事件指定一個或多個指令碼。

    - location: deploy_hooks/puppet-apply-apache.sh

    - location: deploy_hooks/puppet-apply-mysql.sh 

 安裝後: 

# 步驟 3:設定許可。

    - location: deploy_hooks /change_permissions.sh

      timeout: 30

      runas: root

# 步驟 4:啟動伺服器。

    - location: helper_scripts/start_server.sh

      timeout: 30

      runas: root

部署會經過一組預先定義的階段,稱為部署生命週期事件。部署生命週期事件可讓您將程式碼作為部署的一部分執行。下表依執行順序列出目前支援的各種部署生命週期事件,以及使用這些事件的時機範例。

部署生命週期事件:

  • ApplicationStop
    • 這是第一個部署生命週期事件,發生在修訂版下載之前。此部署生命週期事件所使用的 AppSpec 檔案和指令碼來自上一次成功部署的修訂版。 

      如果您想從容地停止應用程式或移除部署準備中目前已安裝的套件,可以使用 ApplicationStop 部署生命週期事件。

  • DownloadBundle

    • 在此部署生命週期事件期間,代理程式會將修訂版檔案複製到執行個體上的臨時位置。此部署生命週期事件是為代理程式預留的,不能用於執行使用者指令碼。

  • BeforeInstall

    • 您可以將 BeforeInstall 部署生命週期事件用於預先安裝任務,例如,解密檔案和建立目前版本的備份。

  • 安裝

    • 在此部署生命週期事件期間,代理程式會將修訂版檔案從臨時位置複製到最終目的地資料夾。此部署生命週期事件是為代理程式預留的,不能用於執行使用者指令碼。

  • AfterInstall

    • 您可以將 AfterInstall 部署生命週期事件用於設定應用程式或變更檔案權限等任務。

  • ApplicationStart

    • ApplicationStart 部署生命週期事件通常用於重新啟動在 ApplicationStop 期間停止的服務。

  • ValidateService

    • ValidateService 是最後一個部署生命週期事件,您可以利用這個機會驗證部署是否順利完成。

 

 

開始使用

您可以登入 AWS 管理主控台,並開始使用 AWS CodeDeploy。如果您要尋找此服務的快速概觀,請參閱包含逐步教學的 Getting Started

使用 AWS CodeDeploy

Amazon EC2 執行個體必須與 IAM 執行個體設定檔相關聯,而且應執行支援的作業系統。有關更多資訊,請參閱 Use an Existing Amazon EC2 Instance

下圖顯示部署期間的典型步驟。建立應用程式和部署群組 (請參閱概念區段以了解這些術語的解釋) 是每個應用程式的典型一次性設定任務。進行重複動作會上傳修訂版並部署該版本。有關詳細說明,包括每個任務的逐步說明,請參閱部署

程式碼不需要進行任何變更。只要在修訂版套件組合的根目錄中新增設定檔 (稱為 AppSpec 檔案),指定要複製的檔案和要執行的指令碼即可。

如果您使用的是 GitHub,可以透過 .zip、.tar 或 .tar.gz 格式,將修訂版從儲存庫直接部署到執行個體。對於其他原始程式碼控制系統,您可以透過 .zip、.tar 或 .tar.gz 格式,將修訂版綁定並上傳到 Amazon S3 儲存貯體,部署時再指定 Amazon S3 的位置。如果您的應用程式需要建構步驟,請確保 GitHub 儲存庫或 Amazon S3 儲存貯體包含建構後項目。有關將 GitHub 與 AWS CodeDeploy 搭配使用的更多資訊,請參閱我們的產品整合頁面。有關使用 Amazon S3 儲存修訂版的更多資訊,請參閱 Push a Revision

您可以從 AppSpec 檔案中的任何部署生命週期事件勾點叫用您的設定管理工具。例如,如果您有一個想作為部署一部分執行的 Chef 方法,可以在 AppSpec 檔案的適當部署生命週期事件勾點中指定它,以執行此操作。此外,您可以利用您的設定管理系統在執行個體上安裝 AWS CodeDeploy 代理程式。有關說明如何將 AWS CodeDeploy 與 Chef、Puppet、Ansible 和 Saltstack 等設定管理系統搭配使用的範例,請參閱我們的產品整合頁面。

是。您可以使用 AWS CLI 或 AWS 開發套件呼叫公用 API,將 AWS CodeDeploy 與您的持續整合和部署系統整合。您可以在我們的產品整合頁面找到預先建構的整合和範例。

將最新修訂版部署到部署群組,讓新增的執行個體取得您的應用程式。除了以 Auto Scaling 群組一部分啟動的 Amazon EC2 執行個體之外,AWS CodeDeploy 不會將最新修訂版自動部署到新增的執行個體。

您可以將 Auto Scaling 群組與部署群組建立關聯,確保新啟動的執行個體永遠會取得最新版本的應用程式。每當 Auto Scaling 群組有新的 Amazon EC2 執行個體啟動時,會先處於 Pending 狀態,然後該 Amazon EC2 執行個體上會觸發該部署群組上一次成功修訂版的部署。如果部署成功完成,Amazon EC2 執行個體的狀態會變更為 InService。如果部署失敗,Amazon EC2 執行個體會終止,新的 Amazon EC2 執行個體以 Pending 狀態啟動,且部署會在新啟動的 EC2 執行個體上觸發。有關 Auto Scaling 群組執行個體生命週期事件的更多資訊,請參閱 Auto Scaling Group Lifecycle

您可以使用 AWS 管理主控台AWS Command Line Interface (AWS CLI)AWS SDKAWS CodeDeploy API 追蹤部署的狀態。您可以查看部署的整體狀態,並進一步深入查看每個執行個體的狀態,以及執行個體之每個部署生命週期事件的狀態。您也可以查看任何故障對應的日誌項目,輕鬆偵錯部署問題,無須登入執行個體。

是。當您停止執行中的部署時,AWS CodeDeploy 服務將指示每個執行個體上的代理程式停止執行其他指令碼。要使您的應用程式回到一致狀態,您可以重新部署修訂版,或部署另一個修訂版。

要將應用程式復原到之前的修訂版,您只需部署該修訂版即可。AWS CodeDeploy 會持續追蹤針對目前修訂版所複製的檔案,並在開始新部署之前移除這些檔案,因此,重新部署和復原之間不會有任何差別。然而,您需要確保之前的修訂版可用於復原。

是。您可以使用版本控制的 Amazon S3 儲存貯體,並指定版本 ID 唯一識別修訂版。

有關服務限制的資訊,請參閱限制。要提高您的服務限制,請透過 AWS 支援中心提交請求。

是。要取得從您的帳戶發出的 AWS CodeDeploy API 呼叫歷史記錄,您只需在 AWS 管理主控台中開啟 AWS CloudTrail 即可。

您可以針對影響您部署的事件建立通知。通知會以 Amazon SNS 通知的形式傳送。每則通知都會包括狀態訊息,以及生成該通知的事件資源連結。 通知不需額外付費,但您可能需要支付通知所使用的其他 AWS 服務費用,例如 Amazon SNS。如需了解如何開始使用通知功能,請參閱通知功能使用指南。此外,使用 AWS Chatbot 的客戶可以設定要傳送至 Slack 頻道或 Amazon Chime 聊天室的通知。如需更多詳細資訊,請按一下這裡

安全性

可以,但安裝在 Amazon EC2 執行個體上的 AWS CodeDeploy 代理程式必須能夠存取公用 AWS CodeDeploy 和 Amazon S3 服務端點。有關更多資訊,請參閱 AWS CodeDeploy 端點Amazon S3 端點

是。AWS CodeDeploy 支援資源級權限。您可以為每個 AWS CodeDeploy 資源指定有權存取的使用者,以及可執行的動作。例如,您可以設定 IAM 政策,讓使用者部署特定的應用程式,但只列出其他應用程式的修訂版。藉此防止使用者不慎變更錯誤的應用程式。有關 IAM 與 AWS CodeDeploy 搭配使用的更多資訊,請參閱存取許可參考

區域

請參閱區域性產品和服務,了解 CodeDeploy 在不同區域的具體提供情況。

AWS CodeDeploy 使用位於同一區域的 AWS 資源執行部署。要將應用程式部署到多個區域,請在目標區域定義應用程式,將應用程式套件組合複製到每個區域的 Amazon S3 儲存貯體,然後使用連續或平行發行方式跨區域開始部署。

計費

透過 AWS CodeDeploy 在 Amazon EC2 執行個體的程式碼部署,並不收取其他費用。使用 AWS CodeDeploy 的每個現場部署執行個體更新費用為 0.02 USD。如需更多詳細資訊,請參閱定價頁面