[英]How do you assign a VPC and security group to a Lambda in AWS CDK?
我有一个带有需要插入 RDS 数据库的 lambda 函数的 AWS CDK 堆栈。 部署堆栈时,lambda 函数无法访问数据库并给出错误:getaddrinfo ENOTFOUND [RDS 端点由我定义]。 手动添加RDS数据库所在的VPC、子网和安全组后,lambda函数正常工作。
您如何在 AWS CDK 中定义 VPC、子网和安全组,最好是在 TypeScript 中? 就文档而言,我尝试过:
const vpc = ec2.Vpc.fromLookup(this, "VPC", { vpcName: "myVPC" });
const securityGroup = ec2.SecurityGroup.fromSecurityGroupId(
this,
"SG",
"sg-XXXXX"
);
const subnet1a = ec2.PrivateSubnet.fromSubnetAttributes(this, "SUBNET1A", {
subnetId: "eu-central-1a"
});
const myLambda = new lambda.Function(this, "myLambda", {
runtime: lambda.Runtime.NODEJS_12_X,
code: lambda.Code.fromAsset("lambda"),
handler: "myLambda.handler",
description: "myLambda",
environment: {
DB_HOST: "XXXX",
DB_USER: "XXXX",
DB_PASSWORD: "XXXX",
DB_NAME: "XXXX"
},
vpc: vpc,
vpcSubnets: [subnet1a],
securityGroups: [securityGroup]
});
运行 cdk deploy 时会出现 AWS CDK 错误:“无法将 Lambda 函数放置在公共子网中,子进程因错误 1 退出”
欢迎任何帮助。
下面是一个简单的例子,希望对你有帮助:
//get VPC Info form AWS account, FYI we are not rebuilding we are referencing
const DefaultVpc = Vpc.fromVpcAttributes(this, 'vpcdev', {
vpcId:'vpc-d0e0000b0',
availabilityZones: core.Fn.getAzs(),
privateSubnetIds: 'subnet-00a0de00',
publicSubnetIds: 'subnet-00a0de00'
});
const YourService = new lambda.Function(this, 'LambdaName', {
code: lambda.Code.fromAsset("lambda"),
handler: 'handlers.your_handler',
role: lambdaExecutionRole,
securityGroup: lambdaSecurityGroup,
vpc: DefaultVpc,
runtime: lambda.Runtime.PYTHON_3_7,
timeout: Duration.minutes(2),
});
您使用 vpc 配置 lambda 的代码很好。 您的“subnet1a”是公共子网,建议不要在公共子网中定义任何后端服务。 lambda 和 vpc 配置的 AWS 文档另一个参考链接
为 lambda 选择私有或隔离子网。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.