Estoy utilizando la ejecución RunInstance() de AWS Java API para iniciar una nueva instancia EC2 a partir de mi imagen personalizada AMI. ¿Cómo paso las variables de entorno al nuevo INSTANCE de EC2, como la URL de la base de datos, las credenciales de AWS, etc.?¿Cómo pasar variables de entorno cuando se inicia programáticamente una nueva Amazon EC2 a partir de la imagen?
Respuesta
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
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.
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!
- 1. Cómo transferir una imagen a un volumen de Amazon EBS para uso de EC2?
- 2. Definir actividad predeterminada (cuando se inicia la aplicación) programáticamente
- 3. Despliegue a Amazon EC2
- 4. ¿Imagen Apple Mac en Amazon EC2?
- 5. Amazon EC2 frente a Amazon EMR
- 6. ¿Deshabilitar la actividad de la actividad de inserción cuando se inicia una nueva actividad?
- 7. Cómo deshabilitar la carga de Amazon EC2?
- 8. ¿Cómo se redirige un dominio a Amazon EC2 Machine?
- 9. ¿Cómo selecciona una instancia de Amazon EC2 su kernel?
- 10. Cómo mantener variables de entorno cuando se usa SUDO
- 11. ¿Cómo funciona Amazon EC2 Auto Scaling?
- 12. Amazon EC2 - Biblioteca de imágenes PHP GD
- 13. Si detengo una instancia de Amazon EC2, ¿está esto guardado?
- 14. Pasar variables de entorno personalizadas a maven cargo
- 15. Pasar variables de entorno a una JVM, de manera independiente de la plataforma
- 16. Administración de instancias de Amazon EC2 reservadas
- 17. Amazon EC2: Jetty Unaccessible
- 18. Múltiples usuarios en Amazon EC2
- 19. Amazon EC2 vs PiCloud
- 20. Descargue Amazon EC2 AMI?
- 21. cómo se evalúan las variables de entorno?
- 22. Permiso de escritura de Amazon Ec2 FTP
- 23. Creación de prototipos para Amazon Ec2
- 24. Montaje del volumen antiguo de EBS en la nueva instancia: Amazon EC2
- 25. ¿Cómo establecer programáticamente una variable de entorno permanente en Linux?
- 26. Amazon EC2 Sql Rendimiento
- 27. ¿Cómo configuro variables de entorno bash a partir de un script?
- 28. ¿Cómo pasar variables a render_to_string?
- 29. ¿Cómo ejecutar una función cuando se inicia un servidor Express?
- 30. Amazon ec2 user-data, ¿cómo funciona?
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
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