AWS CloudFormation Windows スタックのブートストラップ
このトピックでは、Windows スタックをブートストラップする方法と、スタック作成時の問題をトラブルシューティングする方法について説明します。CloudFormation で使用する独自の Windows イメージを作成する場合、手順については「Amazon EC2 Microsoft Windows ガイド」の「EC2ConfigService を使用して Windows インスタンスの設定」を参照してください。Windows インスタンスで AWS CloudFormation のブートストラップツールを扱うには、EC2ConfigService を使って Windows インスタンスを設定する必要があります。
Windows スタックのブートストラップの例
説明のために、AWS CloudFormation 単一インスタンスの Sharepoint サーバーテンプレートを取り上げます。
テンプレートは、以下の URL で完全に表示できます。
この例は以下の方法について示しています。
-
インスタンスにアクセスする IAM ユーザーとセキュリティグループを作成します。
-
初期化ファイルの設定:
cfn-credentials
、cfn-hup.conf
、cfn-auto-reloader.conf
。 -
サーバーインスタンスに SharePoint Foundation 2010 などのパッケージをダウンロードしてインストールします。
-
WaitCondition を使用して、リソースの準備が完了していることを確認します。
-
Amazon Elastic IP (EIP) をもつインスタンスの IP を取得します。
AWS CloudFormation のヘルパースクリプト cfn-init
を使用して、Windows Single Server Sharepoint Foundation テンプレートの AWS::CloudFormation::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" } },
3 つのファイルがここで作成され、サーバーインスタンスの 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
プロパティに、cfn-init
によって実行される cmd.exe
が含まれています。この部分は <script> タグで囲まれています。<powershell> タグでスクリプトを囲むことで、Windows Powershell スクリプトを使用することもできます。Windows スタックでは、待機条件ハンドル URL を再度 base64 エンコードする必要があります。
SharePointFoundationWaitHandle がここで参照され、cfn-signal
で実行されます。[WaitConditionHandle] と、関連する [WaitCondition] は、テンプレートの次の部分で宣言されます。
"SharePointFoundationWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle" }, "SharePointFoundationWaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "DependsOn" : "SharePointFoundation", "Properties" : { "Handle" : {"Ref" : "SharePointFoundationWaitHandle"}, "Timeout" : "3600" } }
すべてのステップの実行と SharePoint のインストールにはしばらく時間がかかるため (1 時間未満)、WaitCondition はタイムアウトするまで 1 時間 (3600 秒) 待機します。
すべての処理が正常に完了すると、Elastic 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 ユーザーガイド」の「Windows インスタンスに接続する」を参照してください。
Windows サービスを管理する方法
Linux サービスと同じようにWindows サービスを管理できますが、windows
の代わりに、sysvinit
キーを使用します。次の例では、cfn-hup
サービスを開始し、それを Automatic に設定します。c:\cfn\cfn-hup.conf
または c:\cfn\hooks.d\cfn-auto-reloader.conf
構成ファイルを cfn-init が変更する場合は、サービスを再起動します。
"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 コンソールでスタックを作成するときに [Show Advanced Options] (高度なオプションの表示) を選択し、[Rollback on failure] (失敗時のロールバック) の横にある [No] (いいえ) セレクタを選択します。これにより、インスタンスにログインし、ログファイルを確認できるようになり、起動スクリプト実行時に発生した問題を特定できます。
調査対象の重要なログは次のとおりです。
-
C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt
にある EC2 構成ログ -
C:\cfn\log\cfn-init.log
にある cfn-init ログ
その他のログについては、これらの EC2 ガイドを参照してください。