AWS ElasticBeanstalk的

时间:2016-04-12 05:11:47

标签: amazon-web-services amazon-elastic-beanstalk webp

我尝试支持在EB上使用webp格式,但是它没有按预期工作......

我用.ebextensions创建了一个.config文件:

commands:
01-command:
    command: wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-0.5.0.tar.gz

02-command:
    command: tar xvzf libwebp-0.5.0.tar.gz

03-command:
    command: cd libwebp-0.5.0

04-command:
    command: ./configure

05-command:
    command: make

06-command:
    command: sudo make install

但是在部署时我遇到了这个错误:

  

错误:实例上的命令失败。返回码:127输出:/ bin / sh:./ configure:没有这样的文件或目录。

我做错了吗? (环境:运行PHP 5.6的64位Amazon Linux 2015.09 v2.0.6)

1 个答案:

答案 0 :(得分:2)

您需要执行安装后部署。 AWS尚未真正记录如何执行命令 post 部署,因此我将在此处执行此操作。

commands:
  create_post_dir:
    command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
    ignoreErrors: true
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_install_libwebp.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      . /opt/elasticbeanstalk/support/envvars
      cd $EB_CONFIG_APP_CURRENT
      wget https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-0.5.0.tar.gz
      tar xvzf libwebp-0.5.0.tar.gz
      cd libwebp-0.5.0
      sudo ./configure
      sudo make
      sudo make install

正如我所提到的,AWS并没有真正记录您可以在部署后的ElasticBeanstalk上实际执行脚本。如果您在eb-commandprocessor.log文件中查看,您将看到eb查找AppDeployPreHook(4/6)和AppDeployPostHook(1 of 2)。它看起来像这样:

[2016-04-13T14:15:22.955Z] DEBUG [8851]  : Loaded 6 actions for stage 0.<br>
[2016-04-13T14:15:22.955Z] INFO  [8851]  : Running 1 of 6 actions: InfraWriteConfig...<br>
[2016-04-13T14:15:22.962Z] INFO  [8851]  : Running 2 of 6 actions: DownloadSourceBundle...<br>
[2016-04-13T14:15:23.606Z] INFO  [8851]  : Running 3 of 6 actions: EbExtensionPreBuild...<br>
[2016-04-13T14:15:24.229Z] INFO  [8851]  : Running 4 of 6 actions: AppDeployPreHook...<br>
[2016-04-13T14:15:28.469Z] INFO  [8851]  : Running 5 of 6 actions: EbExtensionPostBuild...<br>
[2016-04-13T14:15:28.970Z] INFO  [8851]  : Running 6 of 6 actions: InfraCleanEbextension...<br>
[2016-04-13T14:15:28.974Z] INFO  [8851]  : Running stage 1 of command CMD-AppDeploy...<br>
[2016-04-13T14:15:28.974Z] DEBUG [8851]  : Loaded 2 actions for stage 1.<br>
[2016-04-13T14:15:28.974Z] INFO  [8851]  : Running 1 of 2 actions: AppDeployEnactHook...<br>
[2016-04-13T14:15:29.600Z] INFO  [8851]  : Running 2 of 2 actions: AppDeployPostHook...<br>
[2016-04-13T14:16:42.048Z] INFO  [8851]  : Running AddonsAfter for command CMD-AppDeploy... <br>


那个小“AppDeployPostHook”告诉我们它正在搜索运行部署后的脚本。您可以在服务器上的/opt/elasticbeanstalk目录中找到eb部署脚本,如果您在该目录中搜索ls,您将找到hooks,这就是我们正在寻找的内容for,如果您cd hooks,您将找到appdeploy目录,cd appdeploy然后ls,您将获得两个目录并执行。这看起来很平凡,但真的很棒,因为现在我们知道eb在哪里寻找它正在运行的脚本。由于AppDeployPreHook脚本是从“pre”目录执行的,因此我们知道我们需要一个“post”目录来执行部署后使用该eb正在运行的AppDeployPostHook的命令。既然我们知道该怎么做,我们就可以开始编写命令了。

  1. create_post_dir 第一步是使用mkdir命令在服务器上创建“post”目录。 mkdir "/opt/elasticbeanstalk/hooks/appdeploy/post"将为我们做到这一点,因此我们将把它创建为命令。
  2. 文件文件配置允许我们通过ElasticBeanstalk在目录中创建文件。对我们来说非常方便! files操作的第一行为我们提供了要创建的文件的名称。我们将创建一个shell脚本来执行命令,你可以随意调用它,但我会从99开始并继续。我们将这个shell脚本称为“99_install_libwebp.sh”。
  3. 文件设置接下来的三行设置文件设置。确保root拥有它们并且有000755'd。
  4. 文件内容这是我们正在创建的文件的内容。直接前进。把你的shell脚本放在那里,你很高兴。
  5. 加载环境变量我们选择加载eb环境变量,以便我们的脚本可以知道当前版本的应用程序的位置。它通常在/ var / app / current中,但它可能在其他地方取决于各种因素。我们将使用环境变量让我们的生活更轻松。
  6. 更改为我们当前的应用程序目录我们将打开cd到我们当前的应用程序目录,以便我们可以做我们在这里做的事情。
  7. 获取我们想要的软件包使用wget获取我们想要的libwebp
  8. 打开包裹自解释
  9. 更改软件包目录现在我们已经解压缩了软件包,我们可以将其更改为软件包目录。
  10. 做我们需要做的事我们现在可以运行./configure,make和make install。
  11. 就是这样。您可以使用隐形AppDeployPostHook来运行您需要的任何后期部署命令。如果您需要在部署后安装软件包,重新启动服务或执行任何其他操作,则非常有用。

    我添加了我部署到Github的代码,以便于参考。 https://github.com/hephalump/testphp

    注意:我成功运行了一个稍微不同的环境。我使用ElasticBeanstalk使用64位Amazon Linux 2016.03 v2.1.0上的最新环境版本PHP 5.6部署新的PHP应用程序;您正在使用的环境类型不适用于我...实际上,这是我唯一可以使用PHP 5.6的版本,所以我选择了它。