将APNs证书上传到AWS Lambda

时间:2019-03-06 19:28:33

标签: django aws-lambda apple-push-notifications zappa

我正在将Django与Zappa一起使用,以连接到无服务器的AWS Lambda。为了启动和运行APN(Apple Push Notification服务),我最初必须将证书文件上传到服务器,以便后端可以在需要时访问它。但是,既然我已迁移到AWS Lambda,则不确定如何上传证书文件。

我使用此软件包django-push-notifications来使用APN,在Django设置中,我已经拥有

PUSH_NOTIFICATIONS_SETTINGS = { "APNS_CERTIFICATE": os.path.join(BASE_DIR, "../../Certificates_and_keys/prod_pushcert.pem"), "APNS_TOPIC": "org.reactjs.native.example.Spap", "UPDATE_ON_DUPLICATE_REG_ID": True, "USER_MODEL": "social.User", }

其中APNS_CERTIFICATE的值是APNs证书文件的路径。在使用AWS Lambda之前,我有另一台服务器,在该服务器上我使用ftp上传了证书文件。我不知道如何使用AWS Lambda做到这一点。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我不知道APNs证书有多长时间,但是如果它们是less than 4 KB,则可以将其添加为Lambda环境变量,并在启动时将其读入临时文件中(在settings.py中)。

如果它们大于4 KB,则可以将证书存储在S3中,然后在启动时将其下载到临时文件中:

import boto3
from tempfile import NamedTemporaryFile

s3 = boto3.client("s3")

with NamedTemporaryFile(delete=False) as f:
    s3.download_fileobj("mybucket", "mykey", f)

APNS_CERTIFICATE = f.name

(免责声明:我尚未测试此确切的代码)

这可能会变得很昂贵,因为每次调用Lambda时都会从S3获取文件。 Zappa的keep_warm功能可能会对此有所帮助,但是我不确定它是如何工作的,因此请稍加补充。

除非设置了DEBUG或您正在本地开发的其他指示器,否则您可能还希望禁用此功能,因此您不要尝试在开发过程中获取生产APNs证书。

答案 1 :(得分:0)

需要通过{em> Certificate Manager 服务下的AWS控制台在us-east-1区域(弗吉尼亚北部)中处理证书。其他地区将无法正常工作。

您可以选择导入证书

在那里拥有证书后,可以使用boto3来读取它并在代码中使用它。有关代码示例,请参见https://docs.aws.amazon.com/code-samples/latest/catalog/python-acm-get_certificate.py.html