메뉴
AWS CloudFormation
사용 설명서 (API Version 2010-05-15)

AWS CloudFormation Windows 스택 부트스트랩

이 주제에서는 Windows 스택을 부트스트랩하고 스택 생성 문제를 해결하는 방법을 설명합니다. CloudFormation에서 사용할 고유한 Windows 이미지를 생성하려는 경우, 자세한 내용은 Amazon EC2 Microsoft Windows GuideConfiguring a Windows Instance Using EC2ConfigService를 참조하십시오. Windows 인스턴스를 AWS CloudFormation 부트스트랩 도구에서 사용하려면 EC2ConfigService를 사용하여 Windows 인스턴스를 설정해야 합니다.

Windows 스택 부트스트랩 예

이 예시에서는 AWS CloudFormation 단일 인스턴스 Sharepoint 서버 템플릿을 검사합니다. 전체 내용은 다음 URL에서 확인할 수 있습니다.

이번 예제에서는 다음 작업 방법에 대해 설명합니다.

  • 인스턴스에 액세스하는 데 필요한 IAM 사용자 및 보안 그룹 생성

  • 초기화 파일 구성: cfn-credentials, cfn-hup.confcfn-auto-reloader.conf

  • 패키지(예: Sharepoint Foundation 2010)를 다운로드하여 서버 인스턴스에 설치

  • WaitCondition을 사용하여 리소스가 준비되었는지 확인

  • Amazon 탄력적 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" } },

여기서 세 파일이 생성되어 서버 인스턴스의 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 경로를 참조할 경우 항상 다른 백슬래시를 추가하여 모든 백슬래시를 적절히 이스케이프해야 합니다.

다음은 cmd.exe 명령인 [commands] 섹션입니다.

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초)을 대기한 이후에 시간 초과됩니다.

아무 문제가 없다면 SharePoint 인스턴스에 액세스하는 데 탄력적 IP가 사용됩니다.

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 서비스를 관리하는 방법

sysvinit 대신 windows 키를 사용한다는 점을 제외하면 Linux 서비스와 동일한 방법으로 Windows 서비스를 관리합니다. 다음 예에서는 cfn-hup 서비스를 시작하고 [Automatic]으로 설정한 다음 cfn-init가 c:\cfn\cfn-hup.conf 또는 c:\cfn\hooks.d\cfn-auto-reloader.conf 구성 파일을 수정하면 서비스를 다시 시작합니다.

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.logcfn-init 로그