2

我正在使用 Django 和 Zappa 连接到无服务器 AWS Lambda。为了让 APN(Apple 推送通知服务)启动并运行,我最初必须将我的证书文件上传到服务器,以便我的后端可以在需要时访问它。但是现在我迁移到 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 做到这一点。有什么建议么?

4

2 回答 2

1

我不知道 APNs 证书有多长,但如果它们小于 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 证书。

于 2019-03-06T20:06:06.370 回答
0

证书需要通过证书管理器服务us-east-1下的 AWS 控制台在区域(弗吉尼亚北部)处理。其他地区不行。

在那里您可以选择导入证书

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

于 2019-03-07T16:01:17.000 回答