本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
引導 AWS CloudFormation Windows 堆疊
本主題說明如何引導 Windows 堆疊和故障診斷堆疊建立問題。如果您要建立自己的 Windows 映像以搭配 CloudFormation 使用,請參閱《Amazon EC2 使用者指南》中的使用 EC2Config 服務在 EC2 舊版 Windows 作業系統執行個體啟動期間執行任務的資訊。您必須使用 EC2Config 服務設定 Windows 執行個體,才能使用 AWS CloudFormation 引導工具。
引導 Windows 堆疊的範例
為了說明,我們將檢查 AWS CloudFormation 單一執行個體 SharePoint 伺服器範本。
您可以在下列 URL 中檢視完整的範本:
此範例將進行以下示範:
-
建立存取執行個體的 IAM 使用者和安全群組。
-
設定初始化檔案:
cfn-credentials
、cfn-hup.conf
和cfn-auto-reloader.conf
。 -
下載套件 (例如 Sharepoint Foundation 2010) 並安裝在伺服器執行個體上。
-
使用
WaitCondition
來確保資源已準備就緒。 -
擷取具有 Amazon 彈性 IP (EIP) 的執行個體 IP。
根據 Windows Single Server Sharepoint Foundation 範本中AWS::CloudFormation::Init
資源的資訊, AWS CloudFormation 協助程式指令碼cfn-init
用於執行這些動作。
AWS::CloudFormation::Init
本節名為 SharePointFoundation
,開頭為標準宣告:
"SharePointFoundation": { "Type" : "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : {
之後,AWS::CloudFormation::Init
宣告 的 files
區段:
"files" : { "c:\\cfn\\cfn-hup.conf" : { "content" : { "Fn::Join" : ["", [ "[main]\n", "stack=", { "Ref" : "AWS::StackName" }, "\n", "region=", { "Ref" : "AWS::Region" }, "\n" ]]} }, "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf" : { "content": { "Fn::Join" : ["", [ "[cfn-auto-reloader-hook]\n", "triggers=post.update\n", "path=Resources.SharePointFoundation.Metadata.AWS::CloudFormation::Init\n", "action=cfn-init.exe -v -s ", { "Ref" : "AWS::StackName" }, " -r SharePointFoundation", " --region ", { "Ref" : "AWS::Region" }, "\n" ]]} }, "C:\\SharePoint\\SharePointFoundation2010.exe" : { "source" : "http://d3adzpja92utk0.cloudfront.net/SharePointFoundation.exe" } },
在此建立三個檔案,並放在伺服器執行個體的 C:\cfn
目錄中。分別為:
-
cfn-hup.conf
, 的組態檔案cfn-hup
。 -
cfn-auto-reloader.conf
,當中繼資料AWS::CloudFormation::Init
變更時cfn-hup
, 用來啟動更新 (呼叫cfn-init
) 的勾點組態檔案。
還會下載一個檔案到伺服器:SharePointFoundation.exe
。這個檔案是用於在伺服器執行個體上安裝 SharePoint。
重要
由於 Windows 上的路徑使用反斜線 ('\') 字元,因此每當您參考 AWS CloudFormation 範本中的 Windows 路徑時,請務必記得在另一個反斜線前加上 ,以正確逸出所有反斜線。
接下來是 commands
區段,也就是 cmd.exe
命令。
"commands" : { "1-extract" : { "command" : "C:\\SharePoint\\SharePointFoundation2010.exe /extract:C:\\SharePoint\\SPF2010 /quiet /log:C:\\SharePoint\\SharePointFoundation2010-extract.log" }, "2-prereq" : { "command" : "C:\\SharePoint\\SPF2010\\PrerequisiteInstaller.exe /unattended" }, "3-install" : { "command" : "C:\\SharePoint\\SPF2010\\setup.exe /config C:\\SharePoint\\SPF2010\\Files\\SetupSilent\\config.xml" }
因為執行個體中的命令是依「名稱字母順序」處理,所以每個命令前會附加一個數字指示其所需的執行順序。因此,我們可以確保已先擷取安裝套件,接著安裝所有先決條件,最後才開始安裝 SharePoint。
接下來是 Properties
區段:
"Properties": { "InstanceType" : { "Ref" : "InstanceType" }, "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }, "SecurityGroups" : [ {"Ref" : "SharePointFoundationSecurityGroup"} ], "KeyName" : { "Ref" : "KeyPairName" }, "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "<script>\n", "cfn-init.exe -v -s ", { "Ref" : "AWS::StackName" }, " -r SharePointFoundation", " --region ", { "Ref" : "AWS::Region" }, "\n", "cfn-signal.exe -e %ERRORLEVEL% ", { "Fn::Base64" : { "Ref" : "SharePointFoundationWaitHandle" }}, "\n", "</script>" ]]}} }
在本節中, UserData
屬性包含將由 執行的cmd.exe
指令碼cfn-init
,由<script>
標籤包圍。您可以在這裡使用 Windows Powershell 指令碼,方法是將指令碼與<powershell>
標籤包圍在一起。Windows 堆疊必須再次以 base64 編碼等待條件再次處理 URL。
這裡會參考 SharePointFoundationWaitHandle,並搭配 cfn-signal
執行。範本中接下來WaitCondition
會宣告 WaitConditionHandle
和 關聯:
"SharePointFoundationWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle" }, "SharePointFoundationWaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "DependsOn" : "SharePointFoundation", "Properties" : { "Handle" : {"Ref" : "SharePointFoundationWaitHandle"}, "Timeout" : "3600" } }
由於執行所有步驟和安裝 SharePoint 可能需要一段時間,但不是整個小時,因此 會在逾時之前WaitCondition
等待一小時 (3600 秒)。
如果一切順利,則會使用彈性 IP 存取 SharePoint 執行個體:
"Outputs" : { "SharePointFoundationURL" : { "Value" : { "Fn::Join" : ["", ["http://", { "Ref" : "SharePointFoundationEIP" } ]] }, "Description" : "SharePoint Team Site URL. Please retrieve Administrator password of the instance and use it to access the URL" }
堆疊建立完成後,EIP 提供的 IP 地址會顯示在 AWS CloudFormation 主控台的輸出索引標籤中。但是,您需要先擷取產生的執行個體暫時管理員密碼,才可以存取執行個體。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的使用 RDP 連線至 Windows 執行個體。
如何管理 Windows 服務
您管理 Windows 服務的方式與管理 Linux 服務的方式相同,但使用 windows
鍵,而不是 sysvinit
。下列範例會啟動 cfn-hup
服務、將其設定為自動,並在修改 cfn-init
c:\cfn\cfn-hup.conf
或 c:\cfn\hooks.d\cfn-auto-reloader.conf
組態檔案時重新啟動服務。
"services" : { "windows" : { "cfn-hup" : { "enabled" : "true", "ensureRunning" : "true", "files" : ["c:\\cfn\\cfn-hup.conf", "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf"] } } }
您可以透過使用名稱(非顯示名稱)來參考服務,以相同的方式管理其他 Windows 服務。
如何故障診斷堆疊建立問題
如果您的堆疊在建立期間失敗,預設的行為會是復原故障。雖然這樣的預設行為一般而言是好的,因其可避免不必要的額外費用,但卻會對堆疊建立失敗原因進行除錯時造成困難。
若要關閉此行為,請在使用 AWS CloudFormation 主控台建立堆疊時選擇顯示進階選項,然後選取失敗時回復旁的無選擇器。這可讓您登入執行個體並檢視日誌檔案,以找出執行啟動指令碼時遇到的問題。
要查看的重要日誌如下:
-
EC2 組態日誌,位於
C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt
-
cfn-init 日誌,位於
C:\cfn\log\cfn-init.log
如需了解更多日誌,請參閱以下 EC2 指南: