Elastic Beanstalk正在无限地将一个文件复制到我在. ebeextensions中使用配置文件创建的/tmp文件夹中。文件名为"/tmp/mount-efs.sh"。该文件导致环境初始化时出现问题。所以我试着去掉它,或者至少改变它的内容。
我已经试过:
- 部署旧版本,该版本没有此文件。结果:ec2实例没有被删除,所以文件仍然在那里
- 上传压缩文件而不使用应用程序版本结果:ec2实例没有被删除,所以文件仍然在那里
- 删除/tmp/mount-efs.sh目录下的文件结果:该文件立即再次出现,并且其"。bak";文件太
- 删除'。配置文件从/var/app/staging/. ebeextensions/结果:同样的错误和文件mount-efs.sh仍然创建在/tmp文件夹
我认为Elastik Beanstalk是坚持一个版本,它认为是有效的。但是这个版本有一个问题。EB不允许我部署不同的版本(旧的或新的)。
更奇怪的是,版本,EB每次回退,没有文件在。ebeextensions .
我也试着重建环境。结果:backback被加载,文件在那里,问题发生了。
从eb-engine.log:
Running command /bin/sh -c /opt/aws/bin/cfn-init -s arn:aws:cloudformation:us-west-2:xxxxxxxxxxxx:stack/awseb-e-xxxxxxxxxxx-stack/nnnnnnnn-nnnn-nnnn-nnnn-xxxxxxxxxxxx -r AWSEBAutoScalingGroup --region us-west-2 --configsets Infra-EmbeddedPreBuild
2022/07/14 20:31:13.403626 [INFO] Error occurred during build: Command 01_mount failed
2022/07/14 20:31:13.403667 [ERROR] An error occurred during execution of command [self-startup] - [PreBuildEbExtension]. Stop running the command. Error: EbExtension build failed. Please refer to /var/log/cfn-init.log for more details.
这个错误每5秒发生一次,所以EB在这里是一个无限循环。所以我想去掉/tmp/mount-efs.sh文件,或者/tmp/mount-efs.sh的内容是不同的。我想直接通过ssh在ec2实例它自己上做到这一点。
我的理解是,EB的配置文件,我在.ebextensions补充道。在这些文件中,有在/tmp文件夹中创建的文件。这个文件在/tmp文件夹中初始化时运行。
那么我必须更改什么文件,以便在/tmp文件夹(没有部署)中创建的文件中识别更改?
或者我可以停止初始化循环吗?
发生无限循环是因为一个命令调用了/var/www/html中不存在的文件。为什么这个文件不存在对我来说是个谜。整个/var/www/html文件夹为空。通常,弹性beanstalk应该在运行命令之前完成这些工作,但情况并非如此。(创建app文件夹和staging,将源代码解压缩到staging,复制到app/current文件夹,并创建一个指向app/current文件夹的符号链接)
我可以通过以下操作来解决无限循环的问题:
sudo mkdir -p /var/app/staging
cd $_
sudo unzip /opt/elasticbeanstalk/deployment/app_source_bundle
sudo cp -rpv /var/app/staging /var/app/current
sudo rm -rf /var/www/html
sudo ln -s /var/app/current /var/www/html
mkdir -p:创建带有parent的目录。所以if "app"不存在,将在"staging"之前创建。将被创建
$_:指向最后一个文件夹的引用。这里是/var/app/staging
unzip:将源代码解压缩到staging
cp -rp:递归复制(r),并保持所有权和时间戳(p)不"分段";到"current">
rm -rf/var/www/html:删除已有的HTML文件夹。小心你要删除的命令!
ln -s:创建一个从/var/www/html到/var/app/current的符号链接