"NameError: name 'self' is not defined" in CDK with python

0

I'm just using the sample code from: https://docs.aws.amazon.com/cdk/api/v1/python/aws_cdk.aws_healthlake/CfnFHIRDatastore.html#aws_cdk.aws_healthlake.CfnFHIRDatastore.add_deletion_override

And I'm adding the import statements not included in that example.

#!/usr/bin/env python3
import aws_cdk as cdk
import aws_cdk.aws_healthlake as healthlake
from constructs import Construct

from healthlake.healthlake_stack import HealthlakeStack

app = cdk.App()
class HealthlakeStack():
    def __init__(self, scope: Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

    cfn_fHIRDatastore = healthlake.CfnFHIRDatastore(self, "MyCfnFHIRDatastore",
        datastore_type_version="R4"
    )

HealthlakeStack(app, "HealthLake")
app.synth()

When I run cdk synth on this, I get back:

Traceback (most recent call last):
  File "app.py", line 13, in <module>
    class HealthlakeStack():
  File "app.py", line 17, in HealthlakeStack
    cfn_fHIRDatastore = healthlake.CfnFHIRDatastore(self, "MyCfnFHIRDatastore",
NameError: name 'self' is not defined

And if I remove self, I get:

Traceback (most recent call last):
  File "app.py", line 11, in <module>
    class HealthlakeStack():
  File "app.py", line 15, in HealthlakeStack
    cfn_fHIRDatastore = healthlake.CfnFHIRDatastore("MyCfnFHIRDatastore",
  File "redacted/python/site-packages/jsii/_runtime.py", line 86, in __call__
    inst = super().__call__(*args, **kwargs)
TypeError: __init__() missing 1 required positional argument: 'id'

And I tried a few other things. I'm guessing I'm just not nesting this correctly or something else basic to Python.

AWS
gefragt vor 2 Jahren1186 Aufrufe
1 Antwort
0
Akzeptierte Antwort

The problem was that I was trying to create the class in the app.py file, which is where an import statement of that same class was! I just had to revert to the code created by cdk init app --language python and add my code in the healthlake/healthlake_stack.py file where the class definition belongs.

AWS
beantwortet vor 2 Jahren

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen