Tôi đang sử dụng AWS Java API RunInstance() để bắt đầu một phiên bản EC2 mới từ hình ảnh AMI tùy chỉnh của tôi. Làm cách nào để chuyển các biến môi trường sang EC2 INSTANCE mới như url cơ sở dữ liệu, thông tin đăng nhập AWS, v.v ...?Làm thế nào để vượt qua các biến môi trường khi lập trình bắt đầu một Amazon EC2 mới từ hình ảnh?
Trả lời
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
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.
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ó!
- 1. Làm thế nào để bắt đầu và dừng một cá thể Amazon EC2 lập trình trong java
- 2. MSBuild các biến môi trường bắt buộc
- 3. Có một biến môi trường qua Ruby
- 4. Làm thế nào để vượt qua biến môi trường của hudson như một tham số cho svn xây dựng
- 5. Biến môi trường modifiy lập trình?
- 6. Làm thế nào để vượt qua một biến TỪ TỪ TỪ một kịch bản lệnh shell?
- 7. Làm thế nào để tạo một biến môi trường mới trong UNIX ....?
- 8. Làm thế nào để thiết lập các biến môi trường bằng cách sử dụng Fabric
- 9. Làm cách nào để tự động chia tỷ lệ trường hợp của tôi trong Amazon EC2?
- 10. Đặt biến môi trường Linux theo lập trình trong Java
- 11. Làm thế nào để thiết lập một biến môi trường vĩnh viễn trong Linux?
- 12. Làm mới biến môi trường cho giải pháp VS mở
- 13. Làm thế nào để tạo NSCollectionView lập trình từ đầu?
- 14. Sự cố khi tạo môi trường lstnewen môi trường bắt đầu/kết thúc một môi trường khác
- 15. Làm thế nào để thiết lập biến môi trường PATH trong kịch bản CMake?
- 16. Amazon EC2 autoscaling trường hợp với các IP đàn hồi
- 17. Làm thế nào để thiết lập một biến môi trường trong vỏ emacs (eshell)?
- 18. Amazon EC2 Hostname Giữ Bắt Đặt lại
- 19. Làm thế nào để thiết lập biến môi trường dòng lệnh trong PHP shell_exec
- 20. lập trình viên haskell mới bắt đầu
- 21. Vượt qua một biến từ bộ điều khiển để xem
- 22. MySQL EC2 của Amazon không thể bắt đầu
- 23. hướng dẫn mới bắt đầu cho Amazon Web Services (EC2, S3, RDS, EBS, v.v.)
- 24. Làm thế nào để tạo một môi trường R mới từ C?
- 25. Làm thế nào để cấu hình PHP + Apache trên Amazon EC2?
- 26. Cách lấy các biến môi trường từ bên trong gvim
- 27. Làm thế nào để thiết lập cụm ElasticSearch với tự động mở rộng trên Amazon EC2?
- 28. Đọc một biến môi trường từ applicationContext.xml
- 29. Có thể thiết lập một biến môi trường để đầu ra của một lệnh trong cmd.exe
- 30. Node.js mãi mãi với môi trường biến
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
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