繁体   English   中英

AWS Lambda-RabbitMQ 事件映射使用 VPC 端点

[英]AWS Lambda-RabbitMQ event mapping usign VPC endpoints

总长/博士

尝试使用私有 su.net 和 VPC 端点在 AmazonMQ (RabbitMQ) 队列上创建 Lambda 触发器不起作用。

POC目标

我正在做这个 POC:私有 su.net 中的 AmazonMQ (RabbitMQ) 和由传入队列的消息触发的 Lambda。

免责声明

我会 state 这里是我正在学习的,任何更正将不胜感激。

在.networking

由于 Amazon MQ 是一项 AWS 托管服务,因此它在自己的网络中运行。 因此,当我们要求 AWS 将代理放置在 su.net 中时,会在 su.net 中为该代理创建一个网络接口,从而为代理提供 su.net 中的访问和可达性。

Lambda 也有类似的情况,.network 接口让 lambda 可以访问 su.net。 但是要调用这个 lambda,因为调用端点位于我们的 su.net 之外,所以需要创建一个 VPC 端点来暴露 su.net 内的 lambda 端点。

另一种选择是授予经纪人公共访问权限(创建公共 nats),以便经纪人可以访问公共 lambda 端点。 在此处输入图像描述

问题

只是它不适用于 VPC 端点选项(它适用于公共 NAT)。

这是我正在使用的代码: https://gitlab.com/templates14/terraform-templates/-/tree/master/lambda_rabbitmq_trigger

如果您想测试,只需在此处更改 AWS 帐户:

 # here using an AWS profile of my own, change it provider "aws" { region = "us-east-1" profile = "myown-terraform" }

分析

据我所知,代理和 lambda 在同一个 su.net 中有它们的 .network 接口,安全组没问题(它们允许所需的流量),并且创建了 VPC 端点。 但是事件映射(又名触发器,手动创建或使用 terraform)永远无法完成配置。

正如@jarmod 提到的(感谢),我错过了 STS 和 SecretsManager 的 VPC 端点。

基本上,解决方案还可以,但是必须添加:

 resource "aws_vpc_endpoint" "sts_endpoint" { vpc_id = module.red.vpc_id service_name = "com.amazonaws.${ var.region }.sts" vpc_endpoint_type = "Interface" su.net_ids = [module.red.private_su.nets[0]] security_group_ids = [ aws_security_group.sg-endpoint.id ] private_dns_enabled = true } resource "aws_vpc_endpoint" "secretsmanager_endpoint" { vpc_id = module.red.vpc_id service_name = "com.amazonaws.${ var.region }.secretsmanager" vpc_endpoint_type = "Interface" su.net_ids = [module.red.private_su.nets[0]] security_group_ids = [ aws_security_group.sg-endpoint.id ] private_dns_enabled = true }

这是最终图:

在此处输入图像描述

如果你想玩的话,这里是代码: https://gitlab.com/templates14/terraform-templates/-/tree/master/lambda_rabbitmq_trigger

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM