首页 > 解决方案 > 如何将 AWS Glue 作业连接到 Salesforce

问题描述

我正在关注这样的问题和类似他的 博客, 但由于(我认为)库版本冲突,我无法使连接正常工作。

我想使用这个库(afaik 是最常用和引用最多的库)从 aws 粘合作业连接到 Salesforce。这段代码在我的本地机器上工作,但在胶水上,当我使用“python shell”配置时,我收到以下消息:ERROR: botocore 1.12.232 has requirement urllib3<1.26,>=1.20; python_version >= "3.4", but you'll have urllib3 1.26.2 which is incompatible.

或者,如果我使用“spark”选项:Traceback (most recent call last): File "/tmp/bp-etl-crm-sparkV2", line 1, in <module> from simple_salesforce import Salesforce File "/tmp/simple_salesforce-1.10.1-py2.py3-none-any.whl/simple_salesforce/__init__.py", line 4, in <module> from .api import Salesforce, SFType File "/tmp/simple_salesforce-1.10.1-py2.py3-none-any.whl/simple_salesforce/api.py", line 18, in <module> from .login import SalesforceLogin File "/tmp/simple_salesforce-1.10.1-py2.py3-none-any.whl/simple_salesforce/login.py", line 16, in <module> from authlib.jose import jwt ModuleNotFoundError: No module named 'authlib'

代码就像连接和查询一样简单,我再次测试过,当我从本地控制台尝试而不是 aws 胶水时,凭据和连接确实有效:

from simple_salesforce import Salesforce

def main():
    print("INIT")
    sf = Salesforce(username='username', password='pw', security_token='securitytoken', domain='test')
    res_bulk = sf.bulk.Account.query('SELECT Id, Name FROM Table')
    print(res_bulk)

if __name__ == "__main__":
    main()

到目前为止我尝试了什么:

关于我可能做错什么的任何想法,或者我还能尝试使其发挥作用。

标签: python-3.xamazon-web-servicesapisalesforceaws-glue

解决方案


simple_salesforce 模块依赖于 authlib、密码学等。在 Glue 版本 2.0(Spark 2.4、python 3)上,您需要将以下参数添加到胶水作业中:

--additional-python-modules:密码学==3.0,simple-salesforce==1.11.1 image_screenshot

您必须编辑作业并在“安全配置、脚本库和作业参数(可选)”下找到“作业参数”选项。

(这些版本是兼容的并且对我有用)


推荐阅读