使用无服务器框架通过VPC设置NAT网关

Tom*_*don 6 amazon-web-services node.js amazon-elasticache amazon-vpc serverless-framework

我正在尝试使用无服务器框架来创建Lambda函数,该函数可以访问Elasticache集群以及调出Internet。

我已经进行了配置,serverless.yml以创建Lambda函数,创建Elasticache集群(内存缓存引擎),最后创建VPC,并将Lambda函数和Elasticache集群都放置在其中(否则,它们将无法通信)。

我了解VPC内的事物无法访问Internet,通过围绕该主题进行研究,我得出的结论是,处理此问题的最佳实践方法是为VPC创建一个NAT网关,从而允许其在外部进行访问。访问。

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

  • 是否可以在其中创建NAT网关serverless.yml
  • 创建NAT网关是这样做的正确方法吗?(有更好的选择吗?)

附加信息

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

Man*_*noj 5

您必须配置NAT实例或托管的NAT网关,以提供对VPC内Lambda的Internet访问。您可能必须使用文件的资源部分serverless.yml来创建NAT网关/ NAT实例资源。

请查看无服务器框架文档的资源部分。这些资源将在以下时间添加到cloudformation堆栈中serverless deploy

您可以将任何类型的资源覆盖/附加到CloudFormation堆栈中。您可以添加资源,输出,甚至覆盖描述。您也可以将无服务器变量用于敏感数据或资源模板中的可重用配置。

因此,您可以在资源部分中为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
Run Code Online (Sandbox Code Playgroud)

这是指向 VPC内Lambda的完整CloudFormation代码段的链接


itt*_*tus 5

我创建了一个带有 vpc、eslaticache 和 NAT 网关的 lambda 示例。您可以查看 https://github.com/ittus/aws-lambda-vpc-nat-examples