Как установить переменные среды на экземпляр EC2 через данные пользователя
Я пытаюсь установить переменные среды с данными пользователя EC2s, но ничего, что я делаю, кажется, работает
вот скрипты пользовательских данных, которые я пробовал
#!/bin/bash
echo "export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-23235232.us-east-1.elb.amazonaws.com" >> /env.sh
source /env.sh
И еще:
#!/bin/bash
echo "#!/bin/bash" >> /env.sh
echo "export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-67323523.us-east-1.elb.amazonaws.com" >> /env.sh
chmod +x /env.sh
/env.sh
Оба они абсолютно ничего не делают, и если я вхожу в систему и выдаю команду source /env.sh
или /env.sh
, она работает. так что это должно быть что-то запретное, что я пытаюсь сделать.
Вот результат от /var/log/cloud-init-output.log
с использованием -e -x
+ echo 'export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com'
+ source /env.sh
++ export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709022.us-east-1.elb.amazonaws.com
++ HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709022.us-east-1.elb.amazonaws.com
Тем не менее, echo $HOST_URL
пуст
В соответствии с запросом, полные UserData script
#!/bin/bash
set -e -x
echo "export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com" >> /env.sh
source /env.sh
/startup.sh staging 2649
Ответы
Ответ 1
Пользовательские данные script на EC2 выполняются после загрузки в его собственном процессе. Переменные окружения устанавливаются в этом процессе и исчезают, когда процесс завершается. Вы не увидите переменные среды в других процессах, то есть в командной строке входа в систему или других программах.
Вам нужно будет разработать способ, чтобы эти переменные среды попадали в любую программу, чтобы увидеть их.
Где вам нужны эти переменные? В разделе "/startup.sh 2649"?
ИЗМЕНИТЬ
Попробуйте следующее:
#!/bin/bash
set -e -x
export HOST_URL="checkEmai-LoadBala-ICHJ82KG5C7P-2141709021.us-east-1.elb.amazonaws.com"
/startup.sh staging 2649
Затем отредактируйте "/startup.sh" и поместите следующую строку сверху:
echo $HOST_URL > /tmp/var
Загрузите экземпляр, а затем вставьте /tmp/var здесь.
Ответ 2
Одним из наиболее настраиваемых подходов к определению переменных среды для экземпляров EC2 является использование хранилища параметров диспетчера систем. Этот подход облегчит управление различными параметрами для большого количества экземпляров EC2, как зашифрованных с использованием AWS KMS, так и в виде простого текста. Это также позволяет изменять значения параметров с минимальными изменениями на уровне экземпляра EC2. Шаги следующие.
- Определите строковые параметры (зашифрованные с помощью KMS или незашифрованные) в EC2 Systems Manager Хранилище параметров.
- В роли IAM, которую предполагает EC2, предоставьте необходимое разрешение для доступа к хранилищу параметров.
- Используя команды интерфейса командной строки AWS для EC2 System Manager, считайте параметры и экспортируйте их в переменные среды в разделе "Данные пользователя", используя Get-Parameter или Get-Parameters команды AWS CLI и управление вывод команды по мере необходимости.
например, с помощью команды Get-Parameter для получения параметра db_connection_string (незашифрованного).
export DB_CONNECTION =$(aws --region=us-east-2 ssm get-parameter --name "db_connection" --query 'Value')
Примечание. Дополнительные сведения о настройке ключей AWS KMS, определении зашифрованных строк, управлении политиками IAM & и т.д., см. следующие статьи.
Ответ 3
Я считаю, что это довольно простой способ установить переменные среды для всех пользователей с использованием пользовательских данных. Это позволяет мне настраивать приложения, чтобы один и тот же AMI мог работать с несколькими сценариями:
#!/bin/bash
echo export DB_CONNECTION="some DB connection" >> /etc/profile
echo export DB_USERNAME="my user" >> /etc/profile
echo export DB_PASSWORD="my password" >> /etc/profile
Теперь все пользователи будут иметь DB_CONNECTION, DB_USERNAME и DB_PASSWORD, установленные как переменные среды.
Ответ 4
Вы можете добавить еще одну оболочку script в /etc/profile.d/yourscript.sh
, которая будет содержать набор переменных среды, которые вы хотите добавить.
Этот script будет запускаться при каждой загрузке, и ваша переменная будет доступна для всех пользователей.
#!/bin/sh
echo 'export AWS_DEFAULT_REGION=ap-southeast-2' > ~/myconfiguration.sh
chmod +x ~/myconfiguration.sh
sudo cp ~/myconfiguration.sh /etc/profile.d/myconfiguration.sh
В приведенном выше коде создается оболочка script для установки переменной окружения для области aws по умолчанию и копирует ее на profile.d
.
Ответ 5
После выполнения данных в пользовательских данных script процесс завершается.
Таким образом, любая переменная среды, которую вы экспортируете, не будет присутствовать в следующем процессе. Один из способов заключается в том, чтобы поместить экспорт в файл .bashrc, чтобы он стал доступен и на следующем сеансе.
echo "export HOST_URL=checkEmai-LoadBala-ICHJ82KG5C7P-23235232.us-east-1.elb.amazonaws.com" >> ~/.bashrc
Ответ 6
Вы можете использовать этот скрипт:
#!/bin/bash
echo HOST_URL=\"checkEmai-LoadBala-ICHJ82KG5C7P-23235232.us-east-1.elb.amazonaws.com\" >> /etc/environment
Я создал экземпляр EC2 с Amazon Linux AMI 2018.03.0 и добавил к нему эти пользовательские данные, и он отлично работает.
Обратитесь к этому ответу для получения более подробной информации.