AWS Lambda:层转换失败:某些目录没有执行权限;

问题描述

在为请求创建Python层时出现以下错误https://dev.to/razcodes/how-to-create-a-lambda-layer-in-aws-106m

我检查了以下答案:Conversion failed: Some directories do not have execute permissions。但是Windows没有chmod。即使我运行了等效的icacls,它仍然无法正常工作...

这是我运行的完整命令:

New-Item -ItemType Directory -Force -Path "aws-lambda-layer/lambda-layer/python/lib/python3.8/site-packages"
pip3 install requests --target "aws-lambda-layer/lambda-layer/python/lib/python3.8/site-packages"
icacls "aws-lambda-layer" /grant:r Everyone:F /t

Compress-Archive -Path "aws-lambda-layer/lambda-layer/*" -DestinationPath "aws-lambda-layer/lambda-layer.zip" -Force
icacls "aws-lambda-layer" /grant:r Everyone:F /t

$bucket = "some-bucket-name-asdf"
aws s3api create-bucket --bucket $bucket --create-bucket-configuration "LocationConstraint=us-west-2"
aws s3 cp "aws-lambda-layer/lambda-layer.zip" "s3://$bucket/lambda-layer"
aws lambda publish-layer-version --layer-name "AutoTradingLambdaLayer" --content "S3Bucket=auto-Trading-lambda-layer,S3Key=lambda-layer" --compatible-runtimes "python3.8"

我也在控制台UI中进行了操作,并得到了相同的错误

解决方法

出于好奇,我在WSL2中启动了Ubuntu,等效的命令也起作用了。

rm -rf tmp/
mkdir -p tmp/aws-lambda-layer/lambda-layer/python/lib/python3.8/site-packages
pip3 install requests --target "tmp/aws-lambda-layer/lambda-layer/python/lib/python3.8/site-packages"

chmod -R 755 tmp/
cd tmp/aws-lambda-layer/lambda-layer/ && zip -r lambda-layer.zip "./" && cd ../../..
chmod -R 755 tmp/

aws lambda publish-layer-version --layer-name "AutoTradingLayerV2" --zip-file fileb://tmp/aws-lambda-layer/lambda-layer/lambda-layer.zip --compatible-runtimes "python3.8"

甚至更怪异,即使在创建图层之后也是如此。我的cdk deploy在Windows中会失败,但在Linux中可以正常工作...

2020-09-12 14:55:11 UTC-0700    dev-XXXStack    ROLLBACK_IN_PROGRESS    The following resource(s) failed to create: [XXXFunction6E68C5BD,XXXFunctionC9F0CF18,XXXFunction5D6ADE12,XXXFunction4434B1DB]. . Rollback requested by user.
2020-09-12 14:55:10 UTC-0700    XXXFunction5D6ADE12 CREATE_FAILED   Layer conversion failed: Some directories do not have execute permissions; (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: bf5051dd-ec8a-43d3-953b-38ff5d03c27f; Proxy: null)
2020-09-12 14:55:09 UTC-0700    XXXFunction4434B1DB CREATE_FAILED   Layer conversion failed: Some directories do not have execute permissions; (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: c7db1bbf-f460-474c-9d04-a32b6ba92d28; Proxy: null)
2020-09-12 14:55:08 UTC-0700    XXXFunction6E68C5BD CREATE_FAILED   Layer conversion failed: Some directories do not have execute permissions; (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: 7fde3735-2273-437d-b51b-8aec83e2fb61; Proxy: null)
2020-09-12 14:55:07 UTC-0700    XXXFunctionC9F0CF18 CREATE_FAILED   Layer conversion failed: Some directories do not have execute permissions; (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: 2c65b709-e2c9-46ea-bcc6-4a9d1f8618e6; Proxy: null)