Загрузить сертификат APNs в AWS Lambda - PullRequest
1 голос
/ 06 марта 2019

Я использую Django с Zappa для подключения к безсерверной AWS Lambda.Чтобы запустить APN (сервисы Apple Push Notification), мне первоначально пришлось загрузить файл сертификата на сервер, чтобы мой бэкэнд мог получать к нему доступ в любое время.Но теперь, когда я перешел на AWS Lambda, я не уверен, как загрузить файл сертификата.

Я использую этот пакет django-push-уведомления для использования 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.Есть предложения?

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Сверху головы я не знаю, как долго действуют сертификаты APN, но если они меньше 4 КБ , вы можете добавить их в качестве переменной среды Lambda и прочитать в временный файл при запуске (в settings.py).

Если их размер превышает 4 КБ, вы можете сохранить сертификат в 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

(Отказ от ответственности: я не проверял этот точный код)

Однако это может дорого обойтись, потому что вы извлекаете файл из S3 каждый раз, когда вызывается Lambda. Функция Zappa keep_warm может помочь в этом, но я не совсем уверен, как она работает, поэтому возьмите это с крошкой соли.

Возможно, вы также захотите отключить это, если DEBUG или другой индикатор, который вы разрабатываете локально, не установлен, поэтому вы не пытаетесь получить ваш сертификат APN производства во время разработки.

0 голосов
/ 07 марта 2019

Сертификаты необходимо обрабатывать в us-east-1 регионе (Северная Вирджиния) через консоль AWS в службе Certificate Manager . Другие регионы не будут работать.

Там у вас есть возможность Импортировать сертификат .

После того, как у вас есть сертификат, вы можете использовать boto3, чтобы прочитать его и использовать в своем коде. Пример кода см. https://docs.aws.amazon.com/code-samples/latest/catalog/python-acm-get_certificate.py.html

...