如何使用 CloudFormation 将 UserData 传递给 Beanstalk 实例

Posted

技术标签:

【中文标题】如何使用 CloudFormation 将 UserData 传递给 Beanstalk 实例【英文标题】:How do I pass UserData to a Beanstalk instance with CloudFormation 【发布时间】:2012-01-14 18:46:26 【问题描述】:

我需要应用程序服务器(即 beanstalk 实例)在启动时执行一些操作,我想运行一个 bash 脚本,该脚本传递给具有常规 EC2 实例可用的 UserData 属性的实例。

我发现了几个示例 CloudFormation 模板,它们使用常规 EC2 实例执行此操作,但没有使用 Beanstalk 的示例。我已尝试将此添加到应用程序的属性字段中:

"MyApp" : 
  "Type" : "AWS::ElasticBeanstalk::Application",
  "Properties" : 
    "Description" : "MyApp description",
    "ApplicationVersions" : [
      ...
    ],
    "UserData" : 
      "Fn::Base64" :  "Fn::Join" : ["", [
        "#!/bin/bash\n",
        "touch /tmp/userdata_sucess\n"
      ]]
    ,
    ...

我也尝试添加到环境部分:

"MyAppEnv" : 
  "Type" : "AWS::ElasticBeanstalk::Environment",
  "Properties" : 
    "ApplicationName" :  "Ref" : "MyApp" ,
    "Description" :  "MyApp environment description",
    "UserData" : 
      "Fn::Base64" :  "Fn::Join" : ["", [
        "#!/bin/bash\n",
        "touch /tmp/userdata_sucess\n"
      ]]
    ,
    "TemplateName" : "MyAppConfiguration",
    "VersionLabel" : "First Cloud version"
  
,

在这两种情况下,这都会导致尝试创建堆栈时失败。有谁知道是否可以使用 CloudFormation 将 UserData 传递给 Beanstalk 实例。如果是这样 - 你能举个例子吗?

【问题讨论】:

【参考方案1】:

如果您想拥有 Beanstalk 提供的所有优势——比如不必像亚马逊为你打补丁的操作系统——这是不可能的。一种选择是创建一个自定义 AMI,您可以在其中包含所需的脚本,但您必须自己使用安全补丁管理操作系统。阅读更多here。

【讨论】:

@tronda,你知道6年后还是一样吗? 对不起,自从这篇文章之后,就没有与 Beanstalk 合作过。 @AlexanderF。【参考方案2】:

您可以使用.ebextensions 执行此操作,请参阅Amazon docs。

一个例子:

packages:
  yum:
    bison:              []
    libpcap-devel:      []
    libpcap:            "1.4.0"
    golang:             "1.13.4"
    git:                []

commands:
  20_show_info_pkgs:
    env:
      GOPATH:           /usr/local/gocode
      PATH:             $PATH:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/usr/local/bin
    ignoreErrors:       true
    command:            |
      ls -l /usr/local /usr/local/g*
      env
      yum list bison libpcap-devel libpcap golang git
      which git
      which go
      git --version
      go version
      goreplay version
      true

【讨论】:

这个例子和设置用户数据没有任何关系。我错过了什么吗?

以上是关于如何使用 CloudFormation 将 UserData 传递给 Beanstalk 实例的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CloudFormation 将 UserData 传递给 Beanstalk 实例

如何使用 Cloudformation 将 lambda 函数附加到现有 API 网关

如何使用 cloudformation 或 yaml 将保留天数设置为日志流

如何使用cloudformation模板将两个EC2实例(安装AMI创建的Elasticsearch)作为多节点?

使用 AWS CLI 将现有资源导入 CloudFormation

如何使用 CloudFormation 模板更新现有 AWS API Gateway