close

最近要做的一個案子環境配置是

Linux ubuntu 18.04

nginx

venv + Django

python 3.7

uwsgi

golang + assumerole

aws cli

主要是一個Django的專案要和某個aws的服務溝通 所以會需要用到aws cli。雖然Django可以順利透過nginx 跑起來,但是框架的套件boto 一直吃不到AWS的環境變數

在我設定了assumerole這個套件之後,環境變數已經有AWS的基本變數,分別是 AWS_SECRET_ACCESS_KEY,AWS_ACCESS_KEY_ID, AWS_SESSION_TOKEN等等,如果進入venv之後使用python 也可以用os抓到環境變數。但是,一但使用uwsgi 跑起來之後,python的套件boto就吃不到這些環境變數了,會出現noAuthHandlerFound的錯誤。

這是為什麼呢?因為uwsgi天生就是不會管環境變數。你必須要把參數寫進某個檔案裡面(ex: yourfile) 然後再在uwsgi的ini檔案裡面加入for迴圈來讀取這些變數。

 

yourfile檔案內容:

VAR1=value1
VAR2=value2
...

uwsgi檔案則要加上這幾行

[uwsgi]
for-readline = path/to/yourfile
  env = %(_)
endfor = 

這樣,這些參數就會作為linux環境變數,被uwsgi的python os.environ抓到。

不過,目前即便我使用了這個方法,仍然過不了aws的認證這一關,似乎是因為token會有超時的問題。目前原因仍在研究中。不過今天發現了uwsgi的一個特性,先記錄下來。

arrow
arrow
    全站熱搜

    工程師黑田 發表在 痞客邦 留言(0) 人氣()