При использовании 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