Я должен настроить группу автомасштаба экземпляров EC2, которые на начальной загрузке клонируют конкретное ответвление и фиксацию из частного репозитория GitHub, затем выполнят код из того репозитория.
Я использую полученный из Ubuntu AMI, который имеет облачную-init систему запуска на нем, таким образом, это кажется мне самым простым способом реализовать, это было бы облачным-init пользовательским сценарием, который устанавливает GitHub, развертывают ключ, использование что клонировать репозиторий, и затем запускает соответствующие сценарии в клонированном репозитории.
Вот моя первая попытка (развернуть ключ, ответвление и хеш фиксации вставляются процессом управления, который управляет кластером автомасштаба прежде, чем инициализировать LaunchConfiguration):
#!/usr/bin/env python
# ** IMPORTS OMITTED **
DEPLOY_KEY = '''
--- RSA PRIVATE KEY GOES HERE ---
'''
REPO_URL = 'git@github.com:github_user/MyRepository.git'
BRANCH = 'master'
COMMIT = '6dba9ae2cb77dc30c525ce14aeb82b072c88042b'
USER_HOMEDIR = os.environ['HOME']
WORKING_PATH = USER_HOMEDIR
try:
os.makedirs(os.path.join(USER_HOMEDIR, '.ssh'))
except:
pass
# Install the deploy key as the user's default identity file
keypath = os.path.join(USER_HOMEDIR, '.ssh', 'id_rsa')
try:
with open(keypath, 'w') as keyfile:
keyfile.write(DEPLOY_KEY)
except:
with open(keypath, 'r') as keyfile:
assert keyfile.read() == DEPLOY_KEY
# openSSH requires identitiy file mode to be 600
os.chmod(keypath, stat.S_IREAD)
# Disable strict host checking for github.com so we don't get the prompt
with open(os.path.join(USER_HOMEDIR, '.ssh', 'config'), 'a') as sshconfig:
sshconfig.write("\nHost github.com\n\tStrictHostKeyChecking no\n")
# clone the get repo
os.chdir(WORKING_PATH)
subprocess.call('git clone %s --branch %s' % (REPO_URL, BRANCH), shell=True)
if COMMIT != 'HEAD':
os.chdir(os.path.join(WORKING_PATH, 'LFAnalyze'))
subprocess.call('git checkout ' + COMMIT, shell=True)
Этот сценарий работает от оболочки входа в систему, но ему не удается для выполнения в облачной-init's среде, потому что переменная среды $HOME еще не установлена (облачные-init выполнения в Новомодном задании в runlevel 2 с доступом к этим переменным среды).
клон мерзавца, кажется, не имеет опцию передать в опциях SSH тех, которые позволили бы мне использовать конкретный файл ключей. Это просто смотрит в ~/.ssh/для ключа идентификационных данных по умолчанию. Если $HOME не определяется, когда этот сценарий выполняется, как я могу сказать клон мерзавца, где искать Развернуть Ключ?
С другой стороны, там некоторый путь состоит в том, чтобы заставить облако-init выполнить сценарий как конкретного пользователя, эмулируя среду оболочки входа в систему?
Или я просто приближаюсь к этой всей проблеме неправильный путь? Существует ли установленная лучшая практика или стандартный способ сделать это?
Обычно я бы рекомендовал вам создать рабочий экземпляр EC2 с ключом SSH и git repo clone (рабочий экземпляр с вашей идеальной конфигурацией).
Затем создайте AMI этого экземпляра и в конфигурации запуска введите свои сценарии в пользовательские данные, чтобы сценарии запускались каждый раз (в основном обновляйте git и запускайте команду) при запуске экземпляра.
Образец сценария будет (при условии, что / opt / src находится там, где находится ваше репо):
#!/bin/sh
cd /opt/src
git pull
source run_cmd.sh
Таким образом, ваш скрипт содержится и поддерживается в хорошем состоянии. Надеюсь, это поможет.