2012-03-30 14 views

Trả lời

12

http://alestic.com/2009/06/ec2-user-data-scripts giải thích cách thực hiện điều này với dữ liệu người dùng. cho gotchas về việc sử dụng Java, xem AmazonEC2 launch with userdata.

lưu ý rằng tôi đã thấy rằng việc này không hoạt động với Windows, chỉ có Unix.

[cập nhật] nhiều dữ liệu hơn trên thiết lập các biến môi trường ở đây: https://forums.aws.amazon.com/message.jspa?messageID=139744

[sau khi thử nghiệm nhiều] đối với tôi, lặp lại các biến môi trường vào/etc/môi trường làm việc tốt nhất, như thế này:

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

sau đó khi đăng nhập:

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

Bạn cũng có thể sử dụng hồi dụ siêu dữ liệu như đã giải thích ở http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html

Từ các tài liệu trên, các yêu cầu GET sau sẽ lấy dữ liệu người dùng cho một ví dụ nếu bạn chạy nó từ bên trong dụ:

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

Bằng cách này, dữ liệu người dùng có thể được lấy tự động ngay cả sau khi dụ là đã bắt đầu và chạy.

7

KHUYẾN CÁO: Tôi không phải là quản trị viên của sys!

Tôi sử dụng nhóm S3 an toàn có nghĩa là một nhóm chỉ có phiên bản bạn đang khởi chạy mới có quyền truy cập. Bạn có thể thiết lập vai trò IAM trông giống như:

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

Sau đó, bạn có thể tải lên tệp .env trong nhóm đó (lưu trữ mã hóa). Sau đó, để truy cập nó trên EC2 của bạn, bạn có thể sử dụng AWS cụ 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 

Bạn có thể kéo tập tin này xuống khi mã chạy hoặc tùy chọn làm cho nó xảy ra lúc khởi động bằng cách đặt nói trên cp lệnh trong một init script nằm ở một nơi nào đó giống như /etc/init.d/download_credentials.sh

Tôi nghĩ đây là một lựa chọn thực sự tốt để tải xuống mọi thứ mà mỗi cá thể sử dụng AMI cần như thông tin đăng nhập. Tuy nhiên, nếu bạn muốn chỉ định từng siêu dữ liệu cá thể, tôi chỉ triển khai bằng cách sử dụng các thẻ mà tôi nghĩ là hoạt động tốt. Để làm điều này, thay đổi vai trò IAM ở trên với một cái gì đó giống như:

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

Sau đó cài đặt 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 

Và bây giờ bạn sẽ có thể để có được mỗi trường hợp siêu dữ liệu thông qua thẻ, chẳng hạn như "Tên "sơ thẩm của bạn:

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

Lưu ý: tôi suck lúc bash vì vậy tôi tước tên trong ruby ​​nhưng bạn có thể sử dụng tr để loại bỏ các newline nếu bạn đang vào nó!

+0

Giải pháp tuyệt vời, Tony. Tôi đã kết thúc làm một cái gì đó tương tự, nhưng tôi đặt đầy đủ của tôi 'Instance-Init.sh' kịch bản trong một thùng được mã hóa và kéo nó vào khi instantiation. Kịch bản 'User-Data' thực tế của tôi chỉ là cài đặt Python, pip, cli, và sau đó tải xuống và chạy tập lệnh 'Instance-Init.sh'' thực '. Bạn có thể thấy câu hỏi tương tự của tôi ở đây: http://stackoverflow.com/questions/29932355/is-it-secure-to-store-ec2-user-data-shell-scripts-in-a-private-s3-bucket. Nhưng câu hỏi lớn là, điều này có thực sự an toàn không? – AJB

+0

Câu hỏi tuyệt vời @AJB. Nếu tôi có câu hỏi đó, tôi sẽ nói chuyện trực tiếp với AWS và trò chuyện với họ về "an toàn" bởi vì đó thực sự là câu hỏi. Tôi biết nó là "đủ an toàn" cho trường hợp sử dụng của tôi. Một người ops có lẽ có thể đào sâu vào chi tiết hơn. Cũng trên một lưu ý không liên quan, tôi hiện đang sử dụng ví dụ "dữ liệu người dùng" của các thẻ khi tôi tìm thấy các thẻ là một nỗi đau lớn để quản lý từ góc nhìn vòng đời của cá thể – Tony

Các vấn đề liên quan