2017-08-15 9 views
0

Windows 2012のAMIを作成し、下記のCloudFormationテンプレートを使用してそのAMIのインスタンスを作成しました。クラウドフォーメーション - 4 cfnヘルパースクリプト間のやりとりと混同しています。これは私がやったことです。

そのJSONスクリプトでは、サービス(単純なもの)を無効にするPowerShellスクリプトを呼び出す必要があります。 EC2 Windows 2012インスタンスが作成されます。私はAMIを取る前にEC2Configサービスが実行されていることを確認しました。それは今働く。以下は、うまく動作するコードです。しかし、問題は、cfn-hup、cfn-signalとcfn-initの相互作用を明確に理解できていないことです。正直、私は4つのヘルパースクリプトすべてについて読んだ。しかし、私はこれらのヘルパースクリプトの周りに私の脳をラップしていません。

これらの4つのヘルパースクリプトがどのように連携して動作するかに関するブログやドキュメントはありますか?

{ 
    "AWSTemplateFormatVersion": "2010-09-09", 
    "Resources": { 
    "MyInstance": { 
     "Type": "AWS::EC2::Instance", 
     "Metadata" : { 
     "AWS::CloudFormation::Init" : { 
    "config" : { 
     "files" : { 
     "c:\\cfn\\cfn-hup.conf" : { 
      "content" : { "Fn::Join" : ["", [ 
      "[main]\n", 
      "stack=", { "Ref" : "AWS::StackId" }, "\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.MyInstance.Metadata.AWS::CloudFormation::Init\n", 
      "action=cfn-init.exe -v -s ", { "Ref" : "AWS::StackId" }, 
              " -r MyInstance", 
              " --region ", { "Ref" : "AWS::Region" }, "\n" 
      ]]} 
     }, 
     "c:\\scripts\\test.ps1" : { 
      "content": { "Fn::Join" : ["", [ 
      "Write-Host Hello World!\n" 
      ]]} 
     } 
     }, 
     "commands" : { 
     "1-run-script" : { 
      "command" : { "Fn::Join" : [ "", [ 
      "Powershell.exe Set-ExecutionPolicy Unrestricted -force;Unblock-File C:\\PowershellScripts\\WindowsServiceManager.ps1;. C:\\PowershellScripts\\WindowsServiceManager.ps1;SetWindowsServiceStartupType Dnscache Manual;StopWindowsService Dnscache" 
      ]]}} 
      }, 
     "services": { 
      "windows": { 
       "cfn-hup": { 
        "enabled": "true", 
        "ensureRunning": "true", 
        "files": ["c:\\cfn\\cfn-hup.conf", "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf"] 
        } 
      } 
     } 
    }         
    } 
    }, 
"Properties": { 
    "DisableApiTermination": "FALSE", 
    "ImageId": "ami-3723c04f", 
    "InstanceType": "t2.micro", 
    "KeyName": "EC2Instances", 
    "Monitoring": "false", 
    "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ 
    "<script>\n", 
    "cfn-init.exe -v -s ", { "Ref" : "AWS::StackName" }, 
    " -r MyInstance", 
    " --region ", { "Ref" : "AWS::Region" }, "\n", 

    "cfn-signal.exe -e 0 ", { "Fn::Base64" : { "Ref" : "WindowsServerWaitHandle" }}, "\n", 

    "</script>\n" 
    ]]}} 

} 
    }, 
    "WindowsServerWaitHandle": { 
     "Type": "AWS::CloudFormation::WaitConditionHandle" 
    }, 
    "WindowsServerWaitCondition": { 
    "Type": "AWS::CloudFormation::WaitCondition", 
    "DependsOn": "MyInstance", 
    "Properties": { 
     "Handle": { "Ref": "WindowsServerWaitHandle" }, 
     "Timeout": "1800" 
    } 
    }   
} 
} 
+0

ここでまともな説明が見つかりました:https://aws.amazon.com/blogs/devops/best-practices-for-deploying-applications-on-aws-cloudformation-stacks/ – Jason

答えて

0

はまともな説明をここで見つける:AWSは:: CloudFormation :: initはどのように動作するかの

https://aws.amazon.com/blogs/devops/best-practices-for-deploying-applications-on-aws-cloudformation-stacks/

シーケンス:

  1. あなたはAWS :: CloudFormationを使用してアプリケーションの設定を指定します:: CloudFormationテンプレート内のEC2インスタンスのInitセクション。
  2. テンプレートを使用してCloudFormationスタックの作成を開始します。
  3. AWS CloudFormationサービスは、EC2インスタンスを含むスタックの作成を開始します。
  4. EC2インスタンスが起動して実行されると、AWS :: CloudFormation :: Initテンプレート仕様に従ってインスタンスを設定するために、CloudFormationヘルパスクリプトcfn-initがインスタンス上で実行されます。*
  5. CloudFormationリモートAWS CloudFormationサービスにコンフィグレーションの結果(成功/失敗)を知らせるために、ヘルパースクリプトcfn-signalがインスタンス上で実行されます*オプションでEC2インスタンスの状態とスタックのマークを保持するCloudFormationサービスを持つことができますCloudFormationサービスがインスタンスの成功信号を受け取るまで「CREATE_COMPLETE」状態にします。テンプレートの保持期間は、CreationPolicyを使用して指定します。

* CloudFormationヘルパースクリプトは、LinuxとWindowsの両方でダウンロードできます。これらは、Amazonが提供するLinuxおよびWindows AMIにプリインストールされています。 EC2ユーザデータスクリプトでcfn-initとcfn-signalを起動するコマンドを指定する必要があります。インスタンスが起動して実行されると、ほとんどのLinuxディストリビューションとWindowsでは、EC2ユーザーデータスクリプトが自動的に実行されます。

アプリケーションスタックが起動して実行されると、スタックのライフサイクルでアプリケーションを更新したり、OSパッチを適用したり、その他の設定を更新したりする可能性があります。テンプレートのAWS :: CloudFormation :: Initセクションを更新するだけで(たとえば、新しいバージョンのアプリケーションパッケージを指定する)、UpdateStackを呼び出します。これを行うと、CloudFormationは更新されたテンプレートに従ってインスタンスメタデータを更新します。その後、インスタンス上で実行されているcfn-hupデーモンは更新されたメタデータを検出し、cfn-initを再実行して、更新された設定に従ってインスタンスを更新します。 cfn-hupは、LinuxとWindowsの両方で利用可能なCloudFormationヘルパスクリプトの1つです。

関連する問題