You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过GitHub Actions与Python CDK部署至AWS时遇ModuleNotFoundError

问题:AWS CDK部署时出现ModuleNotFoundError(aws_cdk模块缺失)

仓库结构

.
├── .github
│   └── workflows/
├── .gitignore
├── README.md
├── backend/
├── cdk
│   ├── .env
│   ├── .gitignore
│   ├── README.md
│   ├── __pycache__
│   ├── app.py
│   ├── cdk.context.json
│   ├── cdk.json
│   ├── cdk.out
│   ├── poetry.lock
│   ├── pyproject.toml
│   ├── schema.json
│   ├── settings.py
│   ├── stacks
│   └── tests
└── frontend/

cdk目录存放Python编写的AWS CDK代码,使用Poetry管理依赖。

当前GitHub Actions工作流配置

触发分支为dev,部署作业配置如下:

jobs:
  aws_cdk:

    permissions:
      contents: 'read'
      id-token: 'write'

    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Configure AWS credentials
        if: github.ref == 'refs/heads/dev'
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ env.AWS_REGION }}

      - name: Run `cdk deploy`
        if: github.ref == 'refs/heads/dev'
        uses: youyo/aws-cdk-github-actions@v2
        env:
          AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID}}
        with:
          cdk_subcommand: 'deploy'
          cdk_stack: 'StreamingStack'
          cdk_version: 'latest'
          cdk_args: '--require-approval never'
          actions_comment: false
          working_dir: './cdk'

报错信息

部署时触发ModuleNotFoundError:

added 1 package in 856ms
Install aws-cdk latest
Successful install aws-cdk latest
Run cdk deploy --require-approval never "StreamingStack"
Traceback (most recent call last):
  File "/github/workspace/cdk/app.py", line 2, in <module>
    import aws_cdk as cdk
ModuleNotFoundError: No module named 'aws_cdk'

已尝试的修复步骤

在部署前添加了Poetry相关安装步骤,但问题未解决:

- name: Install desired Python version
  uses: actions/setup-python@v5
  with:
    python-version: ${{ env.PYTHON_VERSION }}

- name: Install Poetry
  uses: snok/install-poetry@v1
  with:
    version: ${{ env.POETRY_VERSION }}
    virtualenvs-create: false
    virtualenvs-in-project: false

- name: Install CDK dependencies
  run: |
    poetry config virtualenvs.create false
    poetry install --no-interaction --no-ansi --directory='./cdk'

pyproject.toml内容

[tool.poetry]
name = "cdk"
version = "0.1.0"
description = ""
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.11"
aws-cdk-lib = "^2.115.0"
pydantic_settings = "^2.1.0"
"aws-amplify.cdk.exported-backend" = "^0.0.6"
constructs = ">=10.0.0,<11.0.0"


[tool.poetry.group.dev.dependencies]
pytest = "^7.4.3"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

解决思路

1. 解决环境不一致问题

youyo/aws-cdk-github-actions会自动全局安装aws-cdk CLI,该CLI可能使用了与你通过setup-python配置的不同Python环境,导致Poetry安装的依赖无法被识别。

修复方案:跳过action的自动CDK安装,改用Poetry环境直接执行cdk命令:

# 替换原有的Run `cdk deploy`步骤
- name: Run `cdk deploy`
  if: github.ref == 'refs/heads/dev'
  working-directory: ./cdk
  run: |
    poetry run cdk deploy StreamingStack --require-approval never
  env:
    AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID}}
    AWS_REGION: ${{ env.AWS_REGION }}

2. 验证依赖安装状态

在安装依赖后添加调试步骤,确认依赖是否正确安装到当前环境:

- name: Verify dependencies
  working-directory: ./cdk
  run: |
    python --version
    poetry run pip list | grep -E "(aws-cdk-lib|constructs)"

3. 修正cdk.json的执行命令

确保cdk/cdk.json中的app命令使用Poetry环境运行Python:

{
  "app": "poetry run python app.py",
  "watch": {
    "include": [
      "**"
    ],
    "exclude": [
      "README.md",
      "cdk*.json",
      "requirements*.txt",
      "source.bat",
      "**/__pycache__",
      "**/tests"
    ]
  },
  "context": {
    ...
  }
}

4. 确保Python版本匹配

确认env.PYTHON_VERSION的值为3.11.x,与pyproject.toml中指定的python = "^3.11"一致,避免版本不兼容导致依赖安装失败。


内容的提问来源于stack exchange,提问作者mr_faulty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:19:51