2012-03-30 8 views

Respuesta

12

http://alestic.com/2009/06/ec2-user-data-scripts explica cómo hacerlo con datos de usuario. para errores sobre el uso de Java, vea AmazonEC2 launch with userdata.

tenga en cuenta que he visto mencionar que esto no funciona con Windows, solo con Unix.

[Actualización] más datos sobre la configuración de las variables de entorno aquí: https://forums.aws.amazon.com/message.jspa?messageID=139744

[Después de muchas pruebas] para mí, haciéndose eco de las variables de entorno en/etc/environment funciona mejor, como este:

reservation = connection.run_instances(image_id = image_id, 
    key_name = keypair, 
    instance_type = 'm1.small', 
    security_groups = ['default'], 
    user_data = '''#!/bin/sh\necho export foozle=barzle >> /etc/environment\n''') 

a continuación, al iniciar sesión:

[email protected]:~$ echo $foozle 
barzle 
4

también puede utilizar la recuperación instancia de metadatos como se explica en http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html

Desde el documento anterior, la siguiente petición GET podría recuperar datos de usuario de una instancia si se ejecuta desde dentro de la instancia:

GET http://169.254.169.254/latest/user-data 

De esta manera, los datos del usuario se puede recuperar de forma dinámica, incluso después de la instancia es Ya comenzó y se está ejecutando.

7

DESCARGO DE RESPONSABILIDAD: ¡No soy administrador de sistema!

Uso un cubo S3 seguro que significa un cubo al que solo tiene acceso la instancia que está iniciando. Puede configurar una función de IAM que se parece a:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:Get*", 
     "s3:List*" 
     ], 
     "Resource": "arn:aws:s3:::some-secure-bucket/*" 
    } 
    ] 
} 

A continuación, puede subir su archivo .env en ese cubo (almacenarlo encriptada). A continuación, para acceder a ella en su instancia EC2, puede utilizar las AWS herramientas CLI:

sudo apt-get install -y python-pip (for aws s3 CLI library) 
sudo pip install awscli 
aws s3 cp --region us-east-1 s3://some-secure-bucket/.some-dot-env-file output_file_path 

Puede tirar de este archivo hacia abajo cuando se ejecuta el código u, opcionalmente, hacer que suceda en el arranque, poniendo el comando antes mencionado cp en un init script ubicado en algún lugar como /etc/init.d/download_credentials.sh

Creo que esta es una muy buena opción para descargar cosas que cada instancia que utiliza una AMI necesita como credenciales. Sin embargo, si desea especificar los metadatos por instancia, simplemente implementé el uso de etiquetas que creo que funcionan bien. Para ello, alterar la función de IAM anterior con algo más como:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:Get*", 
     "s3:List*" 
     ], 
     "Resource": "arn:aws:s3:::some-secure-bucket/*" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "ec2:DescribeInstances", 
     "ec2:DescribeTags" 
     ], 
     "Resource": "*" 
    } 
    ] 
} 

Luego instalar ec2-api-tools

sudo sed -i.dist 's,universe$,universe multiverse,' /etc/apt/sources.list 
sudo apt-get update 
sudo apt-get install -y ec2-api-tools 

Y ahora usted debe ser capaz de obtener por instancia de metadatos a través de etiquetas, tales como el "Nombre "de la instancia:

ec2-describe-tags --filter resource-id="$(ec2metadata --instance-id)" --filter "key=Name" | cut -f5 

Nota: soy muy malo en la fiesta, así que estoy separar el nombre de rubí pero se puede usar tr para eliminar la línea, si usted está en él!

+0

Gran solución, Tony. Terminé haciendo algo similar, pero puse toda la secuencia de comandos 'Instance-Init.sh' en un depósito cifrado y lo puse en la creación de instancias. Mi script real de 'User-Data' solo instala Python, pip, was-cli, y luego descarga y ejecuta el script 'real'' Instance-Init.sh'. Puede ver mi pregunta similar aquí: http://stackoverflow.com/questions/29932355/is-it-secure-to-store-ec2-user-data-shell-scripts-in-a-private-s3-bucket. Pero la gran pregunta es, ¿esto es realmente seguro? – AJB

+0

Gran pregunta @AJB. Si tuviera esa pregunta, hablaría con el soporte de AWS directamente y conversaría con ellos sobre "qué tan seguro" porque esa es realmente la pregunta. Sé que es "lo suficientemente seguro" para mi caso de uso. Una persona de operaciones probablemente podría profundizar en detalles. También en una nota no relacionada, actualmente estoy usando la instancia de "datos de usuario" de las etiquetas, ya que encontré que las etiquetas son un gran problema para administrar desde una perspectiva del ciclo de vida de la instancia – Tony

Cuestiones relacionadas