Доступ к метаданным GCP из сценария запуска - PullRequest
0 голосов
/ 06 ноября 2019

Я запускаю экземпляры GCP из моего кода Python с использованием библиотек googleapiclient. Теперь я передаю учетные данные AWS в качестве метаданных в конфигурацию экземпляра:

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

getMetadata() {
  curl -fs http://metadata/computeMetadata/v1/instance/attributes/$1 \
    -H "Metadata-Flavor: Google"
}

aws_access_key_id=`getMetadata aws_access_key_id`
aws_secret_access_key=`getMetadata aws_secret_access_key`

echo 'export aws_access_key_id = aws_access_key_id' >> ~/.bashrc
echo 'export aws_secret_access_key = $aws_secret_access_key' >> ~/.bashrc

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

Кроме того,Я даже не вижу операторов экспорта в моем файле .bashrc, даже с пустыми значениями. Итак, не уверен, что происходит.

Для полноты, вот полный сценарий запуска:

#!/bin/bash

set -e

echo "Installing docker"
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
apt-cache policy docker-ce
apt-get install -y docker-ce make

echo "Checking for CUDA and installing."
# Check for CUDA and try to install.
if ! dpkg-query -W cuda-10-0; then
  curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
  wget -qO - https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub | sudo apt-key add -
  dpkg -i ./cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
  apt-get update
  apt-get install cuda -y
fi

# Enable persistence mode
nvidia-smi -pm 1
nvidia-smi --auto-boost-default=DISABLED

echo "Installing nvidia docker"
# Add the package repositories
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | tee /etc/apt/sources.list.d/nvidia-docker.list
apt-get update

apt-get update && apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

getMetadata() {
  curl -fs http://metadata/computeMetadata/v1/instance/attributes/$1 \
    -H "Metadata-Flavor: Google"
}

aws_access_key_id=`getMetadata aws_access_key_id`
aws_secret_access_key=`getMetadata aws_secret_access_key`

echo 'export aws_access_key_id = aws_access_key_id' >> ~/.bashrc
echo 'export aws_secret_access_key = $aws_secret_access_key' >> ~/.bashrc

Другое дело, что все остальное до этого момента работало нормально. Журнал консоли также не отображает никаких ошибок.

РЕДАКТИРОВАТЬ

Поэтому я поместил несколько операторов echo и посмотрел журналы консоли, а ключ и пароль, кажется,быть найдены правильно, но строки:

echo 'export aws_access_key_id = $aws_access_key_id' >> ~/.bashrc

, кажется, не имеют никакого эффекта. Не уверен, что файл перезаписан или что-то в этом роде, но я также попытался:

echo 'export aws_access_key_id = $aws_access_key_id' >> $HOME/.bashrc

, но без радости.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Сценарий запуска запускается от имени пользователя root при запуске / сбросе экземпляра виртуальной машины Google.

Я предлагаю использовать полный путь в сценарии запуска. Итак, замените

echo 'export aws_access_key_id = $aws_access_key_id' >> ~/.bashrc

на

echo 'export aws_access_key_id=$aws_access_key_id' >> /root/.bashrc

Кроме того, вам нужно удалить пробелы до и после = при экспорте переменной среды UNIX.

Надеюсь, что этопомогает тебе.

0 голосов
/ 07 ноября 2019

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

Если вы хотите настроить его для всех пользователей, тогда используйте /etc/bash.bashrc или /etc/profile для этой темы в аскубунту

...