2012-05-24 15 views
8

Estoy intentando cargar datos de usuario en un Ubuntu 12.04 LTS AMI (ami-a29943cb, pero he intentado algunos otros en vano) a través de ec2.run_instances de boto (..., user_data = USER_DATA). Del mismo modo, no he tenido éxito con el suministro manual de los datos del usuario al iniciar las instancias a través de la consola de AWS. No hay resultados o mensajes en/var/logs/syslog para ninguno de los métodos que he probado.Ubuntu AMI no está cargando datos de usuario

user_data se ve algo como lo siguiente, leída en forma de cadena de un archivo:

#!/usr/bin/env python 

import boto 

AWS_BOOTSTRAP_BUCKET = '' 
AWS_ACCESS_KEY_ID  = '' 
AWS_SECRET_ACCESS_KEY = '' 

# Pull processing script from S3. 
print 'Bootstrapping started.....' 
print 'Connecting to S3...' 
s3  = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) 
bucket = s3.get_bucket(AWS_BOOTSTRAP_BUCKET) 
print 'Downloading bootstrap file...' 
key = bucket.get_key('xxx') 
key.get_contents_to_filename('xxx') 

print 'Importing Bootstrap file...' 
import xxx 
xxx.process() 

# Shut down the EC2 instance running this process. 
print 'Shutting down this instance...' 
import socket 
desired_hostname = socket.gethostname() 
ec2 = boto.connect_ec2(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) 
reservations = ec2.get_all_instances() 
for reservation in reservations: 
    for instance in reservation.instances: 
     if desired_hostname in instance.private_dns_name: 
      instance.terminate() 

, además, he tratado de subir el archivo a un depósito de S3 pública y su carga de esta manera, una vez más, a ninguna disponible:

#include 
https://s3.amazonaws.com/bucket/file.py 

¿Alguien tiene algún consejo al respecto? ¿Estoy completamente mal entendiendo el propósito de user-data/cloud-init o la tecnología simplemente está rota en la AMI que estoy tratando de utilizar?

+1

¿Has probado esto? 'Sugerencia: si agrega set -x en la parte superior de una secuencia de comandos bash, se emitirá cada comando ejecutado. Si agrega set -e a la secuencia de comandos, entonces la secuencia de comandos user-data saldrá en el primer comando que no tiene éxito. Éstos lo ayudan a identificar rápidamente dónde pudieron haber comenzado los problemas. [Fuente] (http://alestic.com/2009/06/ec2-user-data-scripts) – Daan

Respuesta

11

Es difícil saber lo que ocurrió sin un mensaje de error, pero hay algunos lugares que usted puede buscar:

  1. El archivo /var/log/cloud-init.log generalmente contener errores (por ejemplo, boto fracaso importación) que se produjo durante instancia bootstrapping .
  2. /var/lib/cloud/instance El directorio contendrá los guiones primas y datos de usuario descargados en la instancia
  3. Puede ver/editar user_data dentro de la consola AWS haciendo clic derecho en la instancia, para ver si boto rellenan correctamente.

Buscar en esos lugares debe ayudar a proporcionar claridad.

Sé Ubuntu 12.04 viene con boto 2.2.2:

[email protected]:/var/lib/cloud/instance# python 
Python 2.7.3 (default, Apr 20 2012, 22:44:07) 
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import boto 
>>> boto.__version__ 
'2.2.2' 

..pero me pregunto si en realidad es accesible en su PYTHONPATH en tiempo de ejecución.

+0

Gracias por los maravillosos consejos. Sin duda será invaluable para futuros desarrolladores. Mi problema era el Ubuntu AMI, por alguna razón, no estaba cargando ningún dato de usuario. Sin embargo, las AMI de Amazon cargaron los datos correctamente. – kfr2

+0

Estoy predispuesto hacia las distribuciones basadas en Ubuntu versus Redhat como la AMI de Amazon (mejores paquetes, herencia de Debian, etc.), pero a cada una de ellas. ¡Lo importante es que lo tienes funcionando! :) – gabrtv

+0

En mi caso en Ubuntu 16 LTS /var/log/cloud-init-output.log me dio información adicional para resolver mi problema con la ejecución de scripts de carga de datos de usuario. – user1811107