ssl 在AWS Lambda中运行P4Python

xuo3flqw  于 2023-10-19  发布在  Python
关注(0)|答案(1)|浏览(106)

我正在编写一个应用程序,它可以从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文件会在根目录下创建,应用程序的其余部分会顺利运行。

xxe27gdn

xxe27gdn1#

看起来p4默认希望.p4trust文件位于用户的主目录中。在AWS Lambda环境中,这是不可能的,因为您只能写入/tmp目录。
但是,我认为您可以创建一个环境变量P4TRUST,它指向.p4trust文件的备用位置。您可以在Lambda函数配置中将其设置为/tmp/.p4trust
由于AWS Lambda的性质,/tmp的内容不能保证在Lambda调用中持久化,因此您应该考虑将文件持久化为脱离示例(例如,在S3中加密并限制访问),然后在调用Lambda函数时在Lambda环境中根据需要恢复它。

相关问题