AWS CDK Python使用Docker打包代码时出现无效绑定挂载错误
问题根因
- 报错中的
delegated是Docker Desktop for Mac/Windows专属的挂载一致性优化参数,CentOS等Linux发行版使用的标准Docker引擎不支持该参数,因此会抛出非法挂载模式的错误。 - AWS CDK默认会在Mac/Windows平台自动添加该参数提升挂载性能,部分旧版本CDK存在平台识别偏差,或者跨平台共享代码时未做兼容配置,就会导致Linux环境下部署失败。
解决方案
方案1:修改代码显式指定兼容的挂载模式
在BundlingOptions中新增consistency配置,指定使用全平台兼容的默认挂载模式即可,修改后的代码如下:
from aws_cdk import Consistency python_function = Function( self, id="PythonFunction", runtime=Runtime.PYTHON_3_9, handler="app.main.lambda_handler", timeout=Duration.seconds(20), code=Code.from_asset( path=str(python_function_path.resolve()), bundling=BundlingOptions( image=Runtime.PYTHON_3_9.bundling_image, command=[ "bash", "-c", "pip install -r requirements.txt -t /asset-output && cp -au . /asset-output", ], # 新增该行配置,禁用非兼容的delegated参数 consistency=Consistency.DEFAULT ), ), memory_size=128, log_retention=RetentionDays.TWO_WEEKS, )
方案2:通过环境变量全局生效(无需修改代码)
如果有多个Lambda函数都用到了bundling配置,可以在CentOS环境执行部署命令前,先导出环境变量强制关闭挂载一致性参数:
export CDK_DOCKER_DISABLE_VOLUME_CONSISTENCY=1
之后再执行cdk deploy等部署命令即可正常运行。
方案3:升级AWS CDK到最新稳定版
部分低版本CDK存在Linux平台挂载参数识别错误的问题,将CDK cli以及项目依赖的CDK库升级到最新稳定版,也可以自动修复该兼容问题。
内容的提问来源于stack exchange,提问作者CaptainDriftwood
相关产品推荐
相关产品推荐

