引導窗 AWS CloudFormation 口堆棧 - AWS CloudFormation

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

引導窗 AWS CloudFormation 口堆棧

本主題說明如何引導 Windows 堆疊和故障診斷堆疊建立問題。如果您要建立自己的 Windows 映像以搭配使用 CloudFormation,請參閱 Amazon EC2 Microsoft 視窗指南中的使用 EC2 設定 Windows 執行個體ConfigService中的相關資訊以取得指示。您必須使用 EC2 設定 Windows 執行個ConfigService 體,才能使用 AWS CloudFormation 啟動載入工具。

引導 Windows 堆疊的範例

為了說明目的,我們將檢查 AWS CloudFormation 單一執行個體 SharePoint伺服器範本。

您可以在下列 URL 中檢視完整的範本:

此範例將進行以下示範:

  • 建立 IAM 使用者和安全性群組以存取執行個體。

  • 設定初始化檔案:cfn-credentialscfn-hup.confcfn-auto-reloader.conf

  • 在伺服器執行個體上下載並安裝套件,例如 SharePoint Foundation 2010。

  • 使用 a WaitCondition 來確保資源已準備就緒。

  • 擷取具有 Amazon 彈性 IP (EIP) 的執行個體 IP。

AWS CloudFormation 協助程式指令碼cfn-init是用來執行每個這些動作,根據 Windows 單一伺服器 SharePoint 基礎範本中的AWS::CloudFormation::Init資源中的資訊。

AWS::CloudFormation::Init區段的名稱為 SharePointFoundation "「,並以標準宣告開頭:

"SharePointFoundation": { "Type" : "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : {

在此之後,將宣告 AWS::CloudFormation::Initfiles (檔案) 區段:

"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.confAWS::CloudFormation::Init 的中繼資料變更時,cfn-hup 啟動更新 (呼叫 cfn-init) 所用的掛接組態檔案。

還會下載一個檔案到伺服器:SharePointFoundation.exe。此檔案是用來安裝 SharePoint在伺服器執行個體上。

重要

因為 Windows 上的路徑使用反斜線 ('\') 字元,因此每當您參考範本中的 Windows 路徑時,都必須記住在另一個反斜線前面加上另一個反斜線,以正確逸出所有反斜線。 AWS CloudFormation

接著是 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 屬性包含將由 cfn-init 執行的 cmd.exe 指令碼 (以 <script> 標籤括住)。在此您可以用 <powershell> 標籤括住指令碼,以改用 Windows Powershell 指令碼。Windows 堆疊必須再次以 base64 編碼等待條件再次處理 URL。

SharePointFoundationWaitHandle 在這裡引用並運行cfn-signal. WaitConditionHandle和相關聯WaitCondition會在範本中宣告下一步:

"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 服務並將其設為 Automatic (自動),如果 cfn-init 修改 c:\cfn\cfn-hup.confc:\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 指南: