如何使用AWS CDK为Lambda添加已通过控制台创建的VPC?
在AWS CDK中为Lambda关联已存在的VPC(TypeScript)
要给Lambda关联控制台已创建好的VPC,你可以通过AWS CDK的Vpc.fromLookup方法引用现有VPC,无需重新创建。具体实现步骤如下:
1. 导入EC2模块
确保代码中导入AWS EC2相关模块:
import { Vpc, SubnetType } from 'aws-cdk-lib/aws-ec2';
2. 查找已存在的VPC
使用Vpc.fromLookup方法,通过VPC ID、标签等属性定位目标VPC。最直接的方式是通过VPC ID匹配:
const existingVpc = Vpc.fromLookup(this, 'ExistingVpc', { vpcId: 'vpc-xxxxxxxxx', // 替换为你控制台创建的VPC实际ID });
如果不想硬编码ID,也可以通过VPC的标签匹配(比如你给VPC设置了Name: MyProductionVpc标签):
const existingVpc = Vpc.fromLookup(this, 'ExistingVpc', { tags: { Name: 'MyProductionVpc', }, });
3. 为Lambda配置VPC关联
修改你的Lambda函数定义,添加vpc参数,同时指定子网类型和安全组(安全组可选,若不指定CDK会自动创建默认安全组):
const hello = new Function(this, "HelloHandler", { role: lambdaRole, runtime: Runtime.NODEJS_16_X, code: Code.fromAsset("dist"), handler: "index.handler", vpc: existingVpc, // 指定子网类型,根据业务需求选择 vpcSubnets: { subnetType: SubnetType.PRIVATE_WITH_EGRESS, // 适合需要访问公网的场景,或选PRIVATE_ISOLATED仅访问VPC内资源 }, // 可选:关联现有安全组,若省略则CDK自动创建 // securityGroups: [yourExistingSecurityGroup], });
注意事项
- 使用
Vpc.fromLookup时,CDK会在部署阶段查询你的AWS账户获取VPC信息,需确保CDK环境已完成cdk bootstrap,且部署用户拥有EC2资源的查询权限。 - 若Lambda需要访问公网,建议选择
PRIVATE_WITH_EGRESS子网并确保VPC配置了NAT网关;仅访问VPC内资源时,可使用PRIVATE_ISOLATED子网。
内容的提问来源于stack exchange,提问作者Karim Fayed
相关产品推荐
相关产品推荐

