我正在编写一个应用程序,它可以从Perforce中检索更改文件,并列出所有已更改的文件。
我想在AWS Lambda上部署它,但每当它运行时,我都会收到以下错误:
The authenticity of 'xxx.xxx.xxx.xxx:1666' can't be established,
this may be your first attempt to connect to this P4PORT.
The fingerprint for the key sent to your client is 'xx:xx:....
To allow connection use the 'p4 trust' command.'
这是我的Python代码:
### Create the P4 instance
p4 = P4()
p4.port = P4PORT
p4.user = P4USER
p4.password = P4PASSWD
p4.client = P4CLIENT
### Connect
connection = p4.connect()
print(f'Connection established. {connection}')
trust = p4.run_trust( '-i', P4FINGERPRINT )
print(f'Trust succeeded... {trust}')
### Logging in...
p4.run_login()
从日志中,我确实看到连接已建立,并且trust命令成功
Connection established. P4 [xx@xx_main ssl:xx.xx.xx.xx:1666] connected
Trust succeeded... ["The fingerprint of the server of your P4PORT setting\n'ssl:xx.xx.xx.xx:1666' is not known.\nThat fingerprint is xx:xx:xx.....\n", "Added trust for P4PORT 'ssl:xx.xx.xx.xx:1666'\n"]
但是,当运行p4.run_login()
命令时,我再次得到上述错误。我怀疑,由于这是在AWS Lambda上运行的,它没有创建.p4trust
文件的权限,这意味着它永远无法建立信任。
以前有人试过这个吗?有没有建议/帮助?
谢谢.
编辑:我应该补充的是,当运行与本地Docker容器相同的代码时,.p4trust
文件会在根目录下创建,应用程序的其余部分会顺利运行。
1条答案
按热度按时间xxe27gdn1#
看起来p4默认希望.p4trust文件位于用户的主目录中。在AWS Lambda环境中,这是不可能的,因为您只能写入
/tmp
目录。但是,我认为您可以创建一个环境变量
P4TRUST
,它指向.p4trust文件的备用位置。您可以在Lambda函数配置中将其设置为/tmp/.p4trust
。由于AWS Lambda的性质,
/tmp
的内容不能保证在Lambda调用中持久化,因此您应该考虑将文件持久化为脱离示例(例如,在S3中加密并限制访问),然后在调用Lambda函数时在Lambda环境中根据需要恢复它。