首页 > 解决方案 > CloudFormation :在运行 lambda 的 VPC 中创建 VPC 端点

问题描述

我有一个在 VPC 中运行的 lambda 函数。

我需要使用我拥有的服务名称在此 VPC 中创建一个终端节点。我已经创建了一个并通过控制台执行所有操作来测试从 lambda 到服务的连接。但现在我需要在 CFT 中执行此操作。

我知道如何创建 VPC 端点,但不知道如何将端点链接到运行 lambda 的 VPC 的 VPC Id。

这就是我创建 lambda 以在 VPC 中运行的方式。

Type: AWS::Serverless::Function
Properties:
  Handler: 'handleRequest'
  Runtime: java8
  CodeUri:
    Bucket: {}
    Key: BATS::SAM::CodeS3Key
  Description: Lambda.
  Timeout: 20
  Role:
    Fn::GetAtt: [LambdaRole, Arn]
  VpcConfig:
    Fn::If:
    - RunLambdaInVPC
    - SecurityGroupIds: [{Ref: LambdaSecurityGroup}]
      SubnetIds:
      - {'Fn::ImportValue': PrivateSubnet01}
      - {'Fn::ImportValue': PrivateSubnet02}
    - {Ref: 'AWS::NoValue'}

下面是我正在创建的 VPC 端点,但看不到如何提供 VPC Id:

Type: AWS::EC2::VPCEndpoint
Properties:
  SecurityGroupIds: [{Ref: LambdaSecurityGroup}]
  ServiceName: 'ServiceName'
  SubnetIds:
    - {'Fn::ImportValue': PrivateSubnet01}
    - {'Fn::ImportValue': PrivateSubnet02}
  VpcId : <??>

标签: amazon-web-servicesaws-lambdaamazon-cloudformationamazon-vpc

解决方案


回答您对@JohnRotenstein 的问题...

我在 AWS::ECU::Subnet aws 文档中看到子网可以返回 VPC ID。我可以简单地使用 Fn::GetAtt: [PrivateSubnet01, VpcId] 作为值吗?

你不能。您可以从创建子网的模板中的子网资源获取 VPC ID ,但您不在该模板中并且没有子网资源。您有一个子网 ID(这只是一个字符串,例如“subnet-1234abcd”)。

因此,修改创建 VPC(并输出子网 ID)的原始模板,使其也输出 VPC ID。然后将该 VPC ID 导入您的新模板。


推荐阅读