如何使用 VPC 端点从 VPC 内的 Lambda 发布到 SNS?
How to publish to SNS from Lambda within VPC using VPC Endpoint?
我已经设置了一个具有 3 个子网的 VPC,这样可以从我的 Lambda 函数访问私有 RDS 实例。 RDS <-> Lambda 连接工作正常,但现在我无法发布到 SNS。
我找到了 SNS 的 VPC 端点支持公告(包括此博客 post https://aws.amazon.com/blogs/security/securing-messages-published-to-amazon-sns-with-aws-privatelink/)并添加了具有以下属性的 VPC 端点接口:
Service name: com.amazonaws.eu-west-1.sns
VPC: same as Lambda functions and other services
Subnets: all included in my VPC (have also tested toggling them individually)
Security Groups: all VPC security groups selected
所有服务都在 eu-west-1 区域。我知道发布到 SNS 的代码是正确的,因为它在非 VPC 环境中 运行 时有效。我要发布到的 ARN 保持不变:arn:aws:sns:eu-west-1:962446592636:whatever
.
我知道可以设置 NAT 服务器来避免这个问题,但如果可能的话我更愿意使用 VPC 端点以降低成本。
对我有用!
我做了以下事情:
- 创建了一个 Amazon SNS 主题 并订阅了它
- 创建了一个没有 VPC 配置的 AWS Lambda 函数,它向 SNS 主题发送消息
- 测试了 Lambda 函数 -- 收到消息
- 创建了一个具有两个私有子网的 VPC
- 在私有子网中为 SNS 创建了一个 服务端点,安全组允许来自
0.0.0.0/0
的所有 TCP(用于测试目的)
- 修改了 Lambda 函数以使用私有子网
- 测试了 Lambda 函数 -- 收到消息
所以,一切正常。我不必修改任何 Lambda 代码。
我的 Lambda 代码:
def lambda_handler(event, context):
import boto3
client = boto3.client('sns', region_name='ap-southeast-2')
response = client.publish(
TopicArn='arn:aws:sns:ap-southeast-2:123456789012:stack',
Message='From Lambda'
)
return
我已经设置了一个具有 3 个子网的 VPC,这样可以从我的 Lambda 函数访问私有 RDS 实例。 RDS <-> Lambda 连接工作正常,但现在我无法发布到 SNS。
我找到了 SNS 的 VPC 端点支持公告(包括此博客 post https://aws.amazon.com/blogs/security/securing-messages-published-to-amazon-sns-with-aws-privatelink/)并添加了具有以下属性的 VPC 端点接口:
Service name: com.amazonaws.eu-west-1.sns
VPC: same as Lambda functions and other services
Subnets: all included in my VPC (have also tested toggling them individually)
Security Groups: all VPC security groups selected
所有服务都在 eu-west-1 区域。我知道发布到 SNS 的代码是正确的,因为它在非 VPC 环境中 运行 时有效。我要发布到的 ARN 保持不变:arn:aws:sns:eu-west-1:962446592636:whatever
.
我知道可以设置 NAT 服务器来避免这个问题,但如果可能的话我更愿意使用 VPC 端点以降低成本。
对我有用!
我做了以下事情:
- 创建了一个 Amazon SNS 主题 并订阅了它
- 创建了一个没有 VPC 配置的 AWS Lambda 函数,它向 SNS 主题发送消息
- 测试了 Lambda 函数 -- 收到消息
- 创建了一个具有两个私有子网的 VPC
- 在私有子网中为 SNS 创建了一个 服务端点,安全组允许来自
0.0.0.0/0
的所有 TCP(用于测试目的) - 修改了 Lambda 函数以使用私有子网
- 测试了 Lambda 函数 -- 收到消息
所以,一切正常。我不必修改任何 Lambda 代码。
我的 Lambda 代码:
def lambda_handler(event, context):
import boto3
client = boto3.client('sns', region_name='ap-southeast-2')
response = client.publish(
TopicArn='arn:aws:sns:ap-southeast-2:123456789012:stack',
Message='From Lambda'
)
return