我正在製作一個Google AppEngine應用程序,並且懷疑我應該存儲(敏感)配置數據,例如憑據。什麼是在Google AppEngine中存儲配置的好地方(python)
我應該做一個單一的bigtable實體進行配置,還是有另一種建議的方式來存儲它。
我正在製作一個Google AppEngine應用程序,並且懷疑我應該存儲(敏感)配置數據,例如憑據。什麼是在Google AppEngine中存儲配置的好地方(python)
我應該做一個單一的bigtable實體進行配置,還是有另一種建議的方式來存儲它。
如果您可以將它們嵌入到源代碼中,那麼可以這樣做,但如果您需要它可以動態配置,那麼數據存儲就是要走的路。您可以避免通過在本地內存中緩存它們來獲取每個請求的設置。下面是一個輔助類:
class Configuration(db.Model):
_INSTANCE = None
@classmethod
def get_instance(cls):
if not cls._INSTANCE:
cls._INSTANCE = cls.get_or_insert('config')
return cls._INSTANCE
只需使用任何你需要的配置值這個子類(或修改類本身)。因爲加載的代碼在請求之間持續存在,所以您只需對每個應用程序實例執行一次提取操作即可 - 但如果您希望能夠動態更新配置,則可能需要超時生成。
如果你要緩存的東西在有限的時間,最好的選擇是簡單地存儲時間戳,當你取來:
class Configuration(db.Model):
CACHE_TIME = datetime.timedelta(minutes=5)
_INSTANCE = None
_INSTANCE_AGE = None
@classmethod
def get_instance(cls):
now = datetime.datetime.now()
if not cls._INSTANCE or cls._INSTANCE_AGE + cls.CACHE_TIME < now:
cls._INSTANCE = cls.get_or_insert('config')
cls._INSTANCE_AGE = now
return cls._INSTANCE
將它們存儲在模塊中。你可以去簡單的,就像一個config.py
模塊,說:
AMAZON_KEY = 'XXXX'
然後使用:
import config
service = my_amazon_service(config.AMAZON_KEY)
還是有一個稍微複雜的配置對象,它可以讓你有你的應用程序合理的默認值,名稱空間配置鍵等。
如果是敏感數據,你應該不是在源代碼存儲,因爲它將被檢入源代碼管理。錯誤的人(在你的組織內部或外部)可能會在那裏找到它。另外,您的開發環境可能會使用生產環境中的不同配置值。如果這些值存儲在代碼中,那麼您將不得不在開發和生產中運行不同的代碼,這是一種混亂和糟糕的做法。
在我的項目,我把配置數據在數據存儲中使用這個類:
from google.appengine.ext import ndb
class Settings(ndb.Model):
name = ndb.StringProperty()
value = ndb.StringProperty()
@staticmethod
def get(name):
NOT_SET_VALUE = "NOT SET"
retval = Settings.query(Settings.name == name).get()
if not retval:
retval = Settings()
retval.name = name
retval.value = NOT_SET_VALUE
retval.put()
if retval.value == NOT_SET_VALUE:
raise Exception(('Setting %s not found in the database. A placeholder ' +
'record has been created. Go to the Developers Console for your app ' +
'in App Engine, look up the Settings record with name=%s and enter ' +
'its value in that record\'s value field.') % (name, name))
return retval.value
你的應用程序將這樣做是爲了得到一個值:
AMAZON_KEY = Settings.get('AMAZON_KEY')
如果對於一個值鍵入數據存儲區中,您將獲得它。如果沒有,則會創建佔位符記錄並引發異常。該例外會提醒您轉到Developers Console並更新佔位符記錄。
我發現這需要猜測出設置配置值。如果您不確定要設置什麼配置值,只需運行代碼,它會告訴您!
幹得好,作品像一個魅力,我還添加了一套方法! – 2016-06-19 20:47:50
什麼樣的憑據? – systempuntoout 2010-09-23 10:34:53
@systempuntoout例如我的亞馬遜AWS憑證用於訪問S3 – 2010-09-23 10:53:57
如果您不喜歡源代碼中的普通憑據,唯一的方法是在數據存儲上使用配置模型,否則可以將設置存儲在某些.ini文件中使用[ConfigParser](http://docs.python.org/library/configparser.html)訪問它。 – systempuntoout 2010-09-23 12:38:42