amazon-ec2 - east - billing amazon ec2
¿Cómo pasar las variables de entorno al iniciar mediante programación un nuevo Amazon EC2 desde la imagen? (3)
DESCARGO DE RESPONSABILIDAD: No soy administrador de sistemas
Utilizo un cubo S3 seguro que significa un cubo al que solo tiene acceso la instancia que está iniciando. Puede configurar un rol 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/*"
}
]
}
Luego puede cargar su archivo .env
en ese .env
(almacenarlo encriptado). Luego, para acceder a él en su instancia de EC2, puede usar las herramientas cli de AWS:
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 bajar este archivo cuando se ejecuta el código o, opcionalmente, hacer que ocurra en el arranque colocando el comando cp
mencionado anteriormente en un script de inicio 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 todas las instancias que usan una AMI necesitan como credenciales. Sin embargo, si desea especificar metadatos por instancia, solo implementé el uso de etiquetas que creo que funcionan bien. Para hacer esto, modifique el rol 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 instale 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 debería poder obtener metadatos por instancia a través de etiquetas, como el "Nombre" de su instancia:
ec2-describe-tags --filter resource-id="$(ec2metadata --instance-id)" --filter "key=Name" | cut -f5
Nota: apesto en bash, así que estoy eliminando el nombre en ruby, ¡pero puedes usar tr
para eliminar la nueva línea si te gusta!
Estoy utilizando RunInstance () de la API de Java de AWS para iniciar una nueva instancia de EC2 desde mi imagen AMI personalizada. ¿Cómo transfiero las variables de entorno al nuevo EC2 INSTANCE, como la url de la base de datos, las credenciales de AWS, etc.?
También puede usar la recuperación de metadatos de la instancia como se explica en http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html
Desde el documento anterior, la siguiente solicitud GET recuperaría los datos del usuario para una instancia si lo ejecuta desde dentro de la instancia:
GET http://169.254.169.254/latest/user-data
De esta manera, los datos del usuario se pueden recuperar dinámicamente incluso después de que la instancia ya se haya iniciado y esté en ejecución.
http://alestic.com/2009/06/ec2-user-data-scripts explica cómo hacer esto con los datos de usuario. Para obtener más información sobre el uso de Java, consulte el lanzamiento de AmazonEC2 con userdata .
Tenga en cuenta que he visto mencionar que esto no funciona con Windows, solo Unix.
[actualizar] más datos sobre cómo configurar las variables de entorno aquí: https://forums.aws.amazon.com/message.jspa?messageID=139744
[después de muchas pruebas] para mí, hacer eco de las variables de entorno en / etc / environment funciona mejor, así:
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'''''')
luego al iniciar sesión:
ubuntu@ip-10-190-81-29:~$ echo $foozle
barzle