![](/img/trans.png)
[英]AWS Elastic Beanstalk - Failing to install requirements.txt on deployment
[英]Elastic Beanstalk deployment failing due to .ebextensions File
我正在將燒瓶 (flask-restplus) REST API 部署到 AWS Elastic Beanstalk 實例,並且遇到了奇怪的故障模式。
我的 API 端點之一依賴於 OpenCV,這需要一些依賴項,如下所述: ImportError: libGL.so.1: cannot open shared object file: No such file or directory while importing OCC 。 根據那里的答案,我創建了一個 .ebextensions 目錄並創建了兩個文件,一個用於安裝 libGL 包,如下所示:
packages:
yum:
mesa-libGL : []
mesa-libGL-devel : []
如果重要的話,我將該文件保存為packages.config。
.ebextensions 中的第二個文件下載並安裝 zlib:
commands:
00_download_zlib:
command: |
wget https://github.com/madler/zlib/archive/v1.2.9.tar.gz
tar xzvf v1.2.9.tar.gz
cd zlib-1.2.9
./configure
make
make install
ln -fs /usr/local/lib/libz.so.1.2.9 /lib64/libz.so
ln -fs /usr/local/lib/libz.so.1.2.9 /lib64/libz.so.1
我將該文件保存為 zlib.config。
當我第一次運行eb deploy
,一切都很好。 部署成功,我的 API 響應了請求,依賴 OpenCV 的代碼工作了。 到現在為止還挺好。
但是,在后續部署中,我收到了以下錯誤:
2020-11-18 23:47:44 ERROR Instance deployment failed. For details, see 'eb-engine.log'.
2020-11-18 23:47:45 ERROR [Instance: i-XXXXXXXXXXXXX] Command failed on instance. Return code: 1 Output: Engine execution has encountered an error..
2020-11-18 23:47:45 INFO Command execution completed on all instances. Summary: [Successful: 0, Failed: 1].
2020-11-18 23:47:45 ERROR Unsuccessful command execution on instance id(s) 'i-XXXXXXXXXXXXX'. Aborting the operation.
2020-11-18 23:47:46 ERROR Failed to deploy application.
我進入並從實例中提取日志,首先查看 eb-engine.log。 唯一的錯誤是:
2020/11/18 23:47:44.131837 [ERROR] An error occurred during execution of command [app-deploy] - [PreBuildEbExtension]. Stop running the command. Error: EbExtension build failed. Please refer to /var/log/cfn-init.log for more details.
但是,查看 cfn-init.log 只是表明一切都成功了:
2020-11-18 23:47:34,297 [INFO] -----------------------Starting build-----------------------
2020-11-18 23:47:34,306 [INFO] Running configSets: Infra-EmbeddedPreBuild
2020-11-18 23:47:34,309 [INFO] Running configSet Infra-EmbeddedPreBuild
2020-11-18 23:47:34,313 [INFO] Running config prebuild_0_newapi
2020-11-18 23:47:36,512 [INFO] Running config prebuild_1_newapi
2020-11-18 23:47:44,106 [INFO] Command 00_download_zlib succeeded
2020-11-18 23:47:44,108 [INFO] ConfigSets completed
2020-11-18 23:47:44,108 [INFO] -----------------------Build complete-----------------------
然后我嘗試刪除整個 .ebextensions 目錄並重新部署,部署成功。 然后我嘗試添加回 .ebextensions 目錄並一次添加一個文件,發現添加 packages.config 時部署工作正常,但添加 zlib.config 時再次失敗。
我的問題歸結為:為什么會發生這種情況,我能做些什么來解決它? 我的理解是,我需要將這兩個文件都部署到我的實例,以防我遷移到不同的環境,或者 AutoScaling 遷移我的實例等。
我唯一能想到的是實例不喜歡我不斷重新安裝zlib的事實,但是cfn-init-cmd.log表明zlib.config中的所有命令都成功了,cfn也是如此-初始化日志。 那么為什么 eb-engine.log 會報錯呢? 它是否告訴我在錯誤的地方查找可能相關的日志? 我查看了每個日志文件,但沒有看到任何其他表明任何問題的內容。
我確實找到了一個與Immutable Environment Updates相關的可能解決方案,它看起來可能有效,但感覺像是一些不必要的工作。 至少我想了解為什么我需要進行這種更改以及為什么 Elastic Beanstalk 不能更好地與我的 .ebextensions 配合使用。
以防萬一將來有人遇到這個問題,我想分享解決方案。 我永遠無法確定為什么 zlib 安裝過程在實例上第一次部署后失敗,所以我最終使用了我在原始問題中鏈接的不可變環境更新設置。
部署需要更長的時間來處理,因為部署會在每個部署上創建一個自動縮放組和一個新實例,但我的部署現在每次都可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.