如何解决CDK CLI版本不匹配问题

27

我遇到了如下错误:

此 CDK CLI 与您的应用程序使用的 CDK 库不兼容。请将 CLI 升级到最新版本。 (云组装架构版本不匹配:支持的最大架构版本为 8.0.0,但找到了 9.0.0)

在执行 cdk diff 命令后。

我运行了 npm install -g aws-cdk@latest,成功安装了新版本的包:Successfully installed aws-cdk.assets-1.92.0 aws-cdk.aws-apigateway-1.92.0 aws-cdk.aws-apigatewayv2-1.92.0 ... etcpip install -r requirements.txt

但是在输入 cdk --version 后,我仍然得到 1.85.0 (build 5f44668)

我的 setup.py 的内容如下:

    install_requires=[
    "aws-cdk.core==1.92.0",
    "aws-cdk.aws-ec2==1.92.0",
    "aws-cdk.aws_ecs==1.92.0",
    "aws-cdk.aws_elasticloadbalancingv2==1.92.0"
],

现在我遇到了麻烦,因为将setup.py软件包降级到1.85.0版本会抛出ImportError: cannot import name 'CapacityProviderStrategy' from 'aws_cdk.aws_ecs'错误。

帮帮我,我想使用最新的软件包版本。

10个回答

50

我遇到了一个 TypeScript 包的问题,这是在更新 package.json 中的 cdk 后出现的。正如 Maciej 所指出的那样,升级似乎没有起作用。我使用 npm 安装 cdk cli ,并进行了一次卸载和重新安装,问题得到了解决。

npm -g uninstall aws-cdk
npm -g install aws-cdk

我正在使用cdk 1.119.0启动一个go项目。这解决了我的版本错误! - Kevin Wang
1
在使用npm install aws-cdk@latest升级到最新版本的NodeJS项目中,遇到了这个问题。显然你不能直接升级CDK,你必须先将其删除然后重新安装! - Malvineous
即使我尝试了卸载和重新安装,也没有解决我的问题。我需要按照@Maciej的答案(https://dev59.com/oFEG5IYBdhLWcg3wZsk4#66578813)中指定的方法删除符号链接。 - therightstuff
我在使用AWS CDK CLI v2.23.0时出现了“支持的版本为19.0.0,但发现了21.0.0”的错误。我尝试卸载后,更改为npm install -g aws-cdk@1.119.0,结果显示“13.00,但发现了21.0.0”。然后我又更改为npm install -g aws-cdk@1.158.0,结果显示“20.00,但发现了21.0.0”。最后我更改为npm install -g aws-cdk@1.189.0,成功解决了问题。 - tkerwood
对于我而言,这个命令行起作用了:npm -g uninstall cdknpm -g uninstall cdk不是 aws-cdk - Santanu Dey

7

除了这个命令以外,没有其他方法能帮助 Mac OS:

yarn global upgrade aws-cdk@latest


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community
这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - l33tHax0r
2
我不确定,但这解决了我的问题。 - addicted

6

我已经修复了它,但是描述步骤太混乱了。

看起来符号链接有问题。

/usr/local/bin/cdk

原指向版本为1.85.0,而非我更新的版本1.92.0

我将aws-cdknode_modules中删除并重新安装,然后删除符号链接/usr/local/bin/cdk,手动重建它:

ln -s /usr/lib/node_modules/aws-cdk/bin/cdk /usr/local/bin/cdk

只有卸载旧版本并重新安装新版本才对我起作用!!谢谢 - RVndra Singh
我需要手动删除符号链接,谢谢! - therightstuff

4

对于那些没有使用全局安装(从node_modules使用cdk)并且使用单体库的人来说,如果遇到这个问题,那是由于devDependencies中的aws-cdk包版本与依赖包的版本不匹配所导致的。

我在我的根package.json中使用了"aws-cdk": "2.18.0",但是我所有的包都使用"aws-cdk-lib": "2.32.1"作为它们的依赖。通过将根package.json更新为使用"aws-cdk": "2.31.1",这个问题得到了解决。


2

我也遇到过这个问题几次,所以我想分享一下我的解决方案,特别是针对已有项目的版本不匹配问题。

对于Python:

你需要修改setup.py文件来指定最新的版本。

可以隐式地指定,也可以显式地指定。

    install_requires=[
    "aws-cdk.core",
    "aws-cdk.aws-ec2",
    "aws-cdk.aws_ecs",
    "aws-cdk.aws_elasticloadbalancingv2"
],

或者明确地;

    install_requires=[
    "aws-cdk.core==1.xx.x",
    "aws-cdk.aws-ec2==1.xx.x",
    "aws-cdk.aws_ecs==1.xx.x",
    "aws-cdk.aws_elasticloadbalancingv2==1.xx.x"
],

然后从项目根目录运行;

setup.py install

针对TypeScript:

修改package.json文件;

"dependencies": {
    "@aws-cdk/core" : "latest",
    "source-map-support": "^0.5.16"
  }

然后从项目根目录运行:

npm install

我希望这对你有所帮助!如果需要我详细解释或提供更多细节,请告诉我。

1

这在我的开发环境中对我起作用,因为我重新克隆了源代码,所以需要重新运行npm install命令。示例package.json可能如下所示(根据需要更新版本):

{
    "dependencies": {
        "aws-cdk": "2.27.0",
        "node": "^16.14.0"
    }
}

0
如果您已经到这里了,有两个选项可以克服这个问题:
  1. 配置 Cloud9 环境并在其中运行代码。
  2. 在容器中运行该应用程序。

将 CDK 应用程序移动到一个文件夹中,以便您有一个父文件夹来放置 Dockerfile、Makefile 和 docker-compose 文件。

启动 Docker Desktop,从终端进入根文件夹,然后运行 make 命令。

Dockerfile 内容:

FROM ubuntu:20.04 as compiler

WORKDIR /app/
RUN apt-get update -y \
    && apt install python3 -y \
    && apt install python3-pip -y \
    && apt install python3-venv -y \
    && python3 -m venv venv


ARG NODE_VERSION=16

RUN ls

RUN apt-get update
RUN apt-get install xz-utils
RUN apt-get -y install curl

RUN apt-get update -y && \
    apt-get upgrade -y && \
    apt-get install -y && \
    curl -sL https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - && \
    apt install -y nodejs

RUN apt-get install -y python-is-python3
RUN npm install -g aws-cdk
RUN python -m venv /opt/venv

docker-compose.yaml 文件内容

version: '3.6'
services:
  cdk-base:
    build: .
    image: cdk-base
    command: ${COMPOSE_COMMAND:-bash}
    volumes:
      - .:/app
      - /var/run/docker.sock:/var/run/docker.sock #Needed so a docker container can be run from inside a docker container
      - ~/.aws/:/root/.aws:ro

Makefile 内容

SHELL=/bin/bash
CDK_DIR=cdk_app/
COMPOSE_RUN = docker-compose run --rm cdk-base
COMPOSE_UP = docker-compose up
PROFILE = --profile default

all: pre-reqs synth
pre-reqs: _prep-cache container-build npm-install 
    

_prep-cache: #This resolves Error: EACCES: permission denied, open 'cdk.out/tree.json'
    mkdir -p cdk_websocket/cdk.out/

container-build: pre-reqs
    docker-compose build

container-info:
    ${COMPOSE_RUN} make _container-info

_container-info:
    ./containerInfo.sh

clear-cache:
    ${COMPOSE_RUN} rm -rf ${CDK_DIR}cdk.out && rm -rf ${CDK_DIR}node_modules

cli: _prep-cache
    docker-compose run cdk-base /bin/bash

npm-install: _prep-cache
    ${COMPOSE_RUN} make _npm-install

_npm-install:
    cd ${CDK_DIR} && ls && python3 -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt && npm -v && python --version

npm-update: _prep-cache
    ${COMPOSE_RUN} make _npm-update

_npm-update:
    cd ${CDK_DIR} && npm update

synth: _prep-cache
    ${COMPOSE_RUN} make _synth

_synth:
    cd ${CDK_DIR} && source .venv/bin/activate && pip install -r requirements.txt && cdk synth --no-staging ${PROFILE} && cdk deploy --require-approval never ${PROFILE}

bootstrap: _prep-cache
    ${COMPOSE_RUN} make _bootstrap

_bootstrap:
    cd ${CDK_DIR} && source .venv/bin/activate && pip install -r requirements.txt && cdk bootstrap ${PROFILE}

deploy: _prep-cache
    ${COMPOSE_RUN} make _deploy

_deploy: 
    cd ${CDK_DIR} && cdk deploy --require-approval never ${PROFILE}

destroy:
    ${COMPOSE_RUN} make _destroy

_destroy:
    cd ${CDK_DIR} && source .venv/bin/activate && pip install -r requirements.txt && cdk destroy --force ${PROFILE}

diff: _prep-cache
    ${COMPOSE_RUN} make _diff

_diff: _prep-cache
    cd ${CDK_DIR} && cdk diff ${PROFILE}

test: 
    ${COMPOSE_RUN} make _test

_test: 
    cd ${CDK_DIR} && npm test 

0

我更改了typescript的版本为"^4.7.3",然后它就可以工作了。 注意:cdk版本2("aws-cdk-lib": "^2.55.0")


0

卸载CDK版本:

npm uninstall -g aws-cdk

安装应用程序所使用的特定版本。例如:CDK 1.158.0

npm install -g aws-cdk@1.158.0


0

我删除了node_modules目录,然后它就可以工作了。我想你也可以只删除cdk库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接