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

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

問:使用 AWS CodeDeploy 可以部署哪些類型的應用程式?
AWS CodeDeploy 可用於部署任何類型的應用程式。要使用 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 可與各種設定管理系統、持續整合和部署系統,以及原始程式碼控制系統搭配使用。有關更多資訊,請參閱產品整合頁面。

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

問:AWS CodeDeploy 是否支援現場部署執行個體?
是。AWS CodeDeploy 支援任何執行個體,只要執行個體可以安裝 CodeDeploy 代理程式並連接到 AWS 公用終端節點

 

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

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

問:什麼是部署群組?
部署群組是一組執行個體,與您作為部署目標的應用程式相關。您可以指定標籤、Auto Scaling 群組名稱或同時指定兩者,將執行個體新增到部署群組。您可以為一個應用程式定義多個部署群組,如模擬和生產。有關標籤的更多資訊,請參閱 Working with Amazon EC2 Tags in the Console。有關部署到 Auto Scaling 群組的更多資訊,請參閱 Auto Scaling 整合

問:什麼是部署設定?
部署設定是一項限制,決定如何透過部署群組中的執行個體進行部署。您可以使用部署設定執行多執行個體部署群組的無停機時間部署。例如,如果您的應用程式需要部署群組中至少有 50% 的執行個體啟動並提供流量,您可以在部署設定中指定,使部署不會導致停機。如果沒有與部署或部署群組相關聯的部署設定,則根據預設,AWS CodeDeploy 會一次部署到一個執行個體。有關部署設定的更多資訊,請參閱 Instance Health

問:我需要為部署指定哪些參數?
您需要為部署指定三個參數:

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

version: 0.0

os: linux

files: 

# You can specify one or more mappings in the files section.

  - source: /

    destination: /var/www/html/WordPress

hooks:

 # The lifecycle hooks sections allows you to specify deployment scripts.

ApplicationStop: 

# Step 1: Stop Apache and MySQL if running.

    - location: helper_scripts/stop_server.sh

BeforeInstall: 

# Step 2: Install Apache and MySQL.

# You can specify one or more scripts per deployment lifecycle event.

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

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

 AfterInstall: 

# Step 3: Set permissions.

    - location: deploy_hooks /change_permissions.sh

      timeout: 30

      runas: root

# Step 4: Start the server.

    - location: helper_scripts/start_server.sh

      timeout: 30

      runas: root

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

部署生命週期事件 描述
ApplicationStop

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

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

DownloadBundle 在此部署生命週期事件期間,代理程式會將修訂版檔案複製到執行個體上的臨時位置。此部署生命週期事件是為代理程式預留的,不能用於執行使用者指令碼。
BeforeInstall 您可以將 BeforeInstall 部署生命週期事件用於預先安裝任務,例如,解密檔案和建立目前版本的備份。
Install 在此部署生命週期事件期間,代理程式會將修訂版檔案從臨時位置複製到最終目的地資料夾。此部署生命週期事件是為代理程式預留的,不能用於執行使用者指令碼。
AfterInstall 您可以將 AfterInstall 部署生命週期事件用於設定應用程式或變更檔案權限等任務。
ApplicationStart ApplicationStart 部署生命週期事件通常用於重新啟動在 ApplicationStop 期間停止的服務。
ValidateService ValidateService 是最後一個部署生命週期事件,您可以利用這個機會驗證部署是否順利完成。

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

問:將現有的 Amazon EC2 執行個體與 AWS CodeDeploy 搭配使用,是否有任何先決條件?
Amazon EC2 執行個體必須與 IAM 執行個體設定檔相關聯,而且應執行支援的作業系統。有關更多資訊,請參閱 Use an Existing Amazon EC2 Instance

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

問:如何存取 AWS CodeDeploy?
您可以使用 AWS 管理主控台AWS 命令列界面 (AWS CLI)AWS 開發套件AWS CodeDeploy API 存取 AWS CodeDeploy。

問:使用 AWS CodeDeploy 部署時,程式碼需要進行哪些變更?
程式碼不需要進行任何變更。只要在修訂版套件組合的根目錄中新增設定檔 (稱為 AppSpec 檔案),指定要複製的檔案和要執行的指令碼即可。

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

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

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

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

問:AWS CodeDeploy 如何與 Auto Scaling 搭配使用?
您可以將 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 命令列界面 (AWS CLI)AWS 開發套件AWS CodeDeploy API 追蹤部署的狀態。您可以查看部署的整體狀態,還可以進一步深入了解每個執行個體的狀態及執行個體每個部署生命週期事件的狀態。您也可以查看任何故障對應的日誌項目,輕鬆偵錯部署問題,無須登入執行個體。

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

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

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

問:使用 AWS CodeDeploy 時有哪些服務限制?
有關服務限制的資訊,請參閱 Limits。要提高您的服務限制,請透過 AWS 支援中心提交請求。

問:是否可取得從我的帳戶發出的 AWS CodeDeploy API 呼叫歷史記錄,以便用於安全分析和操作故障排除?
是。要取得從您的帳戶發出的 AWS CodeDeploy API 呼叫歷史記錄,您只需在 AWS 管理主控台中開啟 AWS CloudTrail 即可。

問:是否可使用 AWS CodeDeploy,將應用程式部署到在 Amazon Virtual Private Cloud (VPC) 內執行的 Amazon EC2 執行個體?
可以,但安裝在 Amazon EC2 執行個體上的 AWS CodeDeploy 代理程式必須能夠存取公用 AWS CodeDeploy 和 Amazon S3 服務終端節點。有關更多資訊,請參閱 AWS CodeDeploy EndpointsAmazon S3 Endpoints

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

問:AWS CodeDeploy 支援哪些區域?
請參閱區域性產品和服務,了解 CodeDeploy 在不同區域的具體提供情況。

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

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