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にアップデートした
リンク
リンク