Google KMS на AppEngine Dev Server - беспорядок регистрации
Это известная проблема: https://issuetracker.google.com/issues/63253097
В дополнение к моему вопросу о том, как Google KMS работает с App Engine, я открываю новый вопрос о связанном, но проблемном побочном эффекте.
А именно, обнаружение Google Cloud API, похоже, хочет пройти несколько путей за пределами изолированной программной среды AppEngine. Это само по себе не является проблемой, но делает тестирование и отладку очень проблематичными, поскольку каждая попытка регистрируется, производя сотни строк, как показано ниже:
ИНФОРМАЦИЯ 03.07.2017 14:44:51 Песочница заблокировала доступ к файлу "/ Users"
ИНФОРМАЦИЯ 03.07.2017 14:44:51 Если это статический файл, проверьте, что
application_readable: true
установлен в вашем app.yamlИНФОРМАЦИЯ 03.07.2017 14:44:52 Песочница заблокировала доступ к файлу "/usr/lib/Acrobat9/Resource/CMap"
ИНФОРМАЦИЯ 03.07.2017 14:44:52 Если это статический файл, проверьте
application_readable: true
установлен в вашем app.yamlИНФОРМАЦИЯ 03.07.2017 14:44:52 Песочница заблокировала доступ к файлу "/usr/lib/Acrobat8/Resource/CMap"
ИНФОРМАЦИЯ 03.07.2017 14:44:52 Если это статический файл, проверьте
application_readable: true
установлен в вашем app.yaml
Есть ли способ отключить или заставить замолчать эти запросы или логи?
РЕДАКТИРОВАТЬ * Один из многих результатов, напечатанных путем добавления traceback.print_stack()
в log_access_check_fail
в stub.py
(извините, здесь не очень разборчиво):
Тест № 1: Импорт Sentry.io ворон pkg_resources
File "/Users/bmh/testapp/application.py", line 3, in <module>
from nassau.application import app, sentry
File "/Users/bmh/testapp/nassau/application.py", line 28, in <module>
from raven.contrib.flask import Sentry
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/site-packages/raven/__init__.py", line 16, in <module>
VERSION = __import__('pkg_resources') \
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3037, in <module>
@_call_aside
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3021, in _call_aside
f(*args, **kwargs)
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3050, in _initialize_master_working_set
working_set = WorkingSet._build_master()
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 646, in _build_master
ws = cls()
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 639, in __init__
self.add_entry(entry)
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 695, in add_entry
for dist in find_distributions(entry, True):
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2006, in find_on_path
path_item = _normalize_cached(path_item)
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2217, in _normalize_cached
_cache[filename] = result = normalize_path(filename)
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2210, in normalize_path
return os.path.normcase(os.path.realpath(filename))
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/posixpath.py", line 375, in realpath
path, ok = _joinrealpath('', filename, {})
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/posixpath.py", line 400, in _joinrealpath
if not islink(newpath):
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/posixpath.py", line 135, in islink
st = os.lstat(path)
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/stubs.py", line 286, in __call__
log_access_check_fail(path)
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/stubs.py", line 51, in log_access_check_fail
traceback.print_stack()
Я удалил зависимость от Sentry / Raven, но трассировка стека продолжается через:
Тест № 2: Импорт колб pkgutil
File "/Users/bmh/testapp/application.py", line 3, in <module>
from nassau.application import app
File "/Users/bmh/testapp/nassau/application.py", line 72, in <module>
app = Flask('nassau')
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/site-packages/flask/app.py", line 331, in __init__
instance_path = self.auto_find_instance_path()
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/site-packages/flask/app.py", line 622, in auto_find_instance_path
prefix, package_path = find_package(self.import_name)
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/site-packages/flask/helpers.py", line 661, in find_package
loader = pkgutil.get_loader(root_mod_name)
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pkgutil.py", line 464, in get_loader
return find_loader(fullname)
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pkgutil.py", line 475, in find_loader
loader = importer.find_module(fullname)
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pkgutil.py", line 184, in find_module
path = [os.path.realpath(self.path)]
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/posixpath.py", line 375, in realpath
path, ok = _joinrealpath('', filename, {})
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/posixpath.py", line 400, in _joinrealpath
if not islink(newpath):
File "/Users/bmh/testapp/python-virtualenv/lib/python2.7/posixpath.py", line 135, in islink
st = os.lstat(path)
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/stubs.py", line 286, in __call__
log_access_check_fail(path)
File "/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/python/stubs.py", line 51, in log_access_check_fail
traceback.print_stack()
Должен быть лучший способ представления трассировки стека при переполнении стека:)
3 ответа
Я штатный инженер, работающий над dev_appserver. Об этом сообщении журнала сообщается из /google/appengine/tools/devappserver2/python/stubs.py метода log_access_check_fail
Мы добавили это сообщение в журнал, чтобы напомнить пользователям о поведении dev_appserver о блокировке доступа к файлу.
Рекомендуемое решение: dev_appserver.py --log_level warning
--log_level устанавливает уровень журнала в локальном процессе выполнения Python. Log_access_check_fail() имеет значение INFO и не будет регистрироваться. ПРИМЕЧАНИЕ: этот флаг также предотвратит вход других уровней INFO в ваше приложение.
Тем временем мы работаем над исправлением этого метода log_access_check_fail. Это может быть снижение уровня ведения журнала log_access_check_fail() до уровня DEBUG.
Это довольно раздражает, и для этого есть сообщение об ошибке.
В то же время мы можем отфильтровать эти сообщения, но нам нужно выяснить, какие logger
они используют. Посмотрите документы для получения дополнительной информации о том, как обрабатываются записи в журнале. Взгляните на источник для stubs.py
Я нашел:
logging.info('Sandbox prevented access to file "%s"', filename)
logging.info('If it is a static file, check that '
'`application_readable: true` is set in your app.yaml')
Поэтому они используют корневой логгер (плохая практика в целом). Чтобы отфильтровать эти сообщения в вашем корневом логгере, добавьте в appengine_config.py
:
import logging
class StubsFilter(logging.Filter):
def filter(self, record):
return 'stubs.py' != record.filename
logging.root.addFilter(StubsFilter())
Мне кажется, что эти сообщения происходят из файла GAE (.local) с именем stubs.py.
В моем первом случае stubs.py искал файлы, которых там не было. Поэтому вы можете проверить, действительно ли существует файл "/usr/lib/Acrobat8/Resource/CMap". Затем, начиная с stubs.py, попытайтесь выяснить, какой файл пытается его загрузить.
Мой проект использует web.py, внезапно я снова начал получать сообщения (stubs.py), на этот раз о файлах.pyc. Я поместил skip_files: внизу моего файла app.yaml, и он подавляет сообщения, но я не проверял, полностью ли компилируется мое приложение.
skip_files: - ^(.*/)?\.pyc$
Подробнее о среде исполнения Python GAE и песочнице здесь. https://cloud.google.com/appengine/docs/standard/python/runtime