I struggled for a while today to figure out how to place a lambda function inside of a given SubnetType of a VPC generated in the same CDK stack.

To specify subnets for a lambda function it needs a SubnetSelection object passed in. I expected to find a method of ec2.VPC() which would give me an output with the type SubnetSelection but this doesn’t exist.

After some reading of other people’s posts online I found an example which showed what I needed to do:

vpc_subnets=ec2.SubnetSelection(subnet_type= ec2.SubnetType.ISOLATED)

Turns out SubnetSelection isn’t a list of subnets, but a filter which generates a list of subnets. After looking over the SubnetSelection documentation again this became obvious.

Here is a more complete example of how to use SubnetSelection to specify the subnets for a Lambda function.

vpc = ec2.Vpc(...)

#https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_lambda/Function.html
my_lambda = _lambda.Function(
    self, 'my_lambda',
    runtime=_lambda.Runtime.PYTHON_3_8,
    handler='my_lambda.handler',
    code=_lambda.Code.asset('lambda'),
    vpc=vpc,
    vpc_subnets=ec2.SubnetSelection(subnet_type= ec2.SubnetType.ISOLATED),
    environment={
        'my_env_var_key': 'my_env_var_value',
    }
)