通过GitHub Actions和Python CDK部署到AWS
我正在处理一个项目,结构如下:
.
├── .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 代码。我想通过 GitHub Actions 来部署我的应用。我的工作流程文件放在 .github/workflows
文件夹里。目前我只有一个工作流程,因为我刚开始学习,它被设置为在我推送到 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'
在执行 CDK deploy
的时候,出现了一个 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 作为我的依赖管理工具,所以我决定在 CDK 部署步骤之前,往我的工作流程文件里添加以下步骤:
- 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 个回答
0
经过大量调试,我找到了问题所在。这个 youyo/aws-cdk-github-actions@v2
的 GitHub 操作需要一个 requirements.txt
文件来安装依赖项:
function installPipRequirements(){
if [ -e "requirements.txt" ]; then
echo "Install requirements.txt"
if [ "${INPUT_DEBUG_LOG}" == "true" ]; then
pip install -r requirements.txt
else
pip install -r requirements.txt >/dev/null 2>&1
fi
if [ "${?}" -ne 0 ]; then
echo "Failed to install requirements.txt"
else
echo "Successful install requirements.txt"
fi
fi
}
我从 pyproject.toml
文件创建了这个 requirements.txt
文件,然后让 GitHub 操作来安装所有的依赖项,这样问题就解决了。