在 Windows Server 上自訂軟體 - AWS Elastic Beanstalk

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

在 Windows Server 上自訂軟體

您可能想要針對您的應用程式相依使用的軟體,來進行自訂和設定。這些檔案可能是應用程式所必須用到的,例如,需執行的其他套件或服務。如需自訂和設定 Elastic Beanstalk 環境的一般資訊,請參閱設定 Elastic Beanstalk 環境

注意

YAML 憑藉一致的縮排。請在取代範例組態檔中的內容時,讓縮排層級一致,並確認您的文字編輯器使用空格而非定位字元進行縮排。

組態檔案支援下列金鑰,這些金鑰會對執行您應用程式的 Windows 伺服器造成影響。

這些金鑰會以此列的順序處理。

注意

較舊 (未進行版本控制) 的 .NET 平台版本不會以正確的順序處理組態檔案。如需進一步了解,請參閱遷移 Elastic Beanstalk Windows Server 平台的主要版本

觀看您環境的事件的同時,開發與測試組態檔案。Elastic Beanstalk 忽略組態檔案,其中包含驗證錯誤,例如無效的金鑰,並不處理同一個檔案其他任何金鑰。當發生這種情況,Elastic Beanstalk 會將警告事件新增到事件日誌。

套件

使用 packages 金鑰來下載和安裝預先整裝好的應用程式與元件。

在 Windows 環境中,Elastic Beanstalk 支援下載和安裝 MSI 套件。(Linux 環境支援其他套件管理工具。如需詳細資訊,請參閱在 Linux 伺服器上自訂軟體頁面的套件)。

只要 URL 是可公開存取,您就可以參考任何外部位置 (例如,Amazon Simple Storage Service (Amazon S3) 物件)。

如果您指定多個 msi: 套件,則不保證其安裝順序。

語法

指定您的選擇名稱做為套件名稱,並以 MSI 檔案位置的 URL 做為值。您可以在 msi: 金鑰下指定多個套件。

packages: msi: package name: package url ...

範例

下列範例指定了從 https://dev.mysql.com/ 下載 mysql (mysql) 的 URL。

packages: msi: mysql: https://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-8.0.11.msi

以下範例指定 Amazon S3 物件做為 MSI 檔案位置。

packages: msi: mymsi: https://mybucket.s3.amazonaws.com/myobject.msi

Sources

使用 sources 金鑰,從公開 URL 下載封存檔案,並在 EC2 執行個體上的目標目錄中,將該檔案解壓縮。

語法

sources: target directory: location of archive file

支援的格式

在 Windows 環境中,Elastic Beanstalk 支援 .zip 格式。(Linux 環境支援額外的格式。 如需詳細資訊,請參閱來源在 Linux 伺服器上自訂軟體((() 頁面。)

只要 URL 是可公開存取,您就可以參考任何外部位置 (例如,Amazon Simple Storage Service (Amazon S3) 物件)。

範例

下列範例從 Amazon S3 儲存貯體下載了公有的 .zip 檔案,並將該檔案解壓縮至 c:/myproject/myapp

sources: "c:/myproject/myapp": https://mybucket.s3.amazonaws.com/myobject.zip

檔案

使用 files 金鑰,在 EC2 執行個體上建立檔案。此內容可以內嵌於組態檔案,或從 URL 取得。檔案會依詞典編纂順序寫入磁碟。若要從 Amazon S3 下載私有檔案,請提供授權用的執行個體描述檔。

語法

files: "target file location on disk": source: URL authentication: authentication name: "target file location on disk": content: | this is my content encoding: encoding format

選項

content

(選用) 字串。

source

(選用) 載入該檔案的 URL。您無法使用 content 金鑰來指定此選項。

encoding

(選用) 編碼格式。此選項只用於提供內容金鑰值。預設值為 plain

有效值:plain | base64

authentication

(選用) 所要使用的 AWS CloudFormation 身份驗證方法名稱。您可以利用 Resources (資源) 金鑰,在 Auto Scaling 群組的中繼資料中新增身份驗證方法。

範例

以下範例顯示兩種方式提供檔案內容:從 URL,或是內嵌在組態檔案。

files: "c:\\targetdirectory\\targetfile.txt": source: http://foo.bar/myfile "c:/targetdirectory/targetfile.txt": content: | # this is my file # with content
注意

如果在檔案路徑中使用反斜線 (\),則必須在 \ 前面冠上另一個反斜線 (跳脫字元),如先前的範例所示。

下列範例使用了 Resources (資源) 金鑰來新增名為 S3Auth 的身份驗證方法,並使用此方法,從 Amazon S3 儲存貯體下載私有檔案。

files: "c:\\targetdirectory\\targetfile.zip": source: https://elasticbeanstalk-us-east-2-123456789012.s3.amazonaws.com/prefix/myfile.zip authentication: S3Auth Resources: AWSEBAutoScalingGroup: Metadata: AWS::CloudFormation::Authentication: S3Auth: type: "s3" buckets: ["elasticbeanstalk-us-east-2-123456789012"] roleName: "Fn::GetOptionSetting": Namespace: "aws:autoscaling:launchconfiguration" OptionName: "IamInstanceProfile" DefaultValue: "aws-elasticbeanstalk-ec2-role"

命令

使用 commands 金鑰,在 EC2 執行個體上執行命令。命令會依其名稱的字母順序處理,而且會在應用程式和 Web 伺服器設定完成及應用程式版本檔案解壓縮前,就先行執行。

指定的命令會以管理員使用者的身分執行。

若要對命令的問題進行疑難排解,您可以在執行個體日誌中尋找命令的輸出。

語法

commands: command name: command: command to run

選項

command

以陣列或字串來指定要執行的命令。如果使用陣列,則不需跳脫空格字元或用引號括起命令參數。

cwd

(選用) 工作目錄。依預設,Elastic Beanstalk 會嘗試尋找專案的目錄位置。如果找不到,則會使用 c:\Windows\System32 做為預設位置。

env

(選用) 設定命令用的環境變數。此屬性會進行覆寫,而非附加至現有的環境。

ignoreErrors

(選用) 一個布林值,在 command 金鑰中所包含的命令失敗時 (傳回非零的值),可用來判定其他的命令是否應該執行。如果即使指令失敗,也想繼續執行指令,請將此值設定為 true。如果要在命令失敗時停止執行命令,請將此值設定為 false。預設值為 false

test

(選用) 此命令必須傳回值 true (結束代碼 0),Elastic Beanstalk 才能處理 command 金鑰中包含的命令。

waitAfterCompletion

(選用) 等命令執行完成後再執行下一個命令前的等待秒數。如果系統需要在命令完成後重新啟動,則系統會在指定的秒數時間經過之後才重新啟動。如果系統因為命令而重新啟動,則 Elastic Beanstalk 將會回復到組態檔案中該項命令之後的位置點。預設值為 60 秒。您也可以指定 forever,但系統必須先重新啟動,您才可以執行另一個命令。

範例

下列範例會將 set 命令的輸出結果儲存到指定的檔案。如果有後續的命令,則 Elastic Beanstalk 會在此命令完成後立即執行該後續命令。如果此命令需要重新啟動,則 Elastic Beanstalk 會在命令完成後立即重新啟動執行個體。

commands: test: command: set > c:\\myapp\\set.txt waitAfterCompletion: 0

服務

使用 services 金鑰,來定義執行個體啟動時應啟動或停止的服務。services 金鑰也可讓您指定來源、套件與檔案的相依關係,因此如果安裝中的檔案需要重新啟動,則 Elastic Beanstalk 會負責重新啟動服務。

語法

services: windows: name of service: files: - "file name" sources: - "directory" packages: name of package manager: "package name[: version]" commands: - "name of command"

選項

ensureRunning

(選用) 設定為 true,以確保服務會在 Elastic Beanstalk 完成後執行。

設定為 false,以確保服務不會在 Elastic Beanstalk 完成後執行。

如果略過此金鑰,將不會改變服務狀態。

enabled

(選用) 設定為 true,來確保服務會在開機時自動啟動。

設定為 false,來確保服務不會在開機時自動啟動。

如果略過此金鑰,將不會改變此屬性。

files

檔案清單。如果 Elastic Beanstalk 透過檔案區塊直接變更檔案,服務會重新啟動。

sources

目錄清單。如果 Elastic Beanstalk 將封存解壓縮至這些目錄的其中之一,服務會重新啟動。

packages

套件軟體管理工具與套件名稱清單的對應圖。如果 Elastic Beanstalk 安裝或更新這些套件的其中之一,服務會重新啟動。

commands

命令名稱清單。如果 Elastic Beanstalk 執行指定的命令,服務會重新啟動。

範例

services: windows: myservice: enabled: true ensureRunning: true

容器命令

使用 container_commands 金鑰,來執行會影響您應用程式原始碼的命令。容器指令的執行會在應用程式和 Web 伺服器設定完成及應用程式版本封存檔解壓縮之後,但是在應用程式版本安裝之前。非容器的指令及其他自訂操作,則會在應用程式的原始碼解壓縮之前執行。

容器指令會從暫存目錄執行,您的原始碼會在部署到應用程式伺服器之前,先解壓縮到該目錄。當原始碼部署到最終的位置時,您使用容器命令對暫存目錄中原始碼所進行的變更,也會納入部署。

若要對容器命令的問題進行疑難排解,您可以在執行個體日誌中尋找命令的輸出。

如果只要在單一執行個體上執行命令,請使用 leader_only 選項;或者,請將 test 設定為只在測試命令得出的評估值為 true 時,才執行命令。僅限領導者的容器指令,只會在環境建立與部署時執行;其他的指令與伺服器自訂操作,則會在每次佈建或更新執行個體時執行。僅限領導者的容器命令會因為啟動組態變更 (例如變更 AMI ID 或執行個體類型) 而不執行。

語法

container_commands: name of container_command: command: command to run

選項

command

要執行的字串或字串陣列。

env

(選用) 在執行命令前先設定環境變數,覆寫掉任何現有的值。

cwd

(選用) 工作目錄。根據預設,這是已經解壓縮應用程式的暫存目錄。

leader_only

(選用) 只在 Elastic Beanstalk 所選擇的單一執行個體上執行指令。僅限領導者的容器命令會先於其他容器命令執行。指令可以是只限領導者或具有 test,但只能是其中一種 (leader_only 會具有優先性)。

test

(選用) 執行測試命令,此命令必須傳回 true 才能執行容器命令。指令可以是只限領導者或具有 test,但只能是其中一種 (leader_only 會具有優先性)。

ignoreErrors

(選用) 如果容器命令傳回 0 以外的值 (成功),則請勿讓部署失敗。設定為 true 以啟用。

waitAfterCompletion

(選用) 等命令執行完成後再執行下一個命令前的等待秒數。如果系統需要在命令完成後重新啟動,則系統會在指定的秒數時間經過之後才重新啟動。如果系統因為命令而重新啟動,則 Elastic Beanstalk 將會回復到組態檔案中該項命令之後的位置點。預設值為 60 秒。您也可以指定 forever,但系統必須先重新啟動,您才可以執行另一個命令。

範例

下列範例會將 set 命令的輸出結果儲存到指定的檔案。Elastic Beanstalk 會在單一執行個體上執行指令,然後在該指令完成時立即重新啟動執行個體。

container_commands: foo: command: set > c:\\myapp\\set.txt leader_only: true waitAfterCompletion: 0