将 APNs 证书上传到 AWS Lambda

Upload APNs certificate to AWS Lambda

我正在使用 Django 和 Zappa 连接到无服务器 AWS Lambda。为了启动 APNs(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 做到这一点。有什么建议吗?

我不知道 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 证书。

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

您可以选择导入证书

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