Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как передать UserData в экземпляр Beanstalk с помощью CloudFormation

Автор вопроса: trondaОтветов: 2

Мне нужен сервер приложений, который представляет собой экземпляры beanstalk, для выполнения некоторых действий при запуске, и я подумал о запуске сценария bash, переданного экземпляру со свойством UserData, доступным для обычных экземпляров EC2.

Я нашел несколько примеров шаблонов 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"
  }
},

В обоих случаях это привело к сбою при попытке создать стек. Кто-нибудь знает, можно ли передать UserData в экземпляр Beanstalk с помощью CloudFormation. Если да - можете привести пример.

amazon-web-servicesamazon-ec2amazon-elastic-beanstalkamazon-cloudformation

Ответы

Ответ 1 · рейтинг 7 · tronda

Если вы хотите иметь все преимущества, которые предлагает Beanstalk - например, не исправлять ОС, что Amazon делает для вас, - это невозможно. Один из вариантов - создать собственный AMI, в который вы включите необходимые сценарии, но тогда вы должны будете самостоятельно управлять ОС с помощью исправлений безопасности. Подробнее читайте здесь.

Ответ 2 · mrflip

Вы можете сделать это с помощью .ebextensions, см. документацию Amazon а>.

Пример:

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы