我正在将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做到这一点。有什么建议吗?
答案 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