Создать тему SNS с протоколом электронной почты и конечной точкой адреса электронной почты, используя сервер - PullRequest
0 голосов
/ 27 февраля 2019

Создание функций лямбда с использованием без сервера , и я пытаюсь создать тему SNS с протоколом электронной почты.Затем я хочу передать этот arn как переменную ENV лямбда-функции.Я не могу найти никакой документации, кроме добавления темы для работы в процессе создания.Любая помощь / примеры приветствуются (я работаю в Python).

Чтобы уточнить, ниже будет создана функция с прикрепленной темой sns."вроде (это не работает ... просто пример):

events:
  sns:
    topicName: thing
    subscription: 
      - endPoint: "myemail@thing.com"
      - protocol: "email"

functions:
  dispatcher:
    handler: dispatcher.dispatch
    environment:
      SNS_TOPIC: {Ref: ThingSnsTopic}

В идеале часть sns должна создаваться вне функций, и я мог бы ссылаться на sns arn и использовать его как envвар

1 Ответ

0 голосов
/ 27 февраля 2019

При использовании Serverless вы можете использовать переменные окружения в вашем файле .yml следующим образом:

myProperty: ${env:MY_ENV_VAR}

Если вы хотите привязать его к SNS, ваш файл .yml должен выглядеть примерно так:

service: my-service


provider:
  name: aws
  runtime: python3.6


functions:
  hello:
    handler: handler.hello

   events:
     - sns: ${env:MY_ENV_VAR}

Теперь, если вы хотите получить доступ к переменной среды из вашей функции Lambda, это будет зависеть от того, на каком языке вы кодируете, но поскольку вы используете Python, это будет что-тонапример:

import os

print("environment variable: " + os.environ['MY_ENV_VAR'])

РЕДАКТИРОВАТЬ : После комментария ОП, я думаю, что я полностью понимаю проблему:

ARN являются предсказуемыми значениями.Они в значительной степени представляют собой конкатенацию вашего региона / идентификатора пользователя / названия темы, например:

arn:aws:sns:us-east-1:00000000:aaa

Если вы предоставляете переменную окружения для вашего Serverless.yml, например:

provider:
 name: aws
 stage: ${opt:stage, 'dev'}
 environment:
  MY_SECRET: ${env:MY_ENV_VAR}

Затем можно программно создать подписку на эту тему на основе ARN прогнозируемой подписки + переменную среды, которую вы определили.

Другой вариант - определить Выводит секцию в вашем файле .yml и использует CloudFormation Event , чтобы вызвать лямбда, которая программно создаст подписку на основе выведенного ARN

...