amazon-web-services - CDK 中的 SQS 接口端点
问题描述
使用 AWS-CDK。我不得不移动我的 Lambda,它在 VPC 内写入 SQS。我添加了接口网关以允许从 VPC 直接连接到 SQS:
props.vpc.addInterfaceEndpoint('sqs-gateway', {
service: InterfaceVpcEndpointAwsService.SQS,
subnets: {
subnetType: SubnetType.PRIVATE,
},
})
Lambda 被部署到同一个 VPC(默认情况下到同一个私有子网),我将 QUEUE_URL 作为 env 参数传递,就像我在没有 VPC 时所做的那样:
const ingestLambda = new lambda.Function(this, 'TTPIngestFunction', {
...
environment: {
QUEUE_URL: queue.queueUrl,
},
vpc: props.vpc,
})
并且 Lambda 代码只需使用以下命令发送消息:
const sqs = new AWS.SQS({ region: process.env.AWS_REGION })
return sqs
.sendMessageBatch({
QueueUrl: process.env.QUEUE_URL as string,
Entries: entries,
})
.promise()
没有 VPC,此发送工作,但现在 Lambda 只是超时发送 SQS 消息。我在这里想念什么?
解决方案
默认情况下,接口 VPC 终端节点会创建一个新的安全组,并且不会 自动允许来自 VPC CIDR 的流量。
如果您想允许来自 Lambda 的流量,您可以执行以下操作:
const sqsEndpoint = props.vpc.addInterfaceEndpoint('sqs-gateway', {
service: InterfaceVpcEndpointAwsService.SQS,
});
sqsEndpoint.connections.allowDefaultPortFrom(ingestLambda);
或者,您可以允许所有流量:
sqsEndpoint.connections.allowDefaultPortFromAnyIpv4();
此默认行为目前正在https://github.com/aws/aws-cdk/pull/4938中讨论。
推荐阅读
- c++ - 删除导致变量值更改的 cout 语句
- rest - grpc-gateway:POST 成功返回 201
- python - 使用多个接受参数的夹具参数化测试
- search - OpenLDAP:等待客户端的最新搜索请求
- r - 单击使用 plotly 和 rshiny 包制作的饼图区域时,我想获取一个列表
- android - 在 Android 中调用 Paypal 时无法获取访问令牌
- java - 如何将zk树元素的打开/关闭图标从树元素放在右侧?
- laravel - laravel auth register 将数据插入两个表
- android - Android x86 版本 7.1 xposed 正在引导循环
- javascript - React 中的 ParticlesJS 组件被媒体查询隐藏但不回来显示