Usando o Chef Solo para provisionar uma instância do Windows EC2 e inicializá-la

4

Estou tentando automatizar nosso processo de CI para alguns aplicativos .NET e, em um mundo perfeito, eu gostaria de criar uma instância do Windows EC2 para cada um deles, inicializar a instância para instalar o Chef Solo e depois executar um Receita do chef para instalar algumas dependências e o próprio software empacotado.

No entanto - eu sou um novato e não tenho idéia, mesmo que seja viável e muito menos por onde começar:)

Eu sou bem versado nas ferramentas de linha de comando da AWS, então posso ativar uma AMI ok, mas além disso, estou bem preso. Eu gostaria de evitar a criação de um AMI personalizado com o chef pré-instalado, já que tira muitas das vantagens.

Eu acho que isso é essencialmente o que eu preciso fazer - mas é (sem surpresa) focado no Linux:

link

Alguém tem um link para alguém que tenha feito isso ou algo semelhante antes? Ou uma maneira melhor de conseguir o que eu gostaria de fazer?

Qualquer ajuda apreciada.

    
por Kieran Benton 22.03.2013 / 18:54

2 respostas

8

A maioria dos recursos de bootstrap do Windows é focada no Hosted Chef e usa o knife-windows plugin.

No entanto, isso deve ser possível com o Chef solo.

Se você não está criando uma AMI com chef-client , o primeiro passo é obter o Full Chef Windows Installer lá.

Felizmente, se bem me lembro, winrm está ativado por padrão nas AMIs da Amazon do Windows. Dê uma olhada aqui para uma possível solução de bootstrap: link

Você pode fazer o bootstrap de outras coisas ao mesmo tempo; como Ruby Windows Installer etc. No mesmo processo, pegue seus livros de culinária, papéis, etc. e inicie o provisionamento do seu Chef.

UPDATE

Eu comecei a fazer isso de uma maneira um pouco diferente, usando --user-data-file ao criar a instância. Isso pode ser usado com a API da AWS, ferramentas de linha de comando ou simplesmente colado na interface da Web quando Ativando a Instância .

Estou usando o Chocolatey , um gerenciador de pacotes, para instalar o chef-cliente.

<script>
@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin
cinst chef-client
</script>

Basicamente: <script> diz aos scripts de dados do usuário da AWS que temos um arquivo em lote para processar.
@powershell... (etc) é um comando para instalar o Chocolatey em são documentos .
cinst chef-client instala o chef-client package .

Nada disso requer qualquer entrada do usuário. Os dados do usuário são executados como um administrador local.

Todas as AMIs da Amazon executam os dados do usuário na primeira inicialização (por padrão) e não nas inicializações subseqüentes. Portanto, esta é uma maneira muito simples de obter chef-client no lugar sem precisar se conectar ao RDP ou até mesmo obter sua senha de administrador.

    
por 26.03.2013 / 07:35
1

Uma alternativa é simplesmente passar um "script de dados do usuário" escrito no Powershell. Você acabou de criar um arquivo de texto semelhante ao seguinte (hello.ps1):

< powershell >

#Code to download and install aplications goes here

< /powershell >

Então, quando você inicia a instância, simplesmente passa o arquivo userdata:

ec2run --region "us-east-1" "$ami" '

    --group "$mygroup" '

    --subnet "$mySubnet" --instance-type  "m1.medium" '

    --key "$myKey" '

    --user-data-file "hello.ps1"

Você pode baixar seus binários do S3 e fazer suas instalações completamente através do script único do PowerShell. Aqui há alguma documentação da Amazon para sua referência

    
por 20.08.2013 / 10:44