【发布时间】:2021-10-18 13:43:09
【问题描述】:
我无法使用 Lambda 函数向 AWS SNS(通知服务)发布消息。当我在本地机器上测试它时它工作正常,但是一旦我将它部署到 AWS Lambda,它就会挂在“client.Publish(request);”上它不会返回任何结果。
请看下面的代码。
namespace SendAWSNotifications
{
public class Function
{
/// <summary>
/// Publish AWS notification message
/// </summary>
/// <param name="input"></param>
/// <param name="context"></param>
/// <returns></returns>
public string FunctionHandler(object input, ILambdaContext context)
{
context.Logger.Log("Start");
var awsKeyId = "AKI**********GOJ";
var awsKeySecret = "nK9**************eQ8A";
var awsCredentials = new BasicAWSCredentials(awsKeyId, awsKeySecret);
var client = new AmazonSimpleNotificationServiceClient(awsCredentials, Amazon.RegionEndpoint.AFSouth1);
var request = new PublishRequest
{
TopicArn = "arn:aws:sns:af-south-1:***************:TestTopic",
Message = "Test Message20"
};
context.Logger.Log("Send");
var result = client.Publish(request);
context.Logger.Log("Done");
return string.Empty;
}
}
}
【问题讨论】:
-
您的 Lambda 可能在无法访问 SNS 或互联网的私有 VPC 中运行。为此,您必须创建一个Interface Endpoint 才能发布到 SNS。另外,请不要在代码中使用机密,Lambda 具有执行角色,您可以为其添加权限以发布到 SNS 主题。
-
您的 AWS Lambda 函数是否连接到 VPC?如果是这样,是否有特定原因为什么它连接到 VPC?如果没有,请尝试断开连接,看看是否可以解决问题。
-
@ErvinSzilagyi 是的,它在 VPC 中。将尝试添加端点
-
@JohnRotenstein 我删除了 VPC,现在它可以工作了,谢谢!
-
哦...现在才意识到为什么我要添加到 VPC,我必须连接到我们的 RDS Postgres 数据库。所以我将不得不遵循@ErvinSzilagyi 创建端点的路线。
标签: c# amazon-web-services aws-lambda notifications publish