ImportError: cannot import name 'Eip' from 'imports.aws.vpc' and any solution for this error , eip{} is not found imports/aws

#!/usr/bin/env python

from constructs import Construct

from cdktf import App, TerraformStack, TerraformVariable , Token

from imports.aws import AwsProvider

from imports.aws import all

from imports.aws.vpc import Vpc,InternetGateway,Subnet,RouteTable,Route,RouteTableAssociation,NatGateway,Eip

class MyStack(TerraformStack):

def __init__(self, scope: Construct, ns: str):

    super().__init__(scope, ns)

    # define resources here

    TerraformVariable(self ,"regions" , type=str  , default="us-east-1")

    TerraformVariable(self ,"vpcs" , type=str , default="50.5.0.0/16")

    TerraformVariable(self ,"zones" , type=list  , default=["us-east-1a" , "us-east-1b" , "us-east-1c"])

    TerraformVariable(self ,"subnt1" , type=list  , default=["50.5.100.0/24" , "50.5.101.0/24" , "50.5.102.0/24"])

    TerraformVariable(self ,"subnt2" , type=list  , default=["50.5.10.0/24" , "50.5.11.0/24" , "50.5.12.0/24"])

    TerraformVariable(self ,"subnt3" , type=list, default=["50.5.20.0/24" , "50.5.21.0/24" , "50.5.22.0/24"])

    TerraformVariable(self ,"tags1" , type=list , default=["public1" , "public2" , "public3"])

    TerraformVariable(self ,"tags2" , type=list , default=["web1" , "web2" , "web3"])

    TerraformVariable(self ,"tags3" , type=list  , default=["dbase1" , "dbase2" , "dbase3"])

    AwsProvider(self , "Aws" , region=TerraformVariable.string_value.regions)

    Vpc(self , "vpcrole" , cidr_block=TerraformVariable.string_value.vpcs)

    InternetGateway(self, "intgw" , vpc_id=Token.vpcrole.id  )

    Subnet(self, "sbnt1" , vpc_id=Token.vpcrole.id   , cidr_block=TerraformVariable.list_value.subnt1, availability_zone=TerraformVariable.list_value.zones, map_public_ip_on_launch=True ,

    tags=TerraformVariable.list_value.tags1,count=3)

    Subnet(self, "sbnt2" , vpc_id=Token.vpcrole.id   , cidr_block=TerraformVariable.list_value.subnt2, availability_zone=TerraformVariable.list_value.zones,

     tags=TerraformVariable.list_value.tags2 , count=3)

    Subnet(self, "sbnt3" , vpc_id=Token.vpcrole.id   , cidr_block=TerraformVariable.list_value.subnt3, availability_zone=TerraformVariable.list_value.zones,

     tags=TerraformVariable.list_value.tags3, count=3)

    RouteTable(self , "rtable1" , vpc_id=Token.vpcrole.id  , route="route1"   , count= 3)

    Route(self , "route1",  destination_cidr_block="0.0.0.0/0" , InternetGateway=Token.intgw.id)

    RouteTableAssociation(self ,"associate1" , route_table_id=Token.rtable.id , subnet_id=Token.sbnt1.id ,  count=3)

    Eip(self , "eip1east" , vpc=True , count=3)

    NatGateway(self , "natgw"  , allocation_id=Token.eip1east.id , subnet_id=Token.sbnt1.id ,

    connectivity_type="public" , count=3)



    RouteTable(self , "rtable2" , vpc_id=Token.vpcrole.id  , route="route2"   , count= 3)

    Route( self ,"route2",  destination_cidr_block="0.0.0.0/0" , nat_gateway_id=Token.natgw.id)

app = App()

MyStack(app, “projects-python”)

app.synth()

Looks like Eip is in the ec2 submodule.

thanks it working fine but strange to find it in ec2 submodule but not vpc submodule

For extra clarity, all resources are under the same submodule as they are in the terraform documentation: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eip is listed under ec2.

[2021-12-07T15:07:46.413] [ERROR] default - Courtesy Notice: Pipenv found itself running within a virtual environment, so it will automatically use that environment, instead of creating its own for any project. You can set PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that environment and create its own instead. You can set PIPENV_VERBOSITY=-1 to suppress this warning.
⠴ synthesizing…
[2021-12-07T15:08:43.910] [ERROR] default - Traceback (most recent call last):
File “E:\cdktf-python\projects-python\main.py”, line 56, in
MyStack(app, “projects-python”)
File “C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_runtime.py”, line 86, in call
inst = super().call(*args, **kwargs)
File “E:\cdktf-python\projects-python\main.py”, line 18, in init
TerraformVariable(self ,“regions” , type=str , default=“us-east-1”)
File “C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_runtime.py”, line 86, in call
inst = super().call(*args, **kwargs)
File “C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\cdktf_init_.py”, line 9062, in init

[2021-12-07T15:08:43.916] [ERROR] default - jsii.create(self.class, self, [scope, id, config])
File “C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init_.py”, line 293, in create
args=make_reference_for_native(self, args),
File "C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init
.py", line 159, in _make_reference_for_native
return [make_reference_for_native(kernel, i) for i in d]
File "C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init
.py", line 159, in
return [make_reference_for_native(kernel, i) for i in d]
File "C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init
.py", line 176, in make_reference_for_native
“data”: {
File "C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init
.py", line 177, in
jsii_name: make_reference_for_native(
File "C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init
.py", line 199, in make_reference_for_native
kernel.create(d.class, d)
File "C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init
.py", line 292, in create
fqn=klass.jsii_type or “Object”,
AttributeError: type object ‘type’ has no attribute ‘jsii_type
cdktf encountered an error while synthesizing

Synth command: pipenv run python main.py
Error: non-zero exit code 1

Command output on stderr:

Courtesy Notice: Pipenv found itself running within a virtual environment, so it will automatically use that environment, instead of creating its own for any project. You can set PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that environment and create its own instead. You can set PIPENV_VERBOSITY=-1 to suppress this warning.
Traceback (most recent call last):
  File "E:\cdktf-python\projects-python\main.py", line 56, in <module>
    MyStack(app, "projects-python")
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_runtime.py", line 86, in __call__
    inst = super().__call__(*args, **kwargs)
  File "E:\cdktf-python\projects-python\main.py", line 18, in __init__
    TerraformVariable(self ,"regions" , type=str  , default="us-east-1")
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_runtime.py", line 86, in __call__
    inst = super().__call__(*args, **kwargs)
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\cdktf\__init__.py", line 9062, in __init__
    jsii.create(self.__class__, self, [scope, id, config])
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 293, in create
    args=_make_reference_for_native(self, args),
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 159, in _make_reference_for_native
    return [_make_reference_for_native(kernel, i) for i in d]
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 159, in <listcomp>       
    return [_make_reference_for_native(kernel, i) for i in d]
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 176, in _make_reference_for_native
    "data": {
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 177, in <dictcomp>       
    jsii_name: _make_reference_for_native(
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 199, in _make_reference_f        kernel.create(d.__class__, d)
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 292, in create
    fqn=klass.__jsii_type__ or "Object",
AttributeError: type object 'type' has no attribute '__jsii_type__'

⠧ synthesizing…
((projects-python) ) PS E:\cdktf-python\projects-python> pipenv shell
or any project. You can set PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that environment and create its own instead. You can set PIPENV_VERBOSITY=-1 to suppress this warning.
Launching subshell in virtual environment…
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell Install PowerShell on Windows, Linux, and macOS - PowerShell | Microsoft Docs

PS E:\cdktf-python\projects-python> cdktf synth
⠹ synthesizing…
[2021-12-07T15:10:15.816] [ERROR] default - Traceback (most recent call last):
File “E:\cdktf-python\projects-python\main.py”, line 56, in

[2021-12-07T15:10:15.820] [ERROR] default - MyStack(app, “projects-python”)
File “C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_runtime.py”, line 86, in call
inst = super().call(*args, **kwargs)
File “E:\cdktf-python\projects-python\main.py”, line 18, in init
TerraformVariable(self ,“regions” , type=str , default=“us-east-1”)
File “C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_runtime.py”, line 86, in call
inst = super().call(*args, **kwargs)
File “C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\cdktf_init_.py”, line 9062, in init
jsii.create(self.class, self, [scope, id, config])
File “C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init_.py”, line 293, in create
args=make_reference_for_native(self, args),
File "C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init
.py", line 159, in _make_reference_for_native

[2021-12-07T15:10:15.825] [ERROR] default - return [make_reference_for_native(kernel, i) for i in d]
File "C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init
.py", line 159, in
return [make_reference_for_native(kernel, i) for i in d]
File "C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init
.py", line 176, in make_reference_for_native
“data”: {
File "C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init
.py", line 177, in
jsii_name: make_reference_for_native(
File "C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init
.py", line 199, in make_reference_for_native
kernel.create(d.class, d)
File "C:\Users\Mohammedbanabila.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii_kernel_init
.py", line 292, in create
fqn=klass.jsii_type or “Object”,
AttributeError: type object ‘type’ has no attribute ‘jsii_type
⠹ synthesizing…
cdktf encountered an error while synthesizing

Synth command: pipenv run python main.py
Error: non-zero exit code 1

Command output on stderr:

Traceback (most recent call last):
  File "E:\cdktf-python\projects-python\main.py", line 56, in <module>
    MyStack(app, "projects-python")
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_runtime.py", line 86, in __call__
    inst = super().__call__(*args, **kwargs)
  File "E:\cdktf-python\projects-python\main.py", line 18, in __init__
    TerraformVariable(self ,"regions" , type=str  , default="us-east-1")
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_runtime.py", line 86, in __call__
    inst = super().__call__(*args, **kwargs)
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\cdktf\__init__.py", line 9062, in __init__
    jsii.create(self.__class__, self, [scope, id, config])
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 293, in create
    args=_make_reference_for_native(self, args),
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 159, in _make_reference_for_native
    return [_make_reference_for_native(kernel, i) for i in d]
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 159, in <listcomp>       
    return [_make_reference_for_native(kernel, i) for i in d]
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 176, in _make_reference_for_native
    "data": {
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 177, in <dictcomp>       
    jsii_name: _make_reference_for_native(
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 199, in _make_reference_for_native
    kernel.create(d.__class__, d)
  File "C:\Users\Mohammedbanabila\.virtualenvs\projects-python-M_MdHqee\lib\site-packages\jsii\_kernel\__init__.py", line 292, in create
    fqn=klass.__jsii_type__ or "Object",
AttributeError: type object 'type' has no attribute '__jsii_type__'

it require to imports.aws.jsii import all or package for support in pipenv and is there a way around it ?

I think there are some errors in your code above:

  • TerraformVariable.string_value.regions should probably just be regions.string_value (any other similar changes)
  • The type parameter for a TerraformVariable needs to be a string type
  • Token.vpcrole.id can probably be just vpcrole.id
  • I don’t believe you need the import all line.