Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pythonlambda包&;部署Bash_Python_Bash_Amazon Web Services_Aws Lambda - Fatal编程技术网

pythonlambda包&;部署Bash

pythonlambda包&;部署Bash,python,bash,amazon-web-services,aws-lambda,Python,Bash,Amazon Web Services,Aws Lambda,从我的buildspec.yml(在CodeBuild中)执行一个bash文件(下面的代码),复制、重命名、压缩、移动,然后将168个Python lambda上传到S3。Lambda拉链的平均尺寸为381KB 在本地,Mac运行Mojave10.14,bash每次都按预期成功执行 在构建容器Linux(Ubuntu18.04-aws/codebuild/standard:2.0)中运行时,脚本不会完全成功,但也不会抛出错误。如果脚本能够做到这一点,那么最多只能将5-9个zip文件上传到S3中

从我的buildspec.yml(在CodeBuild中)执行一个bash文件(下面的代码),复制、重命名、压缩、移动,然后将168个Python lambda上传到S3。Lambda拉链的平均尺寸为381KB

在本地,Mac运行Mojave10.14,bash每次都按预期成功执行

在构建容器Linux(Ubuntu18.04-aws/codebuild/standard:2.0)中运行时,脚本不会完全成功,但也不会抛出错误。如果脚本能够做到这一点,那么最多只能将5-9个zip文件上传到S3中

我尝试了大量的纠正措施,从优化bash(例如,不复制到_staging目录,不移动zip)到在S3上传中使用copy而不是sync,再到将环境计算能力提高到最大

关于这个问题,我唯一的“线索”是输出在出乎意料的时候开始记录。 e、 g

而不是

Copying Lambdas to S3 Lambda Repository 
upload: _deploy/beta-forgot-password.zip to s3://beta-com-lambdas/20190731142007/beta-forgot-password.zip
upload: _deploy/beta-change-password.zip to s3://beta-com-lambdas/20190731142007/beta-change-password.zip
任何想法都值得赞赏。提前谢谢

#!/bin/bash
BUILD_ENVIRONMENT=$1
UNIQUE_KEY=$2
echo 'Executing Lambda Package and Deployment for: '$BUILD_ENVIRONMENT' environment';
echo 'Unique Lambda S3 Key: ' $UNIQUE_KEY
echo 'Creating Lambda Staging Directory';
mkdir ./_staging ;
echo 'Copying Lambdas to Staging Directory' ;
cp -r ./lambdas/* ./_staging;
echo 'Renaming Lambdas in Staging Directory' ;
cd _staging
for i in */; do mv "$i" "$BUILD_ENVIRONMENT-${i%/}" ; done
echo 'Zipping Lambdas in Staging Directory' ;
for i in */; do (cd "$i"; zip -r "../${i%/}.zip" .) &> /dev/null ;
echo "Zipping: ${i%/}.zip" ; done
echo 'Creating Lambda Deploy Directory' ;
mkdir ./_deploy ;
echo 'Moving Lambda Deployment Packages' ;
find . -name "*.zip" -exec mv {} ./_deploy \;
echo "Sync Lambdas to S3 Lambda Repository "
aws sync ./_deploy s3://$BUILD_ENVIRONMENT-smc-com-lambdas/$UNIQUE_KEY/
echo "Lambda Package and Deployment Completed"

为什么不尝试创建自己的“构建环境”,它基本上是一个Docker容器。查看这篇博文。如果你能让它在你机器中的容器上工作,它应该与CodeBuild和相同的“构建环境”一起工作;请发布正确的脚本。值得一提的是,第一个示例的输出看起来像来自zip,因此我怀疑您正在后台运行zip,并且在开始上载时并非所有文件都准备就绪。感谢kdgregory&@guzmonne。我可以使用下面的步骤来解决问题。@kdgregory-如果我在插入set-x并意识到这个问题之前看到它的话,它会很有价值;但你的直觉很准确。再次感谢。为什么不尝试创建自己的“构建环境”,它基本上是一个Docker容器。查看这篇博文。如果你能让它在你机器中的容器上工作,它应该与CodeBuild和相同的“构建环境”一起工作;请发布正确的脚本。值得一提的是,第一个示例的输出看起来像来自zip,因此我怀疑您正在后台运行zip,并且在开始上载时并非所有文件都准备就绪。感谢kdgregory&@guzmonne。我可以使用下面的步骤来解决问题。@kdgregory-如果我在插入set-x并意识到这个问题之前看到它的话,它会很有价值;但你的直觉很准确。再次感谢你。
#!/bin/bash
BUILD_ENVIRONMENT=$1
UNIQUE_KEY=$2
echo 'Executing Lambda Package and Deployment for: '$BUILD_ENVIRONMENT' environment';
echo 'Unique Lambda S3 Key: ' $UNIQUE_KEY
echo 'Creating Lambda Staging Directory';
mkdir ./_staging ;
echo 'Copying Lambdas to Staging Directory' ;
cp -r ./lambdas/* ./_staging;
echo 'Renaming Lambdas in Staging Directory' ;
cd _staging
for i in */; do mv "$i" "$BUILD_ENVIRONMENT-${i%/}" ; done
echo 'Zipping Lambdas in Staging Directory' ;
for i in */; do (cd "$i"; zip -r "../${i%/}.zip" .) &> /dev/null ;
echo "Zipping: ${i%/}.zip" ; done
echo 'Creating Lambda Deploy Directory' ;
mkdir ./_deploy ;
echo 'Moving Lambda Deployment Packages' ;
find . -name "*.zip" -exec mv {} ./_deploy \;
echo "Sync Lambdas to S3 Lambda Repository "
aws sync ./_deploy s3://$BUILD_ENVIRONMENT-smc-com-lambdas/$UNIQUE_KEY/
echo "Lambda Package and Deployment Completed"