TL/DR
尝试使用私有子网和 VPC 终端节点在 AmazonMQ (RabbitMQ) 队列上创建 Lambda 触发器不起作用。
POC 目标
我正在执行此 POC:私有子网中的 AmazonMQ (RabbitMQ) 和由传入队列的消息触发的 Lambda。
免责声明
我在这里只说我正在学习的内容,任何更正将不胜感激。
关于网络
由于 Amazon MQ 是 AWS 托管的服务,因此它在自己的网络中运行。因此,当我们要求 AWS 将代理置于子网中时,会在子网中为该代理创建网络接口,从而为代理提供子网中的访问权和可达性。
Lambda 也有类似的情况,网络接口让 Lambda 可以访问子网。但是要调用这个 lambda,由于调用端点位于我们的子网之外,因此需要创建一个 VPC 端点,以在子网内公开 lambda 端点。
另一种选择是授予代理公共访问权限(创建公共 nat),以便代理可以访问公共 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 的网络接口位于同一子网中,安全组正常(它们允许所需的流量),并且创建了 VPC 端点。但是事件映射(又名触发器,手动创建或使用 terraform)永远无法完成配置。