本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 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