ver*_*tti 5 amazon-sqs amazon-web-services aws-cdk
使用 AWS-CDK。我必须将写入 SQS 的 Lambda 移至 VPC 内。我添加了接口网关,以允许通过以下方式从 VPC 直接连接到 SQS:
props.vpc.addInterfaceEndpoint('sqs-gateway', {
service: InterfaceVpcEndpointAwsService.SQS,
subnets: {
subnetType: SubnetType.PRIVATE,
},
})
Run Code Online (Sandbox Code Playgroud)
Lambda 部署到同一个 VPC(默认情况下部署到同一个私有子网),并且我将 QUEUE_URL 作为 env 参数传递,就像没有 VPC 时一样:
const ingestLambda = new lambda.Function(this, 'TTPIngestFunction', {
...
environment: {
QUEUE_URL: queue.queueUrl,
},
vpc: props.vpc,
})
Run Code Online (Sandbox Code Playgroud)
Lambda 代码简单地发送消息:
const sqs = new AWS.SQS({ region: process.env.AWS_REGION })
return sqs
.sendMessageBatch({
QueueUrl: process.env.QUEUE_URL as string,
Entries: entries,
})
.promise()
Run Code Online (Sandbox Code Playgroud)
如果没有 VPC,此发送可以工作,但现在 Lambda 只是在发送 SQS 消息时超时。我在这里缺少什么?
默认情况下,接口 VPC 终端节点会创建新的安全组,并且流量不会 允许来自 VPC CIDR 的流量。
如果您想允许来自 Lambda 的流量,您可以执行以下操作:
const sqsEndpoint = props.vpc.addInterfaceEndpoint('sqs-gateway', {
service: InterfaceVpcEndpointAwsService.SQS,
});
sqsEndpoint.connections.allowDefaultPortFrom(ingestLambda);
Run Code Online (Sandbox Code Playgroud)
或者,您可以允许所有流量:
sqsEndpoint.connections.allowDefaultPortFromAnyIpv4();
Run Code Online (Sandbox Code Playgroud)
此默认行为目前正在https://github.com/aws/aws-cdk/pull/4938中讨论。
| 归档时间: |
|
| 查看次数: |
2436 次 |
| 最近记录: |