【问题标题】:AWS CDK: Uploaded file must be a non-empty zipAWS CDK:上传的文件必须是非空 zip
【发布时间】:2022-01-18 05:02:25
【问题描述】:

我已经编写了一个简单的 hello world lambda 函数来部署,但是在命令 cdk deploy 之后它给出了这个错误。有人可以指导一下吗?

【问题讨论】:

标签: amazon-web-services aws-lambda aws-cdk aws-cloud9


【解决方案1】:

这个问题可能是由https://github.com/aws/aws-cdk/issues/12536 引起的。你应该试试:

  1. 升级 node.js 版本
  2. 正在删除cdk.out
  3. 升级到最新的 CDK 版本
  4. 直接从 S3 中删除资产(存储桶将类似于 cdk-hnb659fds-assets-<ACCOUNT NUMBER>-<REGION>
  5. 再次部署

CDK 不会重新上传资产,除非它发生了变化。这就是为什么需要删除它并可能在升级 node.js 后强制进行更改。

如果一切都失败了,试试the script我写的下载资产,通过重新压缩修复它,然后再次上传。它期望在您的项目的根目录中运行,因为它会查找 cdk.out

#!/bin/bash
set -ex

ASSEMBLY_DIRECTORY=`jq -r '.artifacts[] | select(.type == "cdk:cloud-assembly") | .properties.directoryName' cdk.out/manifest.json`
ASSET_MANIFESTS=`jq -r '.artifacts[] | select(.type == "cdk:asset-manifest") | .properties.file' cdk.out/$ASSEMBLY_DIRECTORY/manifest.json`
cd cdk.out/$ASSEMBLY_DIRECTORY
ASSETS=`jq -r '.files[].destinations[] | "s3://" + .bucketName + "/" + .objectKey' $ASSET_MANIFESTS | grep zip`

TMP=`mktemp -d`
cd $TMP

for ASSET in $ASSETS
do
    if aws s3 ls $ASSET; then
        aws s3 cp $ASSET pkg.zip
        mkdir s
        cd s
        if ! unzip ../pkg.zip; then echo bad zip; fi
        rm ../pkg.zip
        zip -r ../pkg.zip * .gitempty
        aws s3 cp ../pkg.zip $ASSET
        cd ..
        rm -rf s
    fi
done

rm -rf $TMP

您可以通过下载资产 zip 文件来确认您遇到了与我相同的问题。尝试使用unzip 提取它。如果它抱怨校验和或 CRC,你也有同样的问题。

【讨论】:

    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多