如何将 beanstalk .ebextensions .config“sources”键“target directory”设置为当前 bundle 目录

如何将 beanstalk .ebextensions .config“sources”键“target directory”设置为当前 bundle 目录

我在 python 2.7 elastic beanstalk 环境中工作。

我正在尝试使用来源在 .ebextensions .config 文件中键入以将 tgz 存档复制到我的应用程序根目录中的目录-- /opt/python/current/app/utility。我这样做是因为此文件夹中的文件太大,无法包含在我的 github 存储库中。

但是,看起来 sources 键是在创建到当前包目录的 ondeck 符号链接之前执行的,所以/opt/python/ondeck/app在使用 sources 命令时我无法引用,因为它会创建文件夹,然后在尝试创建 ondeck 符号链接时出现 beanstalk 错误。

以下是.ebextensions/utility.config我尝试过的文件的副本:

sources:
  /opt/python/ondeck/app/utility: http://[bucket].s3.amazonaws.com/utility.tgz

以上成功复制到 /opt/python/ondec/app/utility,但是 beanstalk 出现错误,因为它无法从 /opt/python/bundle/x --> /opt/python/ondeck 创建符号链接。

sources:
  utility: http://[bucket].s3.amazonaws.com/utility.tgz

上面将文件夹从根目录复制到 /utility,与 /etc 并行。

答案1

我能够使用不同的密钥来完成此操作:

container_commands:
  001_get_utility_dir:
    command: "cd /opt/python/ondeck/app/utility && curl http://[bucket].s3.amazonaws.com/elasticbeanstalk/utility.tgz | tar xz"

答案2

这有一定的帮助,但在我的环境(php)中没有临时ondeck目录,并且current我的应用程序最终部署的目录是在运行命令后重新创建的。

因此,我需要在部署后运行一个脚本。搜索后发现,我可以放入一个脚本/opt/elasticbeanstalk/hooks/appdeploy/post/,它将在部署后运行。

因此,我使用最简单的方式将文件从 S3 下载/提取到临时目录中sources。然后,我创建一个文件,该文件将在部署后复制我的文件并将其放在部署后挂钩目录中。

sources:
  /some/existing/directory: https://s3-us-west-2.amazonaws.com/my-bucket/vendor.zip
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_move_my_files_on_deploy.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      mv /some/existing/directory /var/app/current/where/the/files/belong

相关内容