本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
步驟 2.5:部署應用程式
重要
所以此 AWS OpsWorks Stacks 服務於 2024 年 5 月 26 日終止使用壽命,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載移轉至其他解決方案。如果您對移轉有任何疑問,請聯絡 AWS Support 團隊上 AWS Re: 郵寄
IIS安裝程式會建立應用程式程式碼和相關檔案的C:\inetpub\wwwroot
目錄。下一步是在該目錄中安裝應用程式。在此範例中,您將安裝靜態HTML首頁、default.html
、中C:\inetpub\wwwroot
。您可以輕鬆擴展一般方法來處理更複雜的情況,例如ASP. NET應用程式。
您可以在技術指南中包含應用程式的檔案,並讓 install.rb
複製這些檔案到 C:\inetpub\wwwroot
。如需如何執行此作業的範例,請參閱 範例 6:建立檔案。但是,此方法並不靈活且效率不高,通常更好的方法是將技術指南開發與應用程式開發分隔開來。
偏好的解決方案是實作個別的部署方法,從儲存庫擷取應用程式的程式碼和相關檔案 (您偏好的任何儲存庫,而不只是食譜儲存庫),並將其安裝在每個伺服器執行個體上。IIS此方法會將技術指南開發與應用程式開發分隔開來,當您需要更新應用程式時,只需再次執行部署配方即可,無需更新技術指南。
本主題說明如何實作部署至IIS伺服器的簡單部署方案。default.htm
您可以隨時將此範例擴展到更複雜的應用程式。
建立應用程式並存放在儲存庫中。
您可以為應用程式使用任何您偏好的儲存庫。為求簡化,此範例會將 default.htm
存放在公有 S3 儲存貯體中。
建立應用程式
-
在您的工作站中方便的位置上,建立名為
iis-application
的目錄。 -
將
default.htm
檔案新增至具有以下內容的iis-application
。<!DOCTYPE html> <html> <head> <title>IIS Example</title> </head> <body> <h1>Hello World!</h1> </body> </html>
-
建立 S3 儲存貯體,上傳
default.htm
到儲存貯體,然後記錄以URL供日後使用。為求簡化,請將檔案設為公有。注意
這是一個非常簡單的應用程式,但您可以擴展基本原則以處理生產層級的應用程式。
-
針對具有多個檔案的更複雜應用程式,為
iis-application
建立 .zip 封存並將其上傳至您的 S3 儲存貯體通常會更簡單。然後,您可以下載 .zip 檔並將其內容解壓縮到適當的目錄。不需要下載多個檔案或建立目錄結構等作業。
-
針對生產應用程式,建議您將檔案保留為私有。如需如何讓配方從私有 S3 儲存貯體下載檔案的範例,請參閱 在一個上使SDK用紅寶石 AWS OpsWorks 堆棧窗口實例。
-
您可以將您的應用程式存放於任何適當的儲存庫。
您通常使用存放庫的公用下載應用程式API。此範例使用 Amazon S3 API。例如,如果您將應用程式儲存在上 GitHub,您可以使用 GitHub API
.
-
實作配方來部署應用程式
將名為 deploy.rb
的配方新增至 iis-cookbook
recipes
目錄中,其中包含下列內容。
chef_gem "aws-sdk-s3" do compile_time false action :install end ruby_block "download-object" do block do require 'aws-sdk-s3' #1 # Aws.config[:ssl_ca_bundle] = 'C:\ProgramData\Git\bin\curl-ca-bundle.crt' Aws.use_bundled_cert! #2 query = Chef::Search::Query.new app = query.search(:aws_opsworks_app, "type:other").first s3region = app[0][:environment][:S3REGION] s3bucket = app[0][:environment][:BUCKET] s3filename = app[0][:environment][:FILENAME] #3 s3_client = Aws::S3::Client.new(region: s3region) s3_client.get_object(bucket: s3bucket, key: s3filename, response_target: 'C:\inetpub\wwwroot\default.htm') end action :run end
這個例子使SDK用 Ruby v2 來下載文件。然而, AWS OpsWorks 堆疊不會SDK在 Windows 執行個體上安裝此項目,因此方案會從處理該工作的chef_gem
注意
chef_gem
資源會將 gem 安裝到 Chef 專用的 Ruby 版本 (配方使用的版本) 中。如果您要為全系統範圍的 Ruby 版本安裝 gem,請使用 gem_package
配方的大部分是一個ruby_block
default.htm
。ruby_block
中的程式碼可分為下列區段,這些區段分別對應於程式碼範例中的編號註解。
- 1:指定憑證套件
-
Amazon S3 使用SSL,因此您需要適當的憑證,才能從 S3 儲存貯體下載物件。SDK對於 Ruby v2 不包含證書包,因此您必須提供一個證書包並配置 Ruby 才能使用它。SDK AWS OpsWorks 堆棧不會直接安裝證書包,但它確實安裝 Git,其中包括證書包(
curl-ca-bundle.crt
)。為了方便起見,此範例會將 Ruby 設定SDK為使用 Git 憑證套件。SSL您也可以安裝自己的套件,並SDK相應地設定。 - 2:擷取儲存庫資料
-
若要從 Amazon S3 下載物件,您需要AWS區域、儲存貯體名稱和金鑰名稱。如下文所述,此範例透過將一組環境變數與應用程式建立關聯來提供此資訊。當您部署應用程式時, AWS OpsWorks 堆棧將一組屬性添加到實例的節點對象。這些屬性實際上是包含應用程式組態 (包括環境變數) 的雜湊表。此應用程序的應用程序屬性將看起來像下面的JSON格式。
{ "app_id": "8f71a9b5-de7f-451c-8505-3f35086e5bb3", "app_source": { "password": null, "revision": null, "ssh_key": null, "type": "other", "url": null, "user": null }, "attributes": { "auto_bundle_on_deploy": true, "aws_flow_ruby_settings": {}, "document_root": null, "rails_env": null }, "data_sources": [{"type": "None"}], "domains": ["iis_example_app"], "enable_ssl": false, "environment": { "S3REGION": "us-west-2", "BUCKET": "windows-example-app", "FILENAME": "default.htm" }, "name": "IIS-Example-App", "shortname": "iis_example_app", "ssl_configuration": { "certificate": null, "private_key": null, "chain": null }, "type": "other", "deploy": true }
此應用程式的環境變數存放在
[:environment]
屬性中。若要擷取,請使用 Chef 搜尋查詢來擷取應用程式的雜湊表,位於aws_opsworks_app
節點之下。此應用程式定義為other
類型,因此查詢會搜尋該類型的應用程式。配方會利用此執行個體上只有一個應用程式的事實,因此特定的雜湊表為app[0]
。為了方便起見,配方隨後會將區域、儲存貯體和檔案名稱指派至變數。如需如何使用 Chef 搜尋的詳細資訊,請參閱 使用 Chef 搜尋取得屬性值。
- 3:下載檔案
-
配方的第三個部分是建立 S3 用戶端物件 並使用其
get_object
方法來下載default.htm
到執行個體的C:\inetpub\wwwroot
目錄。
注意
配方是 Ruby 應用程式,因此 Ruby 程式碼不一定需要位於 ruby_block
中。不過,配方主體中的程式碼會先執行,接著才會執行資源。在此範例中,如果您將下載程式碼放在配方主體中,則會失敗,因為chef_gem
資源尚未安裝 SDK for Ruby。資源中的代碼在ruby_block
資源執行時執行,在chef_gem
資源已安裝SDK的 Ruby 之後。
更新執行個體的技術指南
AWS OpsWorks 堆疊功能會自動在新執行個體上安裝自訂食譜。但是因為您正在使用現有的執行個體,所以您必須手動更新技術指南。
更新執行個體的技術指南
-
建立
iis-cookbook
的.zip
存檔,並將其上傳至 S3 儲存貯體。這會覆蓋現有的食譜,但URL保持不變,因此您不需要更新堆棧配置。
-
如果您的執行個體並未處於線上狀態,請將其重新啟動。
-
在執行個體上線之後,在導覽窗格中選擇 Stack (堆疊),然後選擇 Run Command (執行命令)。
-
針對 Command (命令),選擇 Update Custom Cookbooks (更新自訂技術指南)。此命令會在執行個體上安裝更新技術指南。
-
選擇 Update Custom Cookbooks (更新自訂技術指南)。此命令可能需要幾分鐘的時間來完成。
將配方添加到自定義IIS層
如同 install.rb
一樣,處理部署的較佳方式是將 deploy.rb
指派給適當的生命週期事件。您通常會將部署配方指派至部署事件,並統稱為部署配方。將配方指派至部署事件不會觸發此事件。反之:
-
對於新實例, AWS OpsWorks 堆疊會在安裝方法完成後自動執行 Deploy 方法,因此新執行個體會自動擁有目前的應用程式版本。
-
針對線上執行個體,請使用部署命令來手動安裝新的或更新應用程式。
此命令會在堆疊的執行個體上觸發部署事件,該事件會執行部署配方。
將 deploy.rb 指派給 layer 的部署事件
-
選擇導航窗格中的圖層,然後在圖層下選擇配方IISExample。
-
在 Custom Chef Recipes (自訂 Chef 配方) 下,將
iis-cookbook::deploy
新增至 Deploy (部署) 配方方塊,並選擇 + 來將配方新增至 layer。 -
選擇 Save (儲存) 以儲存新組態。自訂部署配方現在應包含
iis-cookbook::deploy
。
新增應用程式
最後一項任務是將應用程序添加到堆棧中以代表您的應用程序 AWS OpsWorks 堆棧環境。應用程式包含中繼資料 (如應用程式的顯示名稱) 和從儲存庫下載的應用程式所需資料。
將應用程式新增至堆疊
-
在導覽窗格中選擇 Apps (應用程式),然後選擇 Add an app (新增應用程式)。
-
使用以下設定來設定應用程式。
-
名稱 — 我
IIS-Example-App
-
存放庫類型 — 其他
-
環境變數 — 新增下列三個環境變數:
-
S3REGION
— 值區的區域 (在本例中為us-west-1
)。 -
BUCKET
— 值區名稱,例如windows-example-app
。 -
FILENAME
— 檔案名稱:default.htm
。
-
-
-
接受其餘設定的預設值,然後選擇 Add App (新增應用程式) 將應用程式新增至堆疊。
注意
此範例使用環境變數來提供下載資料。另一種方法是使用 S3 存檔存放庫類型並提供檔案URL。 AWS OpsWorks Stacks 會將資訊以及選用資料 (例如AWS憑證) 新增至應用程式的app_source
屬性。您的部署配方必須URL從應用程序屬性中獲取並對其進行解析以提取區域,存儲桶名稱和文件名。
部署應用程式和開啟應用程式
AWS OpsWorks 堆疊會自動將應用程式部署到新執行個體,但不會部署至線上執行個體 由於您的執行個體已在執行中,因此您必須手動部署應用程式。
部署應用程式
-
在導覽窗格中選擇 Apps (應用程式),然後在應用程式的 Actions (動作) 欄中選擇 deploy (部署)。
-
Command (命令) 應該設為 Deploy (部署)。選擇 Deploy App (部署應用程式) 頁面右下方的 Deploy (部署)。此命令可能需要幾分鐘的時間來完成。
在部署完成後,您可以返回 Apps (應用程式) 頁面。Status (狀態) 指標會顯示綠色的 successful (成功),且應用程式名稱旁會顯示綠色核取標記,指出部署成功。
注意
Windows 應用程式一律為 Other (其他) 應用程式類型,因此部署應用程式會執行下列作業:
-
將應用程式的資料新增至堆疊組態和部署屬性,如前所述。
-
在堆疊的執行個體上觸發部署事件,該事件會執行您的自訂部署配方。
注意
如需如何故障診斷故障之部署或應用程式的詳細資訊,請參閱除錯配方。
應用程式現在已安裝。您可以在 [功能] 窗格中選擇 [執行個體],然後選擇執行個體的公用 IP 位址來開啟它。這將向實例發送HTTP請求,並且您應該在瀏覽器中看到類似以下內容。