Я новичок в AWS, и у меня может быть простой вопрос, на который можно ответить.
(Я использую localstack для локальной разработки, если это имеет значение)
В лямбде я получил следующий код, который должен опубликовать сообщение в aws-sns.
def handler(event, context):
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.info("confirmed user!")
notification = "A test"
client = boto3.client('sns')
response = client.publish(
TargetArn = "arn:aws:sns:us-east-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
Message=json.dumps({'default': notification}),
MessageStructure='json'
)
return {
'statusCode': 200,
'body': json.dumps(response)
}
На данный момент я «жестко запрограммировал» ARN темы sns, которая выводится на консоль при развертывании (с помощью cdklocal deploy
).
Мне интересно, есть ли удобный способ поиска ARN ресурса AWS? Я видел, есть
cdk.Fn.getAtt(logicalId, 'Arn').toString();
функция, но я не знаю логический идентификатор sns перед развертыванием. Итак, как я могу искать ARN во время выполнения? Что такое лучшая практика?
(Это довольно раздражающая задача, отслеживать все ARN, если я просто жестко закодирую их как строки, и это определенно кажется мне неправильным)
Вы можете использовать функцию !GetAtt
в своем шаблоне CloudFormation, чтобы получить и передать ARN темы SNS в вашу Lambda.
Resources:
MyTopic:
Type: AWS::SNS::Topic
Properties:
{...}
MyLambda:
Type: AWS::Lambda::Function
Properties:
Environment:
Variables:
SNS_TOPIC_ARN: !GetAtt MyTopic.Arn