2012-03-30 20 views

risposta

12

http://alestic.com/2009/06/ec2-user-data-scripts spiega come farlo con i dati utente. per ottenere informazioni sull'uso di Java, vedere AmazonEC2 launch with userdata.

nota che ho visto menzionare che questo non funziona con Windows, solo Unix.

[update] più dati su come impostare le variabili d'ambiente qui: https://forums.aws.amazon.com/message.jspa?messageID=139744

[dopo molte prove] per me, riecheggiando le variabili di ambiente in/etc/environment funziona meglio, in questo modo:

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''') 

poi al momento del login:

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

È anche possibile utilizzare il recupero di metadati esempio come spiegato al http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html

Dal documento di cui sopra, la seguente richiesta GET sarebbe recuperare i dati degli utenti per un'istanza se si esegue dall'interno dell'istanza:

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

In questo modo, i dati degli utenti possono essere recuperati in modo dinamico anche dopo che l'istanza è già avviato e in esecuzione.

7

DISCLAIMER: Io non sono un amministratore di sistema!

Uso un bucket S3 sicuro che indica un bucket a cui solo l'istanza che si sta avviando ha accesso. È possibile impostare un ruolo IAM che assomiglia:

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

Quindi è possibile caricare il file .env in quel secchio (conservarlo criptato). Poi per accedervi sul istanza EC2, è possibile utilizzare gli strumenti CLI 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 

Si può tirare questo file verso il basso quando il codice viene eseguito o opzionalmente farlo accadere al boot mettendo il suddetto comando cp in un init script situato da qualche parte come /etc/init.d/download_credentials.sh

Penso che questa sia una buona opzione per scaricare cose che ogni istanza che utilizza un AMI ha bisogno di credenziali. Tuttavia, se si desidera specificare i metadati per istanza, ho implementato semplicemente tag che ritengo siano validi. Per fare questo, alterare il ruolo IAM di cui sopra con qualcosa di più simile:

{ 
    "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": "*" 
    } 
    ] 
} 

Poi installare 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 

E ora si dovrebbe essere in grado di ottenere per ogni istanza dei metadati attraverso i tag, come ad esempio il "Nome "dell'istanza:

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

Nota: faccio schifo a bash così sto spogliando il nome in ruby, ma si potrebbe usare tr per rimuovere il ritorno a capo, se siete in esso!

+0

Ottima soluzione, Tony. Ho finito per fare qualcosa di simile, ma ho inserito il mio intero script 'Instance-Init.sh' in un bucket crittografato e l'ho inserito in istanza. Il mio attuale script User-Data sta semplicemente installando Python, pip, was-cli e quindi scaricando ed eseguendo lo script 'reale' 'Instance-Init.sh'. Puoi vedere la mia domanda simile qui: http://stackoverflow.com/questions/29932355/is-it-secure-to-store-ec2-user-data-shell-scripts-in-a-private-s3-bucket. Ma la grande domanda è, è davvero sicuro? – AJB

+0

Ottima domanda @AJB. Se avessi questa domanda, parlerei direttamente con il supporto AWS e chattare con loro su "quanto sicuro" perché questa è davvero la domanda. So che è "abbastanza sicuro" per il mio caso d'uso. Una persona operatrice potrebbe probabilmente approfondire i dettagli. Inoltre, su una nota non correlata, sto attualmente utilizzando l'istanza "user data" dei tag poiché ho trovato che i tag sono un enorme problema da gestire da una prospettiva del ciclo di vita dell'istanza – Tony