使用无服务器框架使用VPCbuild立NAT网关

我正在尝试使用无服务器框架来创build一个可以访问Elasticache集群的Lambda函数,并且可以调用Internet。

我已经configurationserverless.yml来创buildLambda函数,创buildElasticache集群(memcached引擎),最后创build一个VPC并将Lambda函数和Elasticache集群放在其中(否则,它们将无法通信) 。

据我所知,VPC中的内容不能访问互联网,从研究这个主题我得出的结论是,处理这个问题的最佳实践方式是为VPC创build一个NAT网关,使其可以外部访问。

我可以看到如何在AWS控制台中执行此操作,但是我想坚持在serverless.yml定义这个以避免任何手动基础架构设置。

  • 是否有可能在serverless.yml创build一个NAT网关?
  • 正在创build一个NAT网关这样做的正确方法? (有更好的select吗?)

附加信息

为了达到目前的目的,我大量地从一个无服务器的例子中复制(这是一个基于Java的例子,但是概念和服务定义是相同的)。 它创build一个Lambda函数,一个Elasticache集群,并将它们放在VPC中,以便它们可以进行通信。 我相信它也有相同的问题,即Lambda函数无法访问互联网。 https://github.com/mugglmenzel/serverless-examples-cached-rds-ws/blob/master/serverless.yml

您必须configurationNAT实例或受pipeNAT网关才能在VPC内为您的Lambdas提供Internet访问。 您可能必须使用serverless.yml文件的资源部分来创buildNAT网关/ NAT实例资源。

查看无服务器框架文档的资源部分。 这些资源将在serverless deploy时添加到云信息堆栈

您可以覆盖/附加任何types的资源到您的CloudFormation堆栈。 您可以添加资源,输出甚至覆盖说明。 您还可以使用无服务器variables来获取敏感数据或您的资源模板中的可重用configuration。

因此,您可以在资源部分中添加NAT网关的Cloudformation模板。

例如,

 Resources: NatGateway: Type: AWS::EC2::NatGateway DependsOn: NatEIP Properties: AllocationId: Fn::GetAtt: - NatEIP - AllocationId SubnetId: Ref: PublicSubnet NatEIP: Type: AWS::EC2::EIP Properties: Domain: vpc NatRoute: Type: AWS::EC2::Route DependsOn: NatGateway Properties: RouteTableId: Ref: PrivateRouteTable DestinationCidrBlock: 0.0.0.0/0 NatGatewayId: Ref: NatGateway 

这里是VPC内完整的CloudFormation Lambda片段的链接 。