Как импортировать существующий VPC в aws cdk?

Привет, я работаю над aws cdk. Я пытаюсь получить существующий vpc не по умолчанию. Я пробовал ниже варианты.

vpc = ec2.Vpc.from_lookup(self, id = "VPC", vpc_id='vpcid', vpc_name='vpc-dev')

Это приводит к ошибке ниже

[Error at /LocationCdkStack-cdkstack] Request has expired.
[Warning at /LocationCdkStack-cdkstack/TaskDef/mw-service] Proper policies need to be attached before pulling from ECR repository, or use 'fromEcrRepository'.
Found errors

Другой метод, который я пробовал, -

vpc = ec2.Vpc.from_vpc_attributes(self, 'VPC', vpc_id='vpc-839227e7', availability_zones=['ap-southeast-2a','ap-southeast-2b','ap-southeast-2c'])

Это приводит к

[Error at /LocationCdkStack-cdkstack] Request has expired.
[Warning at /LocationCdkStack-cdkstack/TaskDef/mw-service] Proper policies need to be attached before pulling from ECR repository, or use 'fromEcrRepository'.
Found errors

Другой метод, который я пробовал, -

vpc = ec2.Vpc.from_lookup(self, id = "VPC", is_default=True) // Это получит vpc по умолчанию, и это будет работать

Может ли кто-нибудь помочь мне получить vpc не по умолчанию в aws cdk? Любая помощь будет оценена по достоинству. Спасибо


person Niranjan    schedule 12.12.2019    source источник


Ответы (2)


Взгляните на документацию по aws_cdk.aws_ec2 и на странице Контекст времени выполнения CDK.

Если ваш VPC создан вне вашего приложения CDK, вы можете использовать Vpc.fromLookup (). Интерфейс командной строки CDK выполнит поиск указанного VPC в регионе и учетной записи стека и импортирует конфигурацию подсети. Поиск можно выполнить по идентификатору VPC, но более гибко, путем поиска определенного тега в VPC.

Использование:

# Example automatically generated. See https://github.com/aws/jsii/issues/826
from aws_cdk.core import App, Stack, Environment
from aws_cdk import aws_ec2 as ec2

# Information from environment is used to get context information
# so it has to be defined for the stack
stack = MyStack(
    app, "MyStack", env=Environment(account="account_id", region="region")
)

# Retrieve VPC information
vpc = ec2.Vpc.from_lookup(stack, "VPC",
    # This imports the default VPC but you can also
    # specify a 'vpcName' or 'tags'.
    is_default=True
)

Добавьте соответствующий пример:

vpc = ec2.Vpc.from_lookup(stack, "VPC",
    vpc_id = VPC_ID
)

Обновление с помощью примера машинописного текста:

import ec2 = require('@aws-cdk/aws-ec2');
const getExistingVpc = ec2.Vpc.fromLookup(this, 'ImportVPC',{isDefault: false,vpcId: vpcId });

Подробнее здесь.

person Amit Baranes    schedule 12.12.2019
comment
Привет спасибо за ваш ответ. VPC создается вне приложения cdk, и это не vpc по умолчанию. from_lookup используется для получения vpc по умолчанию, верно? - person Niranjan; 12.12.2019
comment
Затем просто измените is_default на False и укажите vpcName - person Amit Baranes; 12.12.2019
comment
vpc = ec2.Vpc.from_lookup (self, id = VPC, vpc_name = 'vpc-dev', is_default = False) эта ошибка сработала для меня. Да, мой cdk находится на Python - person Niranjan; 12.12.2019
comment
Может быть, это может быть полезно docs.aws.amazon.com/cdk/api/latest/docs/ - person Amit Baranes; 12.12.2019
comment
Чтобы он работал, необходимо правильно определить среду для стека с обязательной информацией account и region. - person Romain; 22.06.2020
comment
@Romain Поделитесь примером, и я отредактирую свой ответ в соответствии с ним - person Amit Baranes; 22.06.2020
comment
@AmitBaranes только что обновил ответ, добавив дополнительную информацию. Не стесняйтесь просматривать его. Надеюсь, это поможет другим людям. - person Romain; 23.06.2020
comment
Имейте в виду, что установка isDefault отличается от установки false (или true в этом отношении). Я могу найти свой VPC не по умолчанию на основе имени без ошибок, но возвращаемый идентификатор является случайным (не правильным). Если я устанавливаю isDefault в false, он дает мне правильный, а если я устанавливаю его в true, он выдает ошибку и сообщает мне, что это не мой VPC по умолчанию. - person Michael; 07.10.2020

вот простой пример

//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, 'SomeName', {
        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),
    });
person grepit    schedule 08.10.2020
comment
вы жестко кодируете идентификатор vpc, который задает не вопрос! - person Ajak6; 16.10.2020