O que é um “serviço suportado” em cloudformation-init :: services?

2

Estou tentando iniciar um daemon personalizado a partir de um script cloudformation :: init. O /etc/init.d/myservice é totalmente funcional; se eu fizer o login após o término do cfn-init,

sudo service myservice start

se comporta como esperado.

Há duas maneiras de ver isso para iniciar isso diretamente no script cloudformation e não consigo fazer nada disso funcionar: (1) Usando a estrutura cfn-init :: services (2) iniciando manualmente o script usando um comando cfn-init ::.

(1) aqui está a parte relevante do config.json como um serviço:

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

Qual produz o erro:

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-----------------------

Isto faz / não / produz um serviço em execução - não falha, nunca é iniciado. Parece haver aqui um pré-requisito de instalação que não posso encontrar documentado. Pacotes instalados pelo Yum (nginx, tomcat, etc) são iniciados sem avisos.

(2) Retrocedendo manualmente os trabalhos de serviço, no sentido em que o serviço é iniciado. No entanto, o serviço é executado como seu próprio usuário e algo parece se perder no serviço cfn, já que essa etapa na configuração nunca é concluída, o que impede a execução de qualquer outro conjunto de configurações. Montar / opt in config1 é um pouco irrelevante, incluí-lo para mostrar como são os comandos que são completos nos logs. Então a configuração relevante seria:

"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"
                }
            }
        }
    }
}

Que produz o log:

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

Novamente, no prompt de comando, o comando service produz um serviço em execução e a saída esperada:

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

Que tipo de retorno o cfn-init está procurando?

Obrigado!

    
por LizH 16.04.2015 / 13:02

1 resposta

4

A sintaxe de sua seção de serviços não está correta, por exemplo

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

Se você olhar o link da documentação afirma ...

Você pode usar a chave de serviços para definir quais serviços devem ser habilitados ou desabilitados quando a instância é iniciada. Nos sistemas Linux, essa chave é suportada usando sysvinit . Nos sistemas Windows, é suportado usando o gerenciador de serviços windows .

Como você está executando um sistema Linux, sua seção "services" deve ser semelhante ...

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

Espero que isso funcione!

    
por 25.10.2015 / 23:20