将 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
我正在使用 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