- 開發人員工具›
- AWS CodeDeploy›
- 常見問答集
AWS CodeDeploy 常見問答集
一般問題
什麼是 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 儲存貯體存取修訂版。
什麼是部署群組?
部署群組是 AWS CodeDeploy 實體,用於將 EC2 執行個體或 AWS Lambda 函數分組在 CodeDeploy 部署中。如果是 EC2 部署,部署群組是一組執行個體,與您作為部署目標的應用程式相關。您可以指定標籤、Auto Scaling 群組名稱或同時指定兩者,將執行個體新增到部署群組。在 AWS Lambda 部署中,部署群組可為群組未來的無伺服器 Lambda 部署定義一組 AWS CodeDeploy 組態,像是警示和復原。
您可以為一個應用程式定義多個部署群組,如模擬和生產。有關標籤的更多資訊,請參閱在主控台中使用 Amazon EC2 標籤。有關部署到 Auto Scaling 群組的更多資訊,請參閱 Auto Scaling 整合。
什麼是部署組態?
部署組態可指定進行部署的行為,包括如何透過部署群組處理部署失敗。您可以使用部署設定執行多執行個體部署群組的無停機時間部署。例如,如果您的應用程式需要部署群組中至少有 50% 的執行個體啟動並提供流量,您可以在部署設定中指定,使部署不會導致停機。如果沒有與部署或部署群組相關聯的部署設定,則根據預設,AWS CodeDeploy 會一次部署到一個執行個體。 有關部署設定的更多資訊,請參閱執行個體運作狀態。
我需要為部署指定哪些參數?
您需要為部署指定三個參數:
- 修訂版 – 指定要部署的版本。
- 部署群組 – 指定部署位置。
- 部署設定 – 指定如何部署的可選參數。
什麼是 AppSpec 檔案?
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 CodeDeploy?
您可以登入 AWS 管理主控台,並開始使用 AWS CodeDeploy。如果您要尋找此服務的快速概觀,請參閱包含逐步教學的 Getting Started。
使用 AWS CodeDeploy
將現有的 Amazon EC2 執行個體與 AWS CodeDeploy 搭配使用,是否有任何先決條件?
Amazon EC2 執行個體必須與 IAM 執行個體設定檔相關聯,而且應執行支援的作業系統。有關更多資訊,請參閱 Use an Existing Amazon EC2 Instance。
使用 AWS CodeDeploy 部署應用程式通常需執行哪些步驟?
如何存取 AWS CodeDeploy?
您可以使用 AWS 管理主控台、AWS Command Line Interface (AWS CLI)、AWS SDK 和 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 Command Line Interface (AWS CLI)、AWS SDK 和 AWS CodeDeploy API 追蹤部署的狀態。您可以查看部署的整體狀態,並進一步深入查看每個執行個體的狀態,以及執行個體之每個部署生命週期事件的狀態。您也可以查看任何故障對應的日誌項目,輕鬆偵錯部署問題,無須登入執行個體。
是否能停止執行中的部署?
是。當您停止執行中的部署時,AWS CodeDeploy 服務將指示每個執行個體上的代理程式停止執行其他指令碼。要使您的應用程式回到一致狀態,您可以重新部署修訂版,或部署另一個修訂版。
如何將應用程式復原到之前的修訂版?
要將應用程式復原到之前的修訂版,您只需部署該修訂版即可。AWS CodeDeploy 會持續追蹤針對目前修訂版所複製的檔案,並在開始新部署之前移除這些檔案,因此,重新部署和復原之間不會有任何差別。然而,您需要確保之前的修訂版可用於復原。
是否可使用版本控制的 Amazon S3 儲存貯體存放修訂版?
是。您可以使用版本控制的 Amazon S3 儲存貯體,並指定版本 ID 唯一識別修訂版。
是否可取得從我的帳戶發出的 AWS CodeDeploy API 呼叫歷史記錄,以便用於安全分析和操作故障排除?
是。要取得從您的帳戶發出的 AWS CodeDeploy API 呼叫歷史記錄,您只需在 AWS 管理主控台中開啟 AWS CloudTrail 即可。
如何接收 AWS CodeDeploy 中任何事件的通知或警示?
您可以針對影響您部署的事件建立通知。通知會以 Amazon SNS 通知的形式傳送。每則通知都會包括狀態訊息,以及生成該通知的事件資源連結。 通知不需額外付費,但您可能需要支付通知所使用的其他 AWS 服務費用,例如 Amazon SNS。如需了解如何開始使用通知功能,請參閱通知功能使用指南。此外,使用 AWS Chatbot 的客戶可以設定要傳送至 Slack 頻道或 Amazon Chime 聊天室的通知。如需更多詳細資訊,請按一下這裡。
安全性
是否可使用 AWS CodeDeploy,將應用程式部署到在 Amazon 虛擬私有雲端 (VPC) 內執行的 Amazon EC2 執行個體?
可以,但安裝在 Amazon EC2 執行個體上的 AWS CodeDeploy 代理程式必須能夠存取公用 AWS CodeDeploy 和 Amazon S3 服務端點。有關更多資訊,請參閱 AWS CodeDeploy 端點和 Amazon S3 端點。
區域
AWS CodeDeploy 支援哪些區域?
請參閱區域性產品和服務,了解 CodeDeploy 在不同區域的具體提供情況。
如何將 AWS CodeDeploy 應用程式部署到多個區域?
AWS CodeDeploy 使用位於同一區域的 AWS 資源執行部署。要將應用程式部署到多個區域,請在目標區域定義應用程式,將應用程式套件組合複製到每個區域的 Amazon S3 儲存貯體,然後使用連續或平行發行方式跨區域開始部署。
計費
AWS CodeDeploy 的費用是多少?
透過 AWS CodeDeploy 在 Amazon EC2 執行個體的程式碼部署,並不收取其他費用。使用 AWS CodeDeploy 的每個現場部署執行個體更新費用為 0.02 USD。如需更多詳細資訊,請參閱定價頁面。