Как установить переменные среды на экземпляр 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 и добавил к нему эти пользовательские данные, и он отлично работает.

Обратитесь к этому ответу для получения более подробной информации.