Назад | Перейти на главную страницу

Почему мой скрипт Cloudformation не запускает apache?

Я пытаюсь создать экземпляр для запуска apache, и вроде все работает, но веб-сервер не запускается.

Запускается нормально вручную. Если я перезагружу экземпляр, он не запустит автоматически веб-сервер.

Раздел Мои ресурсы содержит:

"Resources" : {
  "CfnUser" : {
    "Type" : "AWS::IAM::User",
    "Properties" : {
      "Path": "/",
      "Policies": [{
        "PolicyName": "root",
        "PolicyDocument": { "Statement":[{
          "Effect":"Allow",
          "Action":"cloudformation:DescribeStackResource",
          "Resource":"*"
        }]}
      }]
    }
  },

  "HostKeys" : {
    "Type" : "AWS::IAM::AccessKey",
    "Properties" : {
      "UserName" : {"Ref": "CfnUser"}
    }
  },

  "testInstance" : {
    "Type" : "AWS::EC2::Instance",
    "Metadata" : {
        "Comment1" : "Just testing",
        "AWS::CloudFormation::Init" : {
          "config" : {
              "packages" : {
                  "yum" : {
                      "mysql"        : [],
                      "mysql-server" : [],
                      "mysql-libs"   : [],
                      "httpd24"      : [],
                      "php54"        : [],
                      "php54-common" : [],
                      "php54-mysql"  : [],
                      "php54-pdo"    : [],
                      "php54-xml"    : [],
                      "php54-mcrypt" : [],
                      "php54-gd"     : []
                  }
              }
          },

          "services" : {
              "sysvinit" : {
                  "httpd"    : { "enabled" : "true", "ensureRunning" : "true" },
                  "mysqld"   : { "enabled" : "true", "ensureRunning" : "true" }
              }
          }

      }
  },

  "Properties" : {
    "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "64"] },
    "InstanceType"   : { "Ref" : "InstanceType" },
    "SecurityGroups" : [ {"Ref" : "StackWebAccess"} ],
    "KeyName"        : { "Ref" : "KeyName" },

    "UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [
      "#!/bin/bash -v\n",
      "yum update -y aws-cfn-bootstrap\n",
      "# Install LAMP packages\n",
      "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackName" }, " -r testInstance ",
      "    --access-key ",  { "Ref" : "HostKeys" },
      "    --secret-key ", {"Fn::GetAtt": ["HostKeys", "SecretAccessKey"]},
      "    --region ", { "Ref" : "AWS::Region" }, " || error_exit 'Failed to run cfn-init'\n"
        ] ] } }        
  }
},

"StackWebAccess" : {
  "Type" : "AWS::EC2::SecurityGroup",
  "Properties" : {
    "GroupDescription" : "Enable SSH access and HTTP access on the inbound port",
    "SecurityGroupIngress" : [ 
      {
        "IpProtocol" : "tcp",
        "FromPort" : "22",
        "ToPort" : "22",
        "CidrIp" : "0.0.0.0/0"
      },
      {
        "IpProtocol" : "tcp",
        "FromPort" : "80",
        "ToPort" : "80",
        "CidrIp" : "0.0.0.0/0"
      }
    ]
  }
  }
},

Мой cfn-init.log:

2013-01-23 13:55:58,064 [INFO] Running configSets: default
2013-01-23 13:55:58,065 [INFO] Running configSet default
2013-01-23 13:55:58,065 [INFO] Running config config
2013-01-23 13:57:23,097 [INFO] Yum installed [u'php54-common', u'php54-xml', u'php54', u'httpd24', u'php54-gd', u'mysql-server', u'php54-mcrypt', u'mysql-libs', u'php54-mysql', u'php54-pdo', u'mysql']
2013-01-23 13:57:23,102 [INFO] ConfigSets completed

Что-то не хватает, или это должно запускать службы?

На всякий случай, если кто-то столкнется с этим, проблема заключалась в ошибке вложенности - блок services {} должен быть частью блока config {}, а не на том же уровне.

Изменить: рабочий блок ресурсов:

  "Resources" : {

    "CfnUser" : {
      "Type" : "AWS::IAM::User",
      "Properties" : {
        "Path": "/",
        "Policies": [{
          "PolicyName": "root",
          "PolicyDocument": { "Statement":[{
            "Effect":"Allow",
            "Action":"cloudformation:DescribeStackResource",
            "Resource":"*"
          }]}
        }]
      }
    },

    "HostKeys" : {
      "Type" : "AWS::IAM::AccessKey",
      "Properties" : {
        "UserName" : {"Ref": "CfnUser"}
      }
    },

    "testInstance" : {
      "Type" : "AWS::EC2::Instance",
      "Metadata" : {
        "Comment1" : "Install the default packages",
        "AWS::CloudFormation::Init" : {
          "config" : {
            "packages" : {
              "yum" : {
                "mysql"        : [],
                "mysql-server" : [],
                "mysql-libs"   : [],
                "httpd24"      : [],
                "php54"        : [],
                "php54-common" : [],
                "php54-mysql"  : [],
                "php54-pdo"    : [],
                "php54-xml"    : [],
                "php54-mcrypt" : [],
                "php54-gd"     : []
              }
            },

            "services" : {
              "sysvinit" : {
                "httpd"    : { "enabled" : "true", "ensureRunning" : "true" },
                "mysqld"   : { "enabled" : "true", "ensureRunning" : "true" }
              }
            }
          }
        }
      },
      "Properties" : {
        "ImageId" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "64"] },
        "InstanceType"   : { "Ref" : "InstanceType" },
        "SecurityGroups" : [ {"Ref" : "StackWebAccess"} ],
        "KeyName"        : { "Ref" : "KeyName" },


        "UserData"       : { "Fn::Base64" : { "Fn::Join" : ["", [
          "#!/bin/bash -v\n",
          "yum update -y aws-cfn-bootstrap\n",
          "# Install LAMP packages\n",
          "/opt/aws/bin/cfn-init -s ", { "Ref" : "AWS::StackName" }, " -r testInstance ",
          "    --access-key ",  { "Ref" : "HostKeys" },
          "    --secret-key ", {"Fn::GetAtt": ["HostKeys", "SecretAccessKey"]},
          "    --region ", { "Ref" : "AWS::Region" }, " || error_exit 'Failed to run cfn-init'\n"
            ] ] } }        
      }
    },

    "StackWebAccess" : {
      "Type" : "AWS::EC2::SecurityGroup",
      "Properties" : {
        "GroupDescription" : "Enable SSH access and HTTP access on the inbound port",
        "SecurityGroupIngress" : [ 
          {
            "IpProtocol" : "tcp",
            "FromPort" : "22",
            "ToPort" : "22",
            "CidrIp" : "0.0.0.0/0"
          },
          {
            "IpProtocol" : "tcp",
            "FromPort" : "80",
            "ToPort" : "80",
            "CidrIp" : "0.0.0.0/0"
          }
        ]
      }
    }


  },