Я пытаюсь настроить AWS лямбда-функцию для передачи своего вывода в уведомление SNS, но, похоже, она не работает. Функция успешно выполняется в консоли Lambda, и я вижу, что вывод верен, но SNS, похоже, никогда не получает уведомления или что-либо публикует. Я работаю с Terraform, чтобы поддержать мою инфраструктуру, вот код Terraform, который я использую, может быть, кто-то может мне помочь:
resource "aws_lambda_function" "lambda_apigateway_to_sns_function" {
filename = "../node/lambda.zip"
function_name = "LambdaPublishToSns"
handler = "index.snsHandler"
role = aws_iam_role.lambda_apigateway_to_sns_execution_role.arn
runtime = "nodejs12.x"
}
resource "aws_iam_role" "lambda_apigateway_to_sns_execution_role" {
assume_role_policy = <<POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow"
}
]
}
POLICY
}
resource "aws_iam_role_policy_attachment" "apigateway_to_sns_sns_full_access" {
policy_arn = "arn:aws:iam::aws:policy/AmazonSNSFullAccess"
role = aws_iam_role.lambda_apigateway_to_sns_execution_role.name
}
resource "aws_lambda_function_event_invoke_config" "example" {
function_name = aws_lambda_function.lambda_apigateway_to_sns_function.arn
destination_config {
on_success {
destination = aws_sns_topic.sns_topic.arn
}
on_failure {
destination = aws_sns_topic.sns_topic.arn
}
}
}
А вот мой код функции Lambda (в NodeJS) :
exports.snsHandler = (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false;
callback(null, {
statusCode: 200,
body: event.body + " apigateway"
);
}
(функция должна принимать входные данные от API-шлюза, и все, что находится в теле запроса API-шлюза, просто добавить «apigateway» в конец его и передать сообщение; Я проверил интеграцию с API Gateway, и эта интеграция работает отлично)
Спасибо!