メニュー
AWS CloudFormation
ユーザーガイド (API Version 2010-05-15)

AWS CloudFormation の Windows スタックのブートストラップ

このトピックでは、Windows スタックをブートストラップする方法と、スタック作成時の問題をトラブルシューティングする方法について説明します。CloudFormation で使用する独自の Windows イメージを作成する場合、詳しい手順についてはAmazon EC2 Microsoft Windows ガイドの「EC2ConfigService を使用して Windows インスタンスを設定する」を参照してください。Windows インスタンスで AWS CloudFormation のブートストラップツールを扱うには、EC2ConfigService を使って Windows インスタンスを設定する必要があります。

Windows スタックのブートストラップの例

解説として、次の URL で確認できる AWS CloudFormation の単一インスタンス用 SharePoint サーバーのテンプレート全体を詳しく見ていきます。

この例は以下の方法について示しています。

  • インスタンスにアクセスする IAM ユーザーとセキュリティグループを作成します。

  • 初期化ファイルの設定: cfn-credentialscfn-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" と呼ばれ、標準宣言で始まります。

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

この後に AWS::CloudFormation::Init の files セクションが宣言されます。

Copy
"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 ディレクトリに配置されます。具体的には次の 2 つです。

  • 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 のコマンドとなります。

Copy
"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 セクションです。

Copy
"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> タグで囲まれています。<powershell> タグでスクリプトを囲むことで、Windows Powershell スクリプトを使用することもできます。Windows スタックでは、待機条件ハンドル URL を再度 base64 エンコードする必要があります。

SharePointFoundationWaitHandle がここで参照され、cfn-signal で実行されます。WaitConditionHandle と、関連する WaitCondition は、テンプレートの次の部分で宣言されます。

Copy
"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 インスタンスへのアクセスが提供されます。

Copy
"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 コンソールの [Outputs] タブに表示されます。ただしインスタンスにアクセスするには、インスタンス用に自動的に生成される一時管理者パスワードを取得しておく必要があります。詳細については、Windows インスタンスの Amazon EC2 ユーザーガイドの「RDP を使用して Windows インスタンスに接続する」を参照してください。

Windows サービスを管理する方法

Linux サービスと同じようにWindows サービスを管理できますが、sysvinit の代わりに、windows キーを使用します。次の例では、cfn-hup サービスを開始し、それを Automatic に設定します。c:\cfn\cfn-hup.conf または c:\cfn\hooks.d\cfn-auto-reloader.conf 設定ファイルを cfn-init が変更する場合は、サービスを再起動します。

Copy
"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 ログ