amazon-web-services - 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 : <??>
解决方案
回答您对@JohnRotenstein 的问题...
我在 AWS::ECU::Subnet aws 文档中看到子网可以返回 VPC ID。我可以简单地使用 Fn::GetAtt: [PrivateSubnet01, VpcId] 作为值吗?
你不能。您可以从创建子网的模板中的子网资源获取 VPC ID ,但您不在该模板中并且没有子网资源。您有一个子网 ID(这只是一个字符串,例如“subnet-1234abcd”)。
因此,修改创建 VPC(并输出子网 ID)的原始模板,使其也输出 VPC ID。然后将该 VPC ID 导入您的新模板。