【问题标题】:Upload APNs certificate to AWS Lambda将 APNs 证书上传到 AWS Lambda
【发布时间】:2019-07-28 13:46:15
【问题描述】:

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

【问题讨论】:

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


    【解决方案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 证书。

    【讨论】:

    • 实际上只有 4KB 以上。将证书文件的内容硬编码到我的 settings.py 中怎么样,我可以这样做吗?对字符串进行硬编码,将其存储到临时文件中并使用文件路径?我要试试。
    • @RonyAzrak 我不建议这样做,特别是如果代码要开源 - 我相信 APNs 证书是向您的应用程序用户发送通知所需的唯一东西,所以它如果它被泄露,那就太糟糕了。
    【解决方案2】:

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

    您可以选择导入证书

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

    【讨论】:

      猜你喜欢
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 2018-06-30
      • 2016-10-13
      相关资源
      最近更新 更多