AWS CDK synth命令默认区域异常问题排查与解决
AWS CDK Python:
cdk synth不读取自定义CDK_DEFAULT_REGION环境变量的问题 问题描述
使用Python版AWS CDK时出现异常:已将环境变量CDK_DEFAULT_REGION设为eu-central-1,直接运行app.py能正确读取该值,但执行cdk synth命令时,却默认使用us-east-1区域。
相关配置与现象
环境变量
(.venv) $ set | grep CDK CDK_DEFAULT_ACCOUNT=99999999999999 CDK_DEFAULT_REGION=eu-central-1
cdk.json(前两行)
{ "app": "python3 app.py",
app.py核心代码
app = aws_cdk.App() logging.info(f"{os.environ['CDK_DEFAULT_ACCOUNT']} is account, and {os.environ['CDK_DEFAULT_REGION']} is region") CdkTestingStack( app, "cdk-testing", env=aws_cdk.Environment( account=os.getenv('CDK_DEFAULT_ACCOUNT'), region=os.getenv('CDK_DEFAULT_REGION') ), )
直接运行py app.py时,日志显示使用eu-central-1区域;但执行cdk synth时,日志显示使用us-east-1区域。
疑问
cdk synth从何处获取区域值?- 如何确保自定义的区域配置被
cdk synth正确使用?
原因与解决方案
问题原因
CDK_DEFAULT_ACCOUNT和CDK_DEFAULT_REGION是AWS CDK内部专用的环境变量,CDK CLI在执行命令时会自行覆盖这两个变量的值(优先级顺序为:命令行参数 > AWS配置文件/凭证 > 默认值us-east-1),因此手动设置这两个变量不会被cdk synth识别。
解决步骤
- 重命名自定义环境变量:将
CDK_DEFAULT_ACCOUNT和CDK_DEFAULT_REGION改为非CDK前缀的名称,例如MY_AWS_DEFAULT_ACCOUNT和MY_AWS_DEFAULT_REGION,并重新设置环境变量。 - 修改app.py代码:更新代码中引用的环境变量名称:
app = aws_cdk.App() logging.info(f"{os.environ['MY_AWS_DEFAULT_ACCOUNT']} is account, and {os.environ['MY_AWS_DEFAULT_REGION']} is region") CdkTestingStack( app, "cdk-testing", env=aws_cdk.Environment( account=os.getenv('MY_AWS_DEFAULT_ACCOUNT'), region=os.getenv('MY_AWS_DEFAULT_REGION') ), )
- 重新执行
cdk synth,即可正确读取自定义的区域配置。
内容的提问来源于stack exchange,提问作者BertC
相关产品推荐
相关产品推荐

