Скрипт Google Adwords работает на AWS Lambda: [Errno 30] Файловая система только для чтения: '/ home / sbx_user1051' - PullRequest
0 голосов
/ 25 апреля 2019

Python-скрипт извлекает отчет Google AdWords, он работает, как и ожидалось, на моем локальном компьютере, но при развертывании в функции AWS Lambda я получил следующую ошибку

{
  "errorMessage": "[Errno 30] Read-only file system: '/home/sbx_user1051'",
  "errorType": "OSError",
  "stackTrace": [
    [
      "/var/task/lambda_function.py",
      24,
      "lambda_handler",
      "report_downloader = client.GetReportDownloader(version='v201809')"
    ],
    [
      "/var/task/googleads/adwords.py",
      370,
      "GetReportDownloader",
      "return ReportDownloader(self, version, server)"
    ],
    [
      "/var/task/googleads/adwords.py",
      1213,
      "__init__",
      "self.proxy_config, self._namespace, self._adwords_client.cache)"
    ],
    [
      "/var/task/googleads/common.py",
      819,
      "__init__",
      "transport = _ZeepProxyTransport(timeout, proxy_config, cache)"
    ],
    [
      "/var/task/googleads/common.py",
      667,
      "__init__",
      "cache = zeep.cache.SqliteCache()"
    ],
    [
      "/var/task/zeep/cache.py",
      77,
      "__init__",
      "self._db_path = path if path else _get_default_cache_path()"
    ],
    [
      "/var/task/zeep/cache.py",
      155,
      "_get_default_cache_path",
      "os.makedirs(path)"
    ],
    [
      "/var/lang/lib/python3.6/os.py",
      210,
      "makedirs",
      "makedirs(head, mode, exist_ok)"
    ],
    [
      "/var/lang/lib/python3.6/os.py",
      210,
      "makedirs",
      "makedirs(head, mode, exist_ok)"
    ],
    [
      "/var/lang/lib/python3.6/os.py",
      220,
      "makedirs",
      "mkdir(name, mode)"
    ]
  ]
}

Я знаю, что в Lambda он может записывать только файлы, расположенные в папке tem, но меня смущает то, что в моем сценарии я вообще не пишу ни в один файл, вот основная структура моего сценария:

client = adwords.AdWordsClient.LoadFromStorage('tmp/googleads.yaml')
report_downloader = client.GetReportDownloader(version='v201809')
report_query = (adwords.ReportQueryBuilder()
                  .Select( str)
                  .From('ACCOUNT_PERFORMANCE_REPORT')
                  .During('LAST_7_DAYS')
                  .Build())
results=report_downloader.DownloadReportAsStringWithAwql( report_query, 'TSV', skip_report_header=True, skip_column_header=True, skip_report_summary=True, include_zero_impressions=False)
campaigns=results.splitlines()

Посоветуйте, пожалуйста, как решить эту проблему. Конверт Python 3.6

1 Ответ

0 голосов
/ 25 апреля 2019

Похоже, что Adwords использует кеш, и по умолчанию этот кеш попадает в домашний каталог пользователя, выполняющего ваш код.Чтобы это исправить, установите переменную окружения XDG_CACHE_HOME на /tmp/.cache.Вы можете установить это в переменных окружения Lambda.

...