使用无服务器框架使用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片段的链接 。