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

Что такое «поддерживаемый сервис» в cloudformation-init :: services?

Я пытаюсь запустить собственный демон из сценария cloudformation :: init. /Etc/init.d/myservice полностью функционален; если я вхожу в систему после завершения cfn-init,

sudo service myservice start

ведет себя как положено.

Я вижу два способа запустить это непосредственно из сценария облачной информации, и я не могу заставить ни один из них работать: (1) Использование структуры cfn-init :: services (2) запуск сценария вручную с помощью команда cfn-init ::.

(1) это соответствующая часть config.json как службы:

"Metadata": {
    "AWS::CloudFormation::Init": {
        "configSets": {
            "ascending": [
                "config5"
            ],
            "default": [
                "config5"
            ]
        },
        "config5": {
            "services": {
                "myservice": {
                    "enabled": "true",
                    "ensureRunning": "true"
                }
            }
        }
    }
}

Что вызывает ошибку:

2015-04-16 06:24:25,541 [INFO] -----------------------Starting build-----------------------
2015-04-16 06:24:25,856 [INFO] Running configSets: ascending
2015-04-16 06:24:25,856 [INFO] Running configSet ascending
2015-04-16 06:24:49,942 [INFO] Running config config5
2015-04-16 06:24:49,942 [WARNING] Unsupported service manager: myservice
2015-04-16 06:24:49,945 [INFO] ConfigSets completed
2015-04-16 06:24:49,949 [INFO] -----------------------Build complete-----------------------

Это создает / не создает работающую службу - она ​​не дает сбоев, она просто никогда не запускается. Похоже, здесь есть предварительные условия для установки, которые я не могу найти в документации. Пакеты, установленные Yum (nginx, tomcat и т. Д.), Запускаются без предупреждений.

(2) Запуск службы вручную работает в том смысле, что служба запускается. Однако служба запускается как собственный пользователь, и что-то, кажется, теряется в службе cfn, поскольку этот шаг в настройке никогда не завершается, что не позволяет запускать любые другие наборы конфигурации. Монтирование / opt в config1 немного несущественно, я включил его, чтобы показать, какие завершенные команды выглядят в журналах. Таким образом, соответствующая конфигурация будет:

"Metadata": {
    "AWS::CloudFormation::Init": {
        "configSets": {
            "ascending": [
                "config1",
                "config5"
            ],
            "default": [
                "config5"
            ]
        },
        "config1": {
            "commands": {
                "mount1": {
                    "command": "umount /dev/xvdc"
                },
                "mount2": {
                    "command": "mount /dev/xvdc /opt"
                }
            }
        },
        "config5": {
            "commands": {
                "first_launch": {
                    "command": "/etc/init.d/myservice start"
                }
            }
        }
    }
}

Что производит журнал:

2015-04-16 06:24:25,541 [INFO] -----------------------Starting build-----------------------
2015-04-16 06:24:25,856 [INFO] Running configSets: ascending
2015-04-16 06:24:25,856 [INFO] Running configSet ascending
2015-04-16 06:24:25,860 [INFO] Running config config1
2015-04-16 06:24:25,876 [INFO] Command mount1 succeeded
2015-04-16 06:24:25,901 [INFO] Command mount2 succeeded
2015-04-16 06:24:49,942 [INFO] Running config config5

Опять же, из командной строки команда service создает работающую службу и ожидаемый результат:

bash-4.1$ sudo service myservice start
Starting MyService: STARTED MyService Thu Apr 16 06:58:27 EDT 2015
-bash-4.1$

Какой возврат ищет cfn-init?

Спасибо!

Синтаксис раздела ваших услуг не совсем правильный, т.е.

"services": {
    "myservice": {
        "enabled": "true",
        "ensureRunning": "true"
    }
}

Если вы посмотрите документацию http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html#aws-resource-init-services Здесь утверждается ...

Вы можете использовать ключ services, чтобы определить, какие службы должны быть включены или отключены при запуске экземпляра. В системах Linux этот ключ поддерживается с помощью sysvinit. В системах Windows это поддерживается с помощью windows Менеджер по обслуживанию.

Поскольку вы используете систему Linux, ваша "services" раздел должен выглядеть так ...

"services": {
    "sysvinit" : {
        "myservice": {
            "enabled": "true",
            "ensureRunning": "true"
         }
    }
}

Надеюсь, это поможет!