python-3.x - Google Adwords 脚本在 AWS Lambda 上运行:[Errno 30] 只读文件系统:'/home/sbx_user1051'
问题描述
一个 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
解决方案
看起来 Adwords 正在使用缓存,默认情况下,该缓存进入运行您的代码的用户的主目录。要解决此问题,请将环境变量设置XDG_CACHE_HOME
为/tmp/.cache
. 您可以在 Lambda 环境变量中进行设置。
推荐阅读
- r - annotation_custom 没有放置 grobs
- c# - 找出 ASP.NET Core 应用程序中的用户角色
- android - 如何反转弯曲底部导航?
- java - 尝试在java中发送邮件时出错
- c - 这是 C 中“makefile”的正确实现吗?
- hyperledger-fabric - Hyperledger Fabric:fabric-ca-client 使用的默认注册配置文件是什么?
- javascript - Javascript onclick充当退格按钮以删除插入符号之前的字符
- java - 不使用数组打印期望输出并从文件中读取
- azure - ASP.NET Core 2.2 应用无法在 Azure 应用服务上运行
- reactjs - 如何使被跨域读取阻止的背景图像显示出来?