использовать локальную среду для замены переменных в шаблоне облачной информации - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть некоторые переменные, которые я хотел бы заменить в пользовательских данных шаблона облачной информации, и я не хочу помещать эти переменные в качестве параметров в облачной информации. Как я могу это сделать? Кажется, что облачность требует, чтобы кто-то всегда включал любую переменную, которую нужно заменить в качестве параметров, но я чувствую, что она недостаточно гибкая. Поэтому не уверен, что кто-то другой нашел способ сделать это.

Некоторые переменные не обязательно должны быть связаны с инфраструктурой, но необходимо динамически заменять эти переменные.

например, у меня есть эти данные пользователя

UserData:
        "Fn::Base64":
          !Sub |
            #!/bin/bash -xe

            cat >> /tmp/docker_compose.yaml  << EOF
            version: '3.5'
            services:
               ngnix:
                 container_name: nginx
                 image: nginx:$TAG
                 restart: always
                 ports:
                  - 80:80
                 environment:
                    SERVER_ID: $SERVER_ID
                    AWS_REGION: $AWS_REGION 
            EOF

и я хочу установить значения переменных env на компьютере, с которого будет выполняться команда cloudformation

export TAG=1.9.9
export SERVER_ID=12
export AWS_REGION=us-east-1

Как я могу использовать эти локальные значения env для замены в пользовательских данных без использования этих переменных в качестве параметров. Я уже попробовал все, что мог придумать, и не смог этого сделать.

Итак, хотел бы воспользоваться мощью Интернета, если кто-то придумал способ или взлом.

Спасибо

1 Ответ

0 голосов
/ 15 апреля 2019

Вот один из способов сделать это с помощью сценария, могут быть ситуации, в которых этот сценарий будет вызывать проблемы, но вам придется проверить и посмотреть.

Я не хочу переменных средыбыть доступным вне подготовки моего сценария облачной информации - поэтому я сделал все внутри одного файла сценария;загрузка переменных среды и подстановка.

Примечание: Вам потребуется установить envsubst на вашу машину.

У меня есть 3 файла, с которых нужно начать: Один файл - мойскрипт cloudformation, в котором у меня есть значение по умолчанию для каждого из моих параметров, выраженное в виде переменной bash:

cloudformation.yaml

Region
  Default: $Region

InstanceType
  Default: $InstanceType

Colour:
  Default: $Colour

Тогда у меня естьфайл переменных:

variables.txt

InstanceType=t2.micro
Colour=Blue
Region=eu-west-1

Тогда у меня есть скрипт, который выполняет подстановку:

script.sh

#!/bin/bash
source variables.txt
export $(cut -d= -f1 variables.txt)

cat cloudformation.yaml | envsubst > subs_cloudformation.yaml

Это содержимое моей папки:

cloudformation.yaml    script.sh     variables.txt

Я проверяю, что мой script.sh имеет правильные разрешения:

chmod +x script.sh

Изапустите мой скрипт:

./script.sh

Содержимое моей папки теперь:

cloudformation.yaml     script.sh     variables.txt     subs_cloudformation.yaml

И если я просматриваю содержимое моего файла subs_cloudformation.yaml:

Region
  Default: eu-west-1

InstanceType
  Default: t2.micro

Colour:
  Default: Blue

Теперь я могу запустить этот сценарий облачной информации, и облачная информация сделает замену этих значений по умолчанию в моем шаблоне - так что все мыто, что вы делаете с помощью приведенного выше сценария, дает облачной информации значения по умолчанию.

Я, конечно, только что дал фрагмент шаблона облачной информации, вы можете улучшить его, имея dev.txt, qa.txt, production.txt файл переменных и его замена в любой.

Редактировать: Неважно, где в файле находится ваша переменная, поэтому она может быть в пользовательских данных или параметрах по умолчанию ... не имеет значения.Вам также нужно быть осторожным, это не проверит, есть ли у вас подходящая переменная среды для каждой переменной в вашем файле облачной информации.Если его нет в файле переменной, подставленное значение будет пустым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...