如何在 aws elastic beanstalk 环境实例启动上运行 shell 脚本

Posted

技术标签:

【中文标题】如何在 aws elastic beanstalk 环境实例启动上运行 shell 脚本【英文标题】:How ro run a shell script on aws elastic beanstalk environment instance launch 【发布时间】:2017-09-15 04:30:16 【问题描述】:

我正在使用 Terraform 脚本创建 aws elastic beanstalk 环境,我需要在实例启动时启动一个 shell 脚本

我已经尝试了以下

resource "aws_elastic_beanstalk_environment" "Environment" 
    name = "$var.ebs_env_name"
    application = "$var.ebs_app_name"
    ---
    ---
    ---
    setting = 
      namespace = "aws:autoscaling:launchconfiguration"
      name = "user_data"
      value = "$file("user-data.sh")"
   

这是抛出错误

应用计划时出错:

发生了 1 个错误:

aws_elastic_beanstalk_environment.Environment:ConfigurationValidationException:配置验证异常:无效的选项规范(命名空间:'aws:autoscaling:launchconfiguration',选项名称:'user_data'):未知的配置设置。 状态码:400,请求ID:xxxxx-xxxxxx

请帮忙

【问题讨论】:

【参考方案1】:

感谢您的回答,我找到了解决办法

我创建了一个文件夹 .ebextensions 并在文件夹中创建了一个名为 99delayed_job.config 的文件(您可以提供任何名称)

commands: 
  create_post_dir: 
    command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/pre"
    ignoreErrors: true
files: 
  /opt/elasticbeanstalk/hooks/appdeploy/pre/99_restart_delayed_job.sh: 
    group: root
    mode: "000755"
    owner: root
    content: |-
        #!/usr/bin/env bash
        <My shell script here>

一个并用 'Dockerrun.aws.json' 压缩的这个 zip 我发送到 s3 并用于部署

工作正常:)

【讨论】:

如果您想在不阻塞部署的情况下运行长期任务怎么办。在我的情况下,在尝试您建议 eb 部署程序在此步骤中是堆栈并且永远不会将节点状态更改为绿色 !!警告 !! “自定义平台挂钩是 Amazon Linux AMI 平台上的一项遗留功能。在 Amazon Linux 2 平台上,/opt/elasticbeanstalk/hooks/ 文件夹中的自定义平台挂钩已完全停用。Elastic Beanstalk 不会读取或执行它们。亚马逊Linux 2 平台支持一种新的平台挂钩,专门设计用于扩展 Elastic Beanstalk 托管平台。” - docs.aws.amazon.com/elasticbeanstalk/latest/dg/…【参考方案2】:

我找不到任何有关 AWS Elastic Beanstalk 服务的信息,其中公开了修改实例上的 user_data 的方法。但是,您可以调整使用的 AMI,因此您可以使用 Packer 之类的工具为自己构建一个自定义 AMI,其中包含 user_data

【讨论】:

以上是关于如何在 aws elastic beanstalk 环境实例启动上运行 shell 脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS Elastic Beanstalk 上修改 Nginx 配置

如何在 AWS Elastic Beanstalk 上设置 HTTPS

如何在 AWS Elastic Beanstalk 上设置 HTTPS

如何在 AWS Elastic Beanstalk 中更改数据库配置

如何在 AWS Elastic Beanstalk 中选择特定平台?

如何使用 Elastic beanstalk 和 Dockerrun.aws.json 正确部署到 AWS?