AWSCDK

AWS CDKで cannot import name core from aws_cdkのエラー

AWS CDK pythonのコードを書いていたときに ImportError: cannot import name ‘core’ from ‘aws_cdk’ のエラーに遭遇したのでメモっておきます。

スポンサーリンク

事象

S3バケットのremoval_policyをDESTROYで定義しようとしたところ当該エラーになりました。

$ cdk deploy
Traceback (most recent call last):
  File "app.py", line 6, in <module>
    from terraform_backend.terraform_backend_stack import TerraformBackendStack
  File "/Users/zoo200/blog/terraform-terragrunt-my-best-practice/cdk/terraform_backend/terraform_backend/terraform_backend_stack.py", line 1, in <module>
    from aws_cdk import (
ImportError: cannot import name 'core' from 'aws_cdk' (/Users/zoo200/blog/terraform-terragrunt-my-best-practice/cdk/terraform_backend/.venv/lib/python3.7/site-packages/aws_cdk/__init__.py)

Subprocess exited with error 1
$

原因と対応

CDK バージョン2ではcoreパッケージがなくなった(aws-cdk-libに統合された)のですが、どうやらわけもわからずバージョン1のコードをコピペしていたようです。

正しくは以下のようにv2のaws_cdk.RemovalPolicyを指定します。

from aws_cdk import (
    RemovalPolicy,
...
)
...
        aws_s3.Bucket(
...
            removal_policy=RemovalPolicy.DESTROY,
        )

以下のようなv1のaws_cdk.core.RemovalPolicyの書き方ではエラーとなります。

from aws_cdk import (
    core,
...
)
...
        aws_s3.Bucket(
...
            removal_policy=core.RemovalPolicy.DESTROY,
        )

今回は以上です〜ノシ

参考

(`・ω・´)ノ アリガトウゴザイマス!!

実践!AWS CDK #26 Version 2
AWS CDK PythonのバージョンをV1からV2にアップデートした