Как мы можем включить ведение журнала SNS для уведомлений, отправляемых в AWS Lambda с помощью SDK?

Требование:

Включить ведение журнала статуса доставки SNS (в CloudWatch) для уведомлений, отправляемых в AWS Lambda с помощью SDK (не через консоль)

Проблема:

С помощью консоли мы можем легко включить ведение журнала статуса доставки выбрав протокол «AWS Lambda». Однако с помощью SDK можно только установить это для протокола «конечной точки приложения платформы», который имеет обязательное свойство PlatformApplicationArn, поэтому его нельзя использовать для других протоколов журналов.

Что-то мне не хватает или эта функция еще недоступна?


person Deiv    schedule 15.05.2019    source источник


Ответы (2)


Итак, после множества хлопот из-за того, что документация крайне вводит в заблуждение, я разобрался.

Чтобы включить ведение журнала для протокола Lambda (а другие я не тестировал), вы должны использовать SetTopicAttributes. Несмотря на то, что в документации указано, что AttributeName - это карта, содержащая DeliveryPolicy, DisplayName или Policy, на самом деле вам нужно установить AttributeName на LambdaSuccessFeedbackRoleArn, LambdaFailureFeedbackRoleArn и LambdaSuccessFeedbackSampleRate в 3 отдельных вызовах SNS.setTopicAttributes ().

Итак, параметры будут выглядеть так:

let paramsSuccessFeedbackRoleArn = {
    TopicArn: topicArn,
    AttributeName: "LambdaSuccessFeedbackRoleArn",
    AttributeValue: "replace with arn for SuccessFeedbackRoleArn"
};
let paramsFailureFeedbackRoleArn = {
    TopicArn: topicArn,
    AttributeName: "LambdaFailureFeedbackRoleArn",
    AttributeValue: "replace with arn for FailureFeedbackRoleArn"
};
let paramsSuccessFeedbackSampleRate = {
    TopicArn: topicArn,
    AttributeName: "LambdaSuccessFeedbackSampleRate",
    AttributeValue: 0
};

И затем 3 вызова SDK, по одному для каждого параметра.

person Deiv    schedule 17.05.2019

Чтобы дополнить @Deiv anwser, вот как это можно сделать в python и boto3:

client = boto3.client('sns')

snsarn='SNS topic ARN'

snslogarn = 'ARN of role that can write to CloudWatch Logs'

response = client.set_topic_attributes(
        TopicArn=snsarn,
        AttributeName='LambdaFailureFeedbackRoleArn',
        AttributeValue=snslogarn)

response = client.set_topic_attributes(
        TopicArn=snsarn,
        AttributeName='LambdaSuccessFeedbackRoleArn',
        AttributeValue=snslogarn)  

response = client.set_topic_attributes(
        TopicArn=snsarn,
        AttributeName='LambdaSuccessFeedbackSampleRate',
        AttributeValue='0')       

Затем, чтобы проверить, установлены ли атрибуты, можно использовать awc cli:

aws sns get-topic-attributes --topic-arn "SNS topic ARN"
person Marcin    schedule 28.08.2019