2013-05-16 39 views
32

Có thể tham chiếu các thuộc tính môi trường vùng chứa PARAM1/PARAM2 vv .. từ các tệp cấu hình .ebextensions. Nếu vậy, làm thế nào? Tôi đã thử $ PARAM1 nhưng nó dường như là một giá trị rỗng.Tham khảo các biến env từ cây đậu đàn hồi .Các tệp cấu hình liên kết

Tôi muốn đặt tên máy chủ khi khởi động để chứa DEV, QA hoặc PROD, mà tôi chuyển đến vùng chứa của mình qua biến môi trường PARAM1.

commands: 
    01-set-correct-hostname: 
    command: hostname myappname{$PARAM1}.com 
+0

Tại sao vẫn không có câu trả lời cho điều này?!?!? Dưới đây chỉ cho bạn biết làm thế nào để làm điều đó với 'contaienr_comands' không' lệnh'. – ThomasReggi

Trả lời

23

Hóa ra bạn chỉ có thể làm điều này trong container_commands phần, không phải là phần commands.

này hoạt động:

container_commands: 
    01-set-correct-hostname: 
    command: "hostname myappname{$PARAM1}.com" 

Xem http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-containers-format-container_commands để biết thêm chi tiết.

+0

Liên kết đó không đề cập đến bất kỳ điều gì về việc sử dụng biến môi trường trong các lệnh vùng chứa. – Nate

+1

@Nate Đọc phần Container_Commands, nơi nó nói "Họ cũng có quyền truy cập vào các biến môi trường như thông tin đăng nhập bảo mật AWS của bạn." – Kevin

+0

Bạn sẽ không gặp phải vấn đề về tên máy chủ nếu cấu hình beanstalk của bạn đang sinh ra nhiều cá thể ec2? – jmelanson

8

Đây là những gì phù hợp với tôi. Tôi đã thử cách tiếp cận được chấp nhận và nó không tạo ra kết quả mong muốn (các dấu ngoặc nhọn được đưa vào đầu ra). Các lệnh khắc phục sự cố được thực thi từ tệp .config khi tải lên Cây đậu Đàn hồi cũng là một thách thức (hoặc tôi không biết chính xác nơi cần tìm).

AWS Môi trường:

  • Loại - Elastic Beanstalk
  • Nền tảng - 64bit Amazon Linux 2015,09 v2.0.4 chạy PHP 5,6

đàn hồi Beanstalk Môi trường Thuộc tính (Configuration -> Software Configuration -> Thuộc tính môi trường):

  • Tên thuộc tính - HELLO_VARIABLE
  • Property Value - kiểm tra

mẫu .config file có trong thư mục .ebextensions trong tạo tác triển khai:

container_commands: 
    0_test-variable: 
    cwd: /tmp 
    command: "touch ${HELLO_VARIABLE}_0_.txt" 
    1_test-variable: 
    cwd: /tmp 
    command: "touch {$HELLO_VARIABLE}_1_.txt" 
    2_test-variable: 
    cwd: /tmp 
    command: "touch $HELLO_VARIABLE_2_.txt" 

Sau khi tạo tác đã được triển khai sử dụng đàn hồi Beanstalk thư mục/tmp trong vòng một Ví dụ EC2 sẽ chứa các tệp sau (lưu ý dấu ngoặc nhọn và vị trí của $):

  • chạm $ {HELLO_VARIABLE} _0_.txt tạo /tmp/test_0_.txt
  • touch {$ HELLO_VARIABLE} _1_.txt tạo /tmp/{test}_1_.txt
  • touch $ HELLO_VARIABLE_2_.txt tạo /tmp/.txt
+0

Lý do bạn không thấy đầu ra lệnh của mình trong tệp nhật ký là vì EB chỉ bao gồm các tệp nhật ký cụ thể. Tuy nhiên, bạn có thể thêm cfn-init-cmd.log vào gói. Tôi giải thích nó ở đây cho Windows, nhưng bạn sẽ có thể tìm ra cách thay đổi nó cho Linux. http://stackoverflow.com/a/37189606/674488 – tayl0rs

+0

để khắc phục sự cố trong /var/log/eb-activity.log – denov

5

Để biến các biến môi trường có sẵn ở giai đoạn lệnh, tôi phân tích chúng thành tệp có thể bash có nguồn gốc.

000001.envvars.cấu hình

... 
commands: 
    000001_envvars_to_bash_source_file: 
    command: | 
     # source our elastic beanstalk environment variables 
     /opt/elasticbeanstalk/bin/get-config --output YAML environment|perl -ne "/^\w/ or next; s/: /=/; print qq|\$_|" > /var/tmp/envvars 
     chmod 400 /var/tmp/envvars 
... 

Sau đó, tôi sử dụng: -

source /var/tmp/envvars 

trong các lệnh tiếp theo.

6

Câu trả lời được chấp nhận là khá lỗi thời.

Bây giờ bạn có thể sử dụng /opt/elasticbeanstalk/support/envvars tập tin đó đã được một kịch bản shell sẵn sàng để được nguồn gốc:

commands: 
    01_update_composer: 
    command: | 
     . /opt/elasticbeanstalk/support/envvars 
     /usr/bin/composer.phar self-update 

container_commands: 
    01_run_composer: 
    command: | 
    composer.phar install --no-scripts --no-dev # already has user-specified env variables 

Cập nhật:

Sau một cuộc điều tra sâu hơn chỉ ra rằng container_commands: bao gồm môi trường của bạn biến, nhưng không phải là commands:.

0

This blog mô tả chi tiết các tùy chọn khác nhau về cách bạn có thể đạt được điều này.

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