簡體   English   中英

由於 .ebextensions 文件,Elastic Beanstalk 部署失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM